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

git-svn-id: https://svn.apache.org/repos/asf/jakarta/turbine/core/tags/META_1_2@222029 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/.cvsignore b/.cvsignore
deleted file mode 100644
index debdf3c..0000000
--- a/.cvsignore
+++ /dev/null
@@ -1,13 +0,0 @@
-target
-cactus_client.log
-cactus_server.log
-maven.log
-velocity.log*
-*~
-.classpath
-.project
-.externalToolBuilders
-logs
-junit*.properties
-turbine-pom-snapshot-version
-*.ser
diff --git a/LICENSE.txt b/LICENSE.txt
deleted file mode 100644
index d645695..0000000
--- a/LICENSE.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/README.txt b/README.txt
deleted file mode 100644
index ca92a19..0000000
--- a/README.txt
+++ /dev/null
@@ -1,61 +0,0 @@
---------------------------------------------------------------------------
-Copyright 2001-2004 The Apache Software Foundation
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
---------------------------------------------------------------------------
-
---------------------------------------------------------------------------
-$Id$
-Turbine Top Level README
---------------------------------------------------------------------------
-
-Welcome to Turbine.  For more information about Turbine, please look
-at the HTML documentation in the docs/ directory.
-
-Here is a description of what each of the top level directories
-contains.  Please consult the documentation in each of the lower level
-directories for information that is specific to their contents.
-
-bin/        This is a temporary directory for building the project.
-conf/       This is where the sample configurations live.
-docs/       This is where the documentation and database schemas live.
-            All of the files in this directory are mirrored onto
-            the live website.
-lib/        This is where the additional libraries and .jar
-            files reside.
-src/        This is where all of the source code to Turbine lives.
-
-In order to get started with Turbine, you must build it first.
-Turbine uses Maven for its build environment.  You can find installation
-information about Maven online at http://maven.apache.org/ .
-Once Maven has been installed, just type 'maven'.  The default behavior is to
-compile, run the unit tests, and build the jar.  Some other useful goals:
-
-maven site:generate   - generate the site documention
-
-As of Turbine 2.3, you must also have the Torque plugin for Maven installed
-to build Turbine.  Information on how to install the plugin is available
-at http://db.apache.org/torque/maven-howto.html.
-
-During the build process, you may run into a few unsatisfied dependencies.
-These particular jar files are from Sun and can not be downloaded with Maven.
-You will need to download these yourself from the URL's listed below and
-manually copy the jar files into your local maven repository
-($MAVEN_HOME/repository).
-
-http://java.sun.com/products/javabeans/glasgow/jaf.html
-http://java.sun.com/products/javamail/
-http://java.sun.com/products/jdbc/
-http://java.sun.com/products/jndi/
-
--The Turbine Team
diff --git a/build.properties b/build.properties
deleted file mode 100644
index 564d6fc..0000000
--- a/build.properties
+++ /dev/null
@@ -1,7 +0,0 @@
-# -------------------------------------------------------------------
-# B U I L D   P R O P E R T I E S
-#
-# $Id$
-#
-# Add local changes to the build process here.
-# -------------------------------------------------------------------
diff --git a/conf/.cvsignore b/conf/.cvsignore
deleted file mode 100644
index e233d5f..0000000
--- a/conf/.cvsignore
+++ /dev/null
@@ -1 +0,0 @@
-.ant.properties
diff --git a/conf/Fulcrum.properties b/conf/Fulcrum.properties
deleted file mode 100644
index a2549b6..0000000
--- a/conf/Fulcrum.properties
+++ /dev/null
@@ -1,415 +0,0 @@
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.FactoryService.classname=org.apache.fulcrum.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.fulcrum.pool.TurbinePoolService
-services.MimeTypeService.classname=org.apache.fulcrum.mimetype.TurbineMimeTypeService
-services.SchedulerService.classname=org.apache.fulcrum.schedule.TurbineSchedulerService
-services.XmlRpcService.classname=org.apache.fulcrum.xmlrpc.TurbineXmlRpcService
-services.UploadService.classname=org.apache.fulcrum.upload.TurbineUploadService
-services.SecurityService.classname=org.apache.fulcrum.security.impl.db.DBSecurityService
-services.XSLTService.classname=org.apache.fulcrum.xslt.TurbineXSLTService
-services.BSFService.classname=org.apache.fulcrum.bsf.TurbineBSFService
-services.GlobalCacheService.classname=org.apache.fulcrum.cache.TurbineGlobalCacheService
-services.TemplateService.classname=org.apache.fulcrum.template.TurbineTemplateService
-services.LocalizationService.classname=org.apache.fulcrum.localization.TurbineLocalizationService
-services.IntakeService.classname=org.apache.fulcrum.intake.TurbineIntakeService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cacheCheckFrequency = 5000
-
-# -------------------------------------------------------------------
-#
-# B S F  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.BSFService.scriptsDirectory = WEB-INF/scripts
-services.BSFService.defaultExtension = py
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# There is no configuration anymore, just an abstract front
-# end to underlying template engines like velocity, webmacro,
-# and JSP.
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page.template = /Default.vm
-services.VelocityService.default.layout.template = /Default.vm
-
-services.VelocityService.runtime.log=/logs/velocity.log
-#services.VelocityService.input.encoding=UTF-8
-services.VelocityService.velocimacro.library = GlobalMacros.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates/app
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-services.VelocityService.eventCartridge.classes =
-
-services.VelocityService.earlyInit = true
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page.template = /Default.jsp
-services.JspService.default.layout.template = /Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-services.JspService.earlyInit = true
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=0
-
-# -------------------------------------------------------------------
-#
-#  L O C A L I Z A T I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default ResourceBundle and language/country codes used by the
-# TurbineLocalizationService.
-#
-services.LocalizationService.locale.default.bundle=MyBundle
-services.LocalizationService.locale.default.language=en
-services.LocalizationService.locale.default.country=US
-
-#
-# This will set the charset= portion of the ContentType: header.
-# Leave commented out unless you want to return stuff as a different
-# charset.
-#
-# services.LocalizationService.locale.default.charset=
-
-# -------------------------------------------------------------------
-#
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings.
-# The file must use the same syntax as the mime.types file of
-# the Apache Server, i.e.
-# <mimetype> <ext1> <ext2>...
-#
-#services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales
-# and the corresponding character encodings. The service itself
-# contains a hardcoded set of most common mappings.
-# The file should use the Java property file syntax, i.e.
-# <lang_country_variant>=<charset>
-#
-#services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.
-#
-# Default = false
-#
-services.SchedulerService.earlyInit = false
-
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the User interface.
-# You want to override this setting only if you want your User
-# implementation to provide application specific addtional
-# functionality.
-#
-# Default: org.apache.fulcrum.security.impl.db.entity.TurbineUser
-#
-
-services.SecurityService.user.class=org.apache.fulcrum.security.impl.db.entity.TurbineUser
-
-#
-# This setting is DBSecurityService specific - this class is consulted for the names
-# of the columns in the users' tables for the purpose of creating join queries.
-# If you use your own User implementation in conjunction with DBSecurityService,
-# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
-# and you need to specify the name of the peer class here.
-#
-# Default: org.apache.fulcrum.security.impl.db.entity.TurbineUserPeer
-#
-services.SecurityService.userPeer.class=org.apache.fulcrum.security.impl.db.entity.TurbineUserPeer
-
-#
-# This is the class that implements UserManager interface.
-# Override this setting if you want your User information stored
-# on a different medium (LADP directory is a good example).
-# Default implementation uses Peers and a relational database .
-#
-
-services.SecurityService.user.manager=org.apache.fulcrum.security.impl.db.DBUserManager
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# Configuration for the LDAP Security Service implementation
-
-#services.SecurityService.ldap.security.athentication=simple
-#services.SecurityService.ldap.port=<LDAP PORT>
-#services.SecurityService.ldap.host=<LDAP HOST>
-#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
-#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
-#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
-#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
-#services.SecurityService.ldap.dn.attribute=userPrincipalName
-#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-# -------------------------------------------------------------------
-#
-#  X M L R P C  S E R V I C E
-#
-# -------------------------------------------------------------------
-# This property specifies which class should be used to parse
-# xml for XmlRpc functionality.
-#
-# Default: org.apache.xerces.parsers.SAXParser
-
-services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser
-
-# This property specifies which port the server part of the XmlRpc
-# should listen, if it is active.
-#
-# Default: 12345
-
-services.XmlRpcService.port=12345
-
-# If any classes are specified here, the Service will create an
-# instance of them here and start up a listener on the specified
-# port.
-#
-# Note that the handlers demonstrated are not very useful.  You
-# will have to invent your own services.  They do however
-# illustrate that any class with a default constructor can be
-# added here
-#
-# The handler parameter without further extension determines
-# the default handler for the service
-#
-# Default: no classes are specified by default
-
-#services.XmlRpcService.handler.$default=java.util.Hashtable
-#services.XmlRpcService.handler.stringhandler=java.lang.String
-
-# The following properties allow the transfer of data between
-# separate Turbine applications running on different servers.
-# This allows B2B type behavior such as sending database
-# updates in the form of XML or whatever type of data
-# that needs to be shared between Turbine applications
-# running on separate servers.
-
-services.XmlRpcService.handler.file = org.apache.fulcrum.xmlrpc.util.FileHandler
-services.XmlRpcService.paranoid = false
-services.XmlRpcService.acceptClient = 192.168.1.*
-services.XmlRpcService.denyClient =
-
-# Do we want a secure server
-
-services.XmlRpcService.secure.server = false
-
-# Secure server options
-
-services.XmlRpcService.secure.server.option.java.protocol.handler.pkgs = \
-    com.sun.net.ssl.internal.www.protocol
-
-services.XmlRpcService.secure.server.option.security.provider = \
-    com.sun.net.ssl.internal.ssl.Provider
-
-services.XmlRpcService.secure.server.option.security.protocol = TLS
-
-# You probably want to keep your key stores and trust stores
-# clear out of your webapp.
-
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStore = /tmp/keystore
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStorePassword = password
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStore = /tmp/truststore
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStorePassword = password
-
-services.XmlRpcService.secure.server.option.sun.ssl.keymanager.type = SunX509
-services.XmlRpcService.secure.server.option.sun.ssl.trust.manager.type = SunX509
-
-# These values should be set to 'all' for debugging purposes.
-
-services.XmlRpcService.secure.server.option.javax.net.debug = none
-services.XmlRpcService.secure.server.option.java.security.debug = none
-
-services.XmlRpcService.earlyInit = true
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-#services.FactoryService.class.loaders=
-
-# Default factory to use when no custom factory is specified.
-#
-# Example: org.foo.bar.DefaultFactory
-#
-#services.FactoryService.factory.default=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-#--------------------------------------------------------------------
-#
-# X S L T  S E R V I C E
-#
-#--------------------------------------------------------------------
-
-services.XSLTService.path = /path/to/stylesheets
-services.XSLTService.cache = false
-
-# -------------------------------------------------------------------
-#
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-# The location of the xml file specifying valid inputs
-# -------------------------------------------------------------------
-
-services.IntakeService.xml.path=@INTAKE_DESCRIPTOR@
diff --git a/conf/Log4j.properties b/conf/Log4j.properties
deleted file mode 100644
index aab8a6f..0000000
--- a/conf/Log4j.properties
+++ /dev/null
@@ -1,98 +0,0 @@
-# ------------------------------------------------------------------------
-#
-# Logging Configuration
-#
-# $Id$
-#
-# ------------------------------------------------------------------------
-
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, turbine
-
-#
-# Turbine goes into Turbine Log
-#
-log4j.category.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Torque has its own log file
-#
-log4j.category.org.apache.torque = INFO, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Velocity Logfile
-#
-log4j.category.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-#
-# Avalon Logfile
-#
-log4j.category.avalon = INFO, avalon
-log4j.additivity.avalon = false
-
-#
-# Scheduler Category
-#
-log4j.category.scheduler = INFO, scheduler
-log4j.additivity.scheduler = false
-
-########################################################################
-#
-# Logfile definitions
-#
-########################################################################
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.FileAppender
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# torque.log
-# 
-log4j.appender.torque = org.apache.log4j.FileAppender
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Scheduler Output
-#
-log4j.appender.scheduler = org.apache.log4j.FileAppender
-log4j.appender.scheduler.file = ${applicationRoot}/logs/scheduler.log
-log4j.appender.scheduler.layout = org.apache.log4j.PatternLayout
-log4j.appender.scheduler.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.scheduler.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.FileAppender
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
-
-#
-# Avalon gets configured to write its output onto the avalon
-# category.
-#
-log4j.appender.avalon = org.apache.log4j.FileAppender
-log4j.appender.avalon.file = ${applicationRoot}/logs/avalon.log
-log4j.appender.avalon.layout = org.apache.log4j.PatternLayout
-log4j.appender.avalon.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.avalon.append = false
-
-
diff --git a/conf/TurbineResources.properties b/conf/TurbineResources.properties
deleted file mode 100644
index b6c4382..0000000
--- a/conf/TurbineResources.properties
+++ /dev/null
@@ -1,1036 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /WEB-INF/conf/Log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  D A T A B A S E  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# Turbine uses the decoupled torque now!!
-# The database settings are now in Torque.properties
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behaviour of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specfied
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the default Doctype if you use the deprecated VelocityECSLayout.  The 
-# default Doctype can be set by using the single strings: Html40Strict, 
-# Html40Transitional, or Html40Frameset.  Additionally the default can be 
-# supplied as two strings separated by a comma giving the DTD and URI.
-#
-# Default: ignored if not set to some value.
-
-#default.doctype=Html40Transitional
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple 
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-# 
-action.eventsubmit.needsvalue = false
-
-#
-# Set this value to false if you want perform your own error trapping.
-# Otherwise when an exception in an do<xxx> or doPerform method occurs
-# then Turbine will hand control over to your specified error screen
-# 
-action.event.bubbleexception = true
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  P E E R S
-#
-# -------------------------------------------------------------------
-# Supplies Turbine with information about the database schema, which
-# can simplify any required Peer classes.
-#
-# Default: org.apache.turbine.util.db.map.TurbineMapBuilder
-# -------------------------------------------------------------------
-
-database.maps.builder=org.apache.turbine.util.db.map.TurbineMapBuilder
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.SchedulerService.classname=org.apache.turbine.services.schedule.TurbineSchedulerService
-services.XmlRpcService.classname=org.apache.turbine.services.xmlrpc.TurbineXmlRpcService
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-services.SecurityService.classname=org.apache.turbine.services.security.db.DBSecurityService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.XSLTService.classname=org.apache.turbine.services.xslt.TurbineXSLTService
-#services.SessionService.classname=org.apache.turbine.services.session.TurbineSessionService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-#services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-#
-# These are the mapper classes responsible for the lookup of Page, Screen, Layout and Navigation classes according
-# to the supplied template Name. They also map template names on the Layout and Screen file names to be used.
-# 
-#services.TemplateService.mapper.page.class            = org.apache.turbine.services.template.mapper.DirectTemplateMapper
-#services.TemplateService.mapper.screen.class          = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.layout.class          = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.navigation.class      = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.layout.template.class = org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-#services.TemplateService.mapper.screen.template.class = org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.UIManager
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-#   persistent: tool is instantitated once for each user session once
-#               the user logs in and is is stored in the user's permanent
-#               hashtable.
-#               This means for a logged in user the tool will be persisted
-#               in the user's objectdata. Tool should be threadsafe and
-#               Serializable.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-#This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-#tool.request.om=org.apache.turbine.om.OMTool
-#tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-#tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-tool.global.ui=org.apache.turbine.services.pull.util.UIManager
-
-# The UI Manager will allow you to skin your Turbine
-# application using simple properties files that are
-# located in the WEBAPP/resources/ui/skins/ directory
-# hierarchy.
-
-tool.ui.skin=default
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not servered by the container. 
-#
-# The default behaviour was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = false
-tool.link.want.relative = false
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.VelocityService.earlyInit= true
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen=VelocityScreen
-services.VelocityService.default.layout = VelocityOnlyLayout
-services.VelocityService.default.navigation=VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.runtime.log=/logs/velocity.log
-#services.VelocityService.input.encoding=UTF-8
-services.VelocityService.velocimacro.library = GlobalMacros.vm
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
-
-# Set the following line to true to cause velocity to automatically reload
-# library macro files if they change.  This is useful for debugging.
-services.VelocityService.velocimacro.library.autoreload = false
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates/app
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-#
-# Do not remove the class path loader lightly, it is used to load the TurbineMacros from VelocityOnlyLayout
-#
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the UserManager from the
-# DBSecurityService.
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.db.DBUserManager
-services.SecurityService.user.manager = org.apache.turbine.services.security.db.DBUserManager
-
-#
-# These are the default classes used by the Security Service to
-# provide User, Group, Role and Permission objects.
-# You want to override this setting only if you want your
-# implementation to provide application specific addtional
-# functionality.
-#
-# For LDAP use:
-# services.SecurityService.user.class=org.apache.turbine.services.security.ldap.LDAPUser
-# LDAP does not yet provide custom Group, User and Role objects so you
-# must use it with the default TurbineGroup, TurbineRole and
-# TurbinePermission objects.
-#
-# Class for User. Default: org.apache.turbine.om.security.TurbineUser
-services.SecurityService.user.class=org.apache.turbine.om.security.TurbineUser
-# Class for Group. Default: org.apache.turbine.om.security.TurbineGroup
-services.SecurityService.group.class=org.apache.turbine.om.security.TurbineGroup
-# Class for Role. Default: org.apache.turbine.om.security.TurbineRole
-services.SecurityService.role.class=org.apache.turbine.om.security.TurbineRole
-# Class for Permission. Default: org.apache.turbine.om.security.TurbinePermission
-services.SecurityService.permission.class=org.apache.turbine.om.security.TurbinePermission
-
-#
-# This is the class that implements the ACL interface.
-# You want to override this setting only if you want your ACL
-# implementation to provide application specific addtional
-# functionality.
-#
-
-# Default: org.apache.turbine.util.security.TurbineAccessControlList
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This setting is DBSecurityService specific - this class is consulted for the names
-# of the columns in the users' tables for the purpose of creating join queries.
-# If you use your own User implementation in conjunction with DBSecurityService,
-# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
-# and you need to specify the name of the peer class here.
-#
-# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
-#
-services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.TurbineUserPeer
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# Configuration for the LDAP Security Service implementation
-
-#services.SecurityService.ldap.security.athentication=simple
-#services.SecurityService.ldap.port=<LDAP PORT>
-#services.SecurityService.ldap.host=<LDAP HOST>
-#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
-#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
-#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
-#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
-#services.SecurityService.ldap.dn.attribute=userPrincipalName
-#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# This property specifies the type of security authentication
-#
-# Default: simple
-#
-
-# services.SecurityService.ldap.security.authentication=simple
-
-#
-# The host name where the LDAP server is listenting.
-#
-# Default: localhost
-#
-
-# services.SecurityService.ldap.host=localhost
-
-#
-# The port number where the LDAP server is listenting.
-#
-# Default: 389
-#
-
-# services.SecurityService.ldap.port=389
-
-#
-# The user name of the admin user. The admin user should be able to
-# read from the LDAP repository.
-# Characteres '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.username=turbineUserUniqueId/turbine%dc/example%dc/com
-
-#
-# The password of the admin user.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.password=turbine
-
-#
-# The class name of the ldap provider.
-#
-# Default: com.sun.jndi.ldap.LdapCtxFactory
-#
-
-# services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# The directory base to search.
-# '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.basesearch=dc/example%dc/com
-
-#
-# The unique id. It must be an integer field and it is required only when
-# the users are in LDAP but the groups, roles and permissions are in the
-# Database.
-#
-# services.SecurityService.ldap.user.userid=
-
-#
-# This property maps the username with an attribute in LDAP.
-#
-# Default: turbineUserUniqueId
-#
-
-# services.SecurityService.ldap.user.username=turbineUserUniqueId
-
-#
-# This property maps the firstname with an attribute in LDAP.
-#
-# Default: turbineUserFirstName
-#
-
-# services.SecurityService.ldap.user.firstname=turbineUserFirstName
-
-#
-# This property maps the lastname with an attribute in LDAP.
-#
-# Default: turbineUserLastName
-#
-
-# services.SecurityService.ldap.user.lastname=turbineUserLastName
-
-#
-# This property maps the email with an attribute in LDAP.
-#
-# Default: turbineUserMailAddress
-#
-
-# services.SecurityService.ldap.user.email=turbineUserMailAddress
-
-#
-# This property maps the userPassword with an attribute in LDAP.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.user.password=userPassword
-
-
-# -------------------------------------------------------------------
-#
-#  X M L R P C  S E R V I C E
-#
-# -------------------------------------------------------------------
-# This property specifies which class should be used to parse
-# xml for XmlRpc functionality.
-#
-# Default: org.apache.xerces.parsers.SAXParser
-
-services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser
-
-# This property specifies which network interface the server part of
-# XmlRpc should bind to (if it is active).  If not specified, the
-# server will bind to all addresses configured for your host.
-#
-# Default: 127.0.0.1
-
-#services.XmlRpcService.address=127.0.0.1
-
-# This property specifies which TCP port the web server part of
-# XmlRpc should listen on (if it is active).
-#
-# Default: 12345
-
-services.XmlRpcService.port=12345
-
-# If any classes are specified here, the Service will create an
-# instance of them here and start up a listener on the specified
-# port.
-#
-# Note that the handlers demonstrated are not very useful.  You
-# will have to invent your own services.  They do however
-# illustrate that any class with a default constructor can be
-# added here
-#
-# The handler parameter without further extension determines
-# the default handler for the service
-#
-# Default: no classes are specified by default
-
-#services.XmlRpcService.handler.$default=java.util.Hashtable
-#services.XmlRpcService.handler.stringhandler=java.lang.String
-
-# The following properties allow the transfer of data between
-# separate Turbine applications running on different servers.
-# This allows B2B type behavior such as sending database
-# updates in the form of XML or whatever type of data
-# that needs to be shared between Turbine applications
-# running on separate servers.
-
-services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.FileHandler
-services.XmlRpcService.paranoid = false
-services.XmlRpcService.acceptClient = 192.168.1.*
-services.XmlRpcService.denyClient =
-
-# Do we want a secure server
-
-services.XmlRpcService.secure.server = false
-
-# Secure server options
-
-services.XmlRpcService.secure.server.option.java.protocol.handler.pkgs = \
-    com.sun.net.ssl.internal.www.protocol
-
-services.XmlRpcService.secure.server.option.security.provider = \
-    com.sun.net.ssl.internal.ssl.Provider
-
-services.XmlRpcService.secure.server.option.security.protocol = TLS
-
-# You probably want to keep your key stores and trust stores
-# clear out of your webapp.
-
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStore = /tmp/keystore
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStorePassword = password
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStore = /tmp/truststore
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStorePassword = password
-
-services.XmlRpcService.secure.server.option.sun.ssl.keymanager.type = SunX509
-services.XmlRpcService.secure.server.option.sun.ssl.trust.manager.type = SunX509
-
-# These values should be set to 'all' for debugging purposes.
-
-services.XmlRpcService.secure.server.option.javax.net.debug = none
-services.XmlRpcService.secure.server.option.java.security.debug = none
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-#services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-#--------------------------------------------------------------------
-#
-# X S L T  S E R V I C E
-#
-#--------------------------------------------------------------------
-
-services.XSLTService.path = /path/to/stylesheets
-services.XSLTService.cache = false
-
-
-
-#--------------------------------------------------------------------
-#
-# P A R A M E T E R  P A R S E R
-#
-#--------------------------------------------------------------------
-#
-# This variable controls the case folding applied to URL variable
-# names.
-#
-# Allowed values: none, lower, upper
-# Default: lower
-#
-
-url.case.folding=lower
-
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.componentConfiguration = WEB-INF/conf/componentConfiguration.xml
-
-#
-# Name and location to the configuration file for the component roles.
-#
-services.AvalonComponentService.componentRoles = WEB-INF/conf/roleConfiguration.xml
-
-#
-# If you want to run Torque from the Avalon Component Service, you must load it
-# at startup time
-services.AvalonComponentService.lookup = org.apache.torque.avalon.Torque
-
-#
-# Other services you want to startup early
-#
-services.AvalonComponentService.lookup = org.apache.fulcrum.cache.GlobalCacheService
-
-# -------------------------------------------------------------------
-#
-#  S E S S I O N   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.SessionService.earlyInit=true
-
-
diff --git a/conf/build.xml b/conf/build.xml
deleted file mode 100644
index c13880d..0000000
--- a/conf/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- Build configuration file for Turbine -->
-
-<project name="tr-props-maker" default="tr-props" basedir=".">
-
-  <!-- Give user a chance to override without editing this file
-      (and without typing -D each time it compiles it -->
-  <property file="${user.home}/build.properties" />
-  <property file="build.properties" />
-
-  <property name="master.home" value="./master"/>
-  <property name="conf.home" value="."/>
-  <property name="target.dir" value="."/>
-
-  <property file="${conf.home}/master/meta.properties"/>
-  <property file="${conf.home}/view/${view.type}"/>
-
-  <property name="master" value="${master.home}/TurbineResources.master"/>
-  <property name="copy" value="${target.dir}/TurbineResources.properties"/>
-
-  <property name="fulcrum.master" value="${master.home}/Fulcrum.master"/>
-  <property name="fulcrum.copy" value="${target.dir}/Fulcrum.properties"/>
-
-  <!-- =================================================================== -->
-  <!-- T R   P R O P S                                                     -->
-  <!-- =================================================================== -->
-  <!-- Target used to generate TR.props.                                   -->
-  <!-- =================================================================== -->
-
-  <target name="tr-props" depends="configure"
-          description="==> generate the properties files">
-
-    <echo message="Creating TurbineResources ..."/>
-    <delete file="${copy}"/>
-    <delete file="${fulcrum.copy}"/>
-
-    <copy file="${master}" tofile="${copy}" filtering="on"/>
-    <copy file="${fulcrum.master}" tofile="${fulcrum.copy}" filtering="on"/>
-
-  </target>
-
-  <!-- =================================================================== -->
-  <!-- C O N F I G U R E  S T A N D A R D  P R O P E R T I E S             -->
-  <!-- =================================================================== -->
-  <!-- Target used to set the standard values of properties in             -->
-  <!-- TR.props file.                                                      -->
-  <!-- =================================================================== -->
-
-  <target name="configure">
-
-    <filter token="TURBINE_LOG" value="${turbine.log}"/>
-
-    <filter token="MAIL_SERVER" value="${mail.server}"/>
-    <filter token="MAIL_SMTP_FROM" value="${mail.smtp.from}"/>
-
-    <filter token="MODULE_CACHE" value="${module.cache}"/>
-    <filter token="MODULE_PACKAGES" value="${module.packages}"/>
-
-    <filter token="TEMPLATE_HOMEPAGE" value="${template.hompage}"/>
-    <filter token="TEMPLATE_LOGIN" value="${template.login}"/>
-
-    <filter token="SCREEN_HOMEPAGE" value="${screen.homepage}"/>
-    <filter token="SCREEN_LOGIN" value="${screen.login}"/>
-    <filter token="SCREEN_ERROR" value="${screen.error}"/>
-    <filter token="SCREEN_INVALID_STATE" value="${screen.invalidstate}"/>
-
-    <filter token="ACTION_LOGIN" value="${action.login}"/>
-    <filter token="ACTION_LOGOUT" value="${action.logout}"/>
-    <filter token="ACTION_SESSION_VALIDATOR" value="${action.sessionvalidator}"/>
-    <filter token="ACTION_ACCESS_CONTROLLER" value="${action.accesscontroller}"/>
-
-    <filter token="LAYOUT_DEFAULT" value="${layout.default}"/>
-    <filter token="PAGE_DEFAULT" value="${page.default}"/>
-
-    <filter token="TEMPLATE_SERVICE" value="${template.service}"/>
-    <filter token="TEMPLATE_SERVICE_NAME" value="${template.service.name}"/>
-
-    <filter token="TEMPLATE_ERROR" value="${template.error}"/>
-    <filter token="TEMPLATE_EXTENSION" value="${template.default.extension}"/>
-    <filter token="TEMPLATE_PATH" value="${template.path}"/>
-    <filter token="TEMPLATE_DEFAULT_NAVIGATION" value="${template.default.navigation}"/>
-    <filter token="TEMPLATE_DEFAULT_SCREEN" value="${template.default.screen}"/>
-    <filter token="TEMPLATE_DEFAULT_LAYOUT" value="${template.default.layout}"/>
-
-    <filter token="LOCALE_DEFAULT_BUNDLE" value="${locale.default.bundle}"/>
-    <filter token="LOCALE_DEFAULT_LANGUAGE" value="${locale.default.language}"/>
-    <filter token="LOCALE_DEFAULT_COUNTRY" value="${locale.default.country}"/>
-
-    <filter token="INCLUDE_FILE" value="${include.file}"/>
-  </target>
-</project>
diff --git a/conf/componentConfiguration.xml b/conf/componentConfiguration.xml
deleted file mode 100644
index 924b552..0000000
--- a/conf/componentConfiguration.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Component Configuration for Avalon Components                           -->
-<!--                                                                          -->
-<!-- $Id$ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<componentConfig>
-    <!-- Torque Component -->
-    <torque>
-       <configfile>/WEB-INF/conf/Torque.properties</configfile>
-    </torque>
-    <cache cacheInitialSize="20" cacheCheckFrequency="5"/>   
-	<mimetype/>
-    <crypto>
-      <algorithm>
-      	<unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>   
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>                         
-      </algorithm>
-    </crypto>	
-    <localization>
-      <bundles>
-        <bundle>org.apache.fulcrum.localization.BarBundle</bundle>
-        <bundle>org.apache.fulcrum.localization.FooBundle</bundle>
-        <bundle>org.apache.fulcrum.localization.MissingBundle</bundle>        
-      </bundles>
-    </localization>
-	<intake>
-      <serialDataPath>target/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>conf/test/intake.xml</xmlPath>
-      </xmlPaths>
-    </intake>    
-    <factory/>    
-</componentConfig>
diff --git a/conf/openldap/slapd.conf b/conf/openldap/slapd.conf
deleted file mode 100644
index c0ed587..0000000
--- a/conf/openldap/slapd.conf
+++ /dev/null
@@ -1,70 +0,0 @@
-# $OpenLDAP: pkg/ldap/servers/slapd/slapd.conf,v 1.8.8.7 2001/09/27 20:00:31 kurt Exp $
-#
-# See slapd.conf(5) for details on configuration options.
-# This file should NOT be world readable.
-#
-include		/usr/local/etc/openldap/schema/core.schema
-include		/usr/local/etc/openldap/schema/turbine.schema
-
-# Define global ACLs to disable default read access.
-
-# Do not enable referrals until AFTER you have a working directory
-# service AND an understanding of referrals.
-#referral	ldap://root.openldap.org
-
-pidfile		/usr/local/var/slapd.pid
-argsfile	/usr/local/var/slapd.args
-
-# Load dynamic backend modules:
-# modulepath	/usr/local/libexec/openldap
-# moduleload	back_ldap.la
-# moduleload	back_ldbm.la
-# moduleload	back_passwd.la
-# moduleload	back_shell.la
-
-#
-# Sample Access Control
-#	Allow read access of root DSE
-#	Allow self write access
-#	Allow authenticated users read access
-#	Allow anonymous users to authenticate
-#
-#access to dn="" by * read
-#access to *
-#	by self write
-#	by users read
-#	by anonymous auth
-#
-# if no access controls are present, the default is:
-#	Allow read by all
-#
-# rootdn can always write!
-
-#######################################################################
-# ldbm database definitions
-#######################################################################
-
-database	ldbm
-suffix		"dc=example,dc=com"
-rootdn		"turbineUserUniqueId=turbine,dc=example,dc=com"
-# Cleartext passwords, especially for the rootdn, should
-# be avoid.  See slappasswd(8) and slapd.conf(5) for details.
-# Use of strong authentication encouraged.
-rootpw		turbine
-# The database directory MUST exist prior to running slapd AND 
-# should only be accessible by the slapd/tools. Mode 700 recommended.
-directory	/usr/local/var/openldap-ldbm
-# Indices to maintain
-index	objectClass	eq
-
-access to attr=userPassword
-    by self write
-    by anonymous auth
-    by dn="turbineUserUniqueId=turbine,dc=example,dc=com" write
-    by * none
-
-access to *
-    by self write
-    by dn="turbineUserUniqueId=turbine,dc=example,dc=com" write
-    by users read
-
diff --git a/conf/openldap/turbine.ldif b/conf/openldap/turbine.ldif
deleted file mode 100644
index e892c22..0000000
--- a/conf/openldap/turbine.ldif
+++ /dev/null
@@ -1,70 +0,0 @@
-dn: dc=example,dc=com
-objectclass: dcObject
-objectclass: organization
-o: Example Company
-dc: example
-
-dn: turbineUserUniqueId=turbine,dc=example,dc=com
-objectclass: turbineUser
-turbineUserUniqueId: turbine
-turbineUserFirstName: Turbine
-userPassword: turbine
-
-dn: turbineUserUniqueId=hhernandez,dc=example,dc=com
-objectclass: turbineUser
-turbineUserUniqueId: hhernandez
-turbineUserFirstName: Humberto
-turbineUserLastName: Hernandez
-turbineUserMailAddress: hhernandez@itweb.com.mx
-userPassword: secreto
-
-dn: turbinePermissionName=admin,dc=example,dc=com
-objectclass: turbinePermission
-turbinePermissionName: admin
-
-dn: turbinePermissionName=edit,dc=example,dc=com
-objectclass: turbinePermission
-turbinePermissionName: edit
-
-dn: turbinePermissionName=view,dc=example,dc=com
-objectclass: turbinePermission
-turbinePermissionName: view
-
-dn: turbineRoleName=root,dc=example,dc=com
-objectclass: turbineRole
-turbineRoleName: root
-turbinePermissionName: admin
-turbinePermissionName: view
-
-dn: turbineRoleName=editor,dc=example,dc=com
-objectclass: turbineRole
-turbineRoleName: editor
-turbinePermissionName: edit
-turbinePermissionName: view
-
-dn: turbineGroupName=global,dc=example,dc=com
-objectclass: turbineGroup
-turbineGroupName: global
-
-dn: turbineGroupName=yellow,dc=example,dc=com
-objectclass: turbineGroup
-turbineGroupName: yellow
-
-dn: turbineGroupName=global,turbineUserUniqueId=turbine,dc=example,dc=com
-objectclass: turbineUserGroup
-turbineUserUniqueId: turbine
-turbineGroupName: global
-turbineRoleName: root
-turbineRoleName: editor
-
-dn: turbineGroupName=global,turbineUserUniqueId=hhernandez,dc=example,dc=com
-objectclass: turbineUserGroup
-turbineUserUniqueId: hhernandez
-turbineGroupName: global
-turbineRoleName: editor
-
-dn: turbineGroupName=yellow,turbineUserUniqueId=hhernandez,dc=example,dc=com
-objectclass: turbineUserGroup
-turbineUserUniqueId: hhernandez
-turbineGroupName: yellow
-turbineRoleName: root
diff --git a/conf/openldap/turbine.schema b/conf/openldap/turbine.schema
deleted file mode 100644
index a84de8c..0000000
--- a/conf/openldap/turbine.schema
+++ /dev/null
@@ -1,120 +0,0 @@
-
-attributetype ( 15530.1.2
-  NAME 'turbineObjectData'
-  DESC ''
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40)
-
-attributetype ( 15530.1.3
-  NAME 'turbinePermissionName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
-attributetype ( 15530.1.5
-  NAME 'turbineUserCreationDate'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE)
-
-attributetype ( 15530.1.6
-  NAME 'turbineUserFirstName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
-attributetype ( 15530.1.7
-  NAME 'turbineUserLastLogon'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE)
-
-attributetype ( 15530.1.8
-  NAME 'turbineUserLastModifiedTime'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE)
-
-attributetype ( 15530.1.9
-  NAME 'turbineUserLastName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
-attributetype ( 15530.1.10
-  NAME 'turbineUserMailAddress'
-  DESC ''
-  EQUALITY caseIgnoreIA5Match
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26)
-
-attributetype ( 15530.1.11
-  NAME 'turbineUserPassword'
-  DESC ''
-  EQUALITY caseExactMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-  SINGLE-VALUE)
-
-attributetype ( 15530.1.12
-  NAME 'turbineUserUniqueId'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-  SINGLE-VALUE)
-
-attributetype ( 15530.1.13
-  NAME 'turbineGroupName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
-attributetype ( 15530.1.14
-  NAME 'turbineRoleName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
-
-objectclass ( 15530.2.1
-  NAME 'turbineUser'
-  DESC 'Turbine user'
-  SUP top
-  AUXILIARY
-  MUST ( turbineUserUniqueId )
-  MAY ( turbineObjectData $ turbineUserCreationDate $ turbineUserFirstName $
-    turbineUserLastLogon $ turbineUserLastModifiedTime $ turbineUserLastName $
-    turbineUserMailAddress $ userPassword ))
-
-objectclass ( 15530.2.2
-  NAME 'turbineUserGroup'
-  DESC 'Turbine User Group '
-  SUP top
-  AUXILIARY
-  MUST (  turbineUserUniqueId $ turbineGroupName )
-  MAY (  turbineRoleName $ turbineObjectData ))
-
-objectclass ( 15530.2.3
-  NAME 'turbineGroup'
-  DESC 'Turbine Group'
-  SUP top
-  AUXILIARY
-  MUST (  turbineGroupName )
-  MAY ( turbineObjectData ))
-
-objectclass ( 15530.2.4
-  NAME 'turbineRole'
-  DESC 'Turbine role'
-  SUP top
-  AUXILIARY
-  MUST (  turbineRoleName )
-  MAY ( turbineObjectData $ turbinePermissionName ))
-
-objectclass ( 15530.2.5
-  NAME 'turbinePermission'
-  DESC 'Turbine Permission'
-  SUP top
-  AUXILIARY
-  MUST (  turbinePermissionName )
-  MAY ( turbineObjectData ))
-
-
diff --git a/conf/roleConfiguration.xml b/conf/roleConfiguration.xml
deleted file mode 100644
index d541f66..0000000
--- a/conf/roleConfiguration.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  Role Configuration for Avalon Components                                -->
-<!--                                                                          -->
-<!-- $Id$ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<role-list>
-    <!-- Torque Component Role Configuration -->
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />
-          
-  <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.DefaultGlobalCacheService"/>
-        
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>        
-        
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>        
-        
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>         
-
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>  
-        
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/>             
-</role-list>
-
diff --git a/conf/test/CompleteTurbineResources.properties b/conf/test/CompleteTurbineResources.properties
deleted file mode 100644
index 17b4f4a..0000000
--- a/conf/test/CompleteTurbineResources.properties
+++ /dev/null
@@ -1,1186 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is a configuration property for running unit tests that expect a
-# default setup of TR.properties.  Many different unit tests can share
-# this same properties file.  If you are testing unusual TR.prop values
-# then create another .properties file!
-#
-# Notes: 
-# Currently the Scheduler and Security services are disabled due
-# to frequent compile problems with the Torque objects.
-#
-# The templates are all loaded from src/templates/test.
-#
-# The module.packages also includes org.apache.turbine.services.template.modules
-# -------------------------------------------------------------------
-
-
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /conf/test/Log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=org.apache.turbine.modules, org.apache.turbine.services.template.modules, org.apache.turbine.services.template.modules.screens.existing.dflt
-
-# -------------------------------------------------------------------
-#
-#  D A T A B A S E  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# Turbine uses the decoupled torque now!!
-# The database settings are now in Torque.properties
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behaviour of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specfied
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the default Doctype if you use the deprecated VelocityECSLayout.  The 
-# default Doctype can be set by using the single strings: Html40Strict, 
-# Html40Transitional, or Html40Frameset.  Additionally the default can be 
-# supplied as two strings separated by a comma giving the DTD and URI.
-#
-# Default: ignored if not set to some value.
-
-#default.doctype=Html40Transitional
-
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-#
-# Set this value to true if you want to be able to submit multiple 
-# events to an Action by doing eventSubmit_do<action> and consider
-# only events that have a non-empty, non-zero value. This is useful
-# if you submit your form with JavaScript
-# 
-action.eventsubmit.needsvalue = false
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  P E E R S
-#
-# -------------------------------------------------------------------
-# Supplies Turbine with information about the database schema, which
-# can simplify any required Peer classes.
-#
-# Default: org.apache.turbine.util.db.map.TurbineMapBuilder
-# -------------------------------------------------------------------
-
-database.maps.builder=org.apache.turbine.util.db.map.TurbineMapBuilder
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-#services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
-services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-#services.SchedulerService.classname=org.apache.turbine.services.schedule.TurbineSchedulerService
-services.XmlRpcService.classname=org.apache.turbine.services.xmlrpc.TurbineXmlRpcService
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-# Default
-#services.SecurityService.classname=org.apache.turbine.services.security.db.DBSecurityService
-services.SecurityService.classname=org.apache.turbine.test.MockSecurityService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-#services.IntakeService.classname=org.apache.turbine.services.intake.TurbineIntakeService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.XSLTService.classname=org.apache.turbine.services.xslt.TurbineXSLTService
-#services.SessionService.classname=org.apache.turbine.services.session.TurbineSessionService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cache.check.frequency = 5000
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-#services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-#
-# These are the mapper classes responsible for the lookup of Page, Screen, Layout and Navigation classes according
-# to the supplied template Name. They also map template names on the Layout and Screen file names to be used.
-# 
-#services.TemplateService.mapper.page.class            = org.apache.turbine.services.template.mapper.DirectTemplateMapper
-#services.TemplateService.mapper.screen.class          = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.layout.class          = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.navigation.class      = org.apache.turbine.services.template.mapper.ClassMapper
-#services.TemplateService.mapper.layout.template.class = org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-#services.TemplateService.mapper.screen.template.class = org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.UIManager
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   authorized: tool is instantiated once for each user session once the
-#               user logs in. After this, it is a normal session tool.
-#
-#   persistent: tool is instantitated once for each user session once
-#               the user logs in and is is stored in the user's permanent
-#               hashtable.
-#               This means for a logged in user the tool will be persisted
-#               in the user's objectdata. Tool should be threadsafe and
-#               Serializable.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-#This pull tool is to allow for easy formatting of Date object into Strings
-tool.request.dateFormatter=org.apache.turbine.services.pull.util.DateFormatter
-
-# Use this tool if you need a place to store data that will persist between
-# requests.  Any data stored using this tool will be stored in the session.
-tool.session.sessionData=org.apache.turbine.services.pull.util.SessionData
-
-# These are intake tools.
-#tool.request.om=org.apache.turbine.om.OMTool
-#tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-# This is a tool that allows access to the scheduler service.
-#tool.request.scheduler=org.apache.turbine.services.SchedulerTool
-
-tool.global.ui=org.apache.turbine.services.pull.util.UIManager
-
-# The UI Manager will allow you to skin your Turbine
-# application using simple properties files that are
-# located in the WEBAPP/resources/ui/skins/ directory
-# hierarchy.
-
-tool.ui.skin=default
-
-#
-# The content tool can put its URIs through the Servlet container,
-# which might attach things like the jsessionid even to URIs that
-# are not servered by the container. 
-#
-# The default behaviour was not to put these through the container.
-#
-# Set this to true if you need things like jsessionid attached to all
-# links generated from the $content pull tool.
-#
-tool.content.want.encoding = false
-
-#
-# Both the link and the content tool normally return absolute URIs
-# You can change this by exchanging the tool classes but this is not
-# really recommended. Setting these properties to true allow you
-# to change the behaviour if you want only relative URIs (e.g. if you
-# run behind a reverse proxy or a load balancer).
-#
-tool.content.want.relative = false
-tool.link.want.relative = false
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-
-services.VelocityService.earlyInit = true
-services.VelocityService.template.extension = vm
-
-services.VelocityService.default.page            = VelocityPage
-services.VelocityService.default.screen          = VelocityScreen
-services.VelocityService.default.layout          = VelocityOnlyLayout
-services.VelocityService.default.navigation      = VelocityNavigation
-services.VelocityService.default.layout.template = Default.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path  = src/templates/test
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-
-# -------------------------------------------------------------------
-#
-#  L O C A L I Z A T I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default ResourceBundle and language/country codes used by the
-# TurbineLocalizationService.
-#
-locale.default.bundle=MyBundle
-locale.default.language=en
-locale.default.country=US
-
-#
-# This will set the charset= portion of the ContentType: header.
-# Leave commented out unless you want to return stuff as a different
-# charset.
-#
-# locale.default.charset=
-
-# -------------------------------------------------------------------
-#
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings.
-# The file must use the same syntax as the mime.types file of
-# the Apache Server, i.e.
-# <mimetype> <ext1> <ext2>...
-#
-#services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales
-# and the corresponding character encodings. The service itself
-# contains a hardcoded set of most common mappings.
-# The file should use the Java property file syntax, i.e.
-# <lang_country_variant>=<charset>
-#
-#services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  C R Y P T O   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Standard Unix crypt(3) password encryption.
-#
-services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
-#
-# This providers allows access to the Java Message Digest encryption algorithms
-#
-services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
-#
-# This is a simple, cleartext "encryption" provider.
-#
-services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
-#
-# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
-# compatibility for passwords created with the old Security Service. See the javadocs for
-# OldJavaCrypt
-#
-services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
-#
-# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
-# You need not to have this, it is the default if no algorithms are given. The default
-# provider gives you all the Java MessageDigest Ciphers
-#
-services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the UserManager from the
-# DBSecurityService.
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.db.DBUserManager
-# The MockUserManager is used in testing...
-services.SecurityService.user.manager = org.apache.turbine.test.MockUserManager
-
-#
-# These are the default classes used by the Security Service to
-# provide User, Group, Role and Permission objects.
-# You want to override this setting only if you want your
-# implementation to provide application specific addtional
-# functionality.
-#
-# For LDAP use:
-# services.SecurityService.user.class=org.apache.turbine.services.security.ldap.LDAPUser
-# LDAP does not yet provide custom Group, User and Role objects so you
-# must use it with the default TurbineGroup, TurbineRole and
-# TurbinePermission objects.
-#
-# Class for User. Default: org.apache.turbine.om.security.TurbineUser
-services.SecurityService.user.class=org.apache.turbine.om.security.TurbineUser
-# Class for Group. Default: org.apache.turbine.om.security.TurbineGroup
-services.SecurityService.group.class=org.apache.turbine.om.security.TurbineGroup
-# Class for Role. Default: org.apache.turbine.om.security.TurbineRole
-services.SecurityService.role.class=org.apache.turbine.om.security.TurbineRole
-# Class for Permission. Default: org.apache.turbine.om.security.TurbinePermission
-services.SecurityService.permission.class=org.apache.turbine.om.security.TurbinePermission
-
-#
-# This is the class that implements the ACL interface.
-# You want to override this setting only if you want your ACL
-# implementation to provide application specific addtional
-# functionality.
-#
-
-# Default: org.apache.turbine.util.security.TurbineAccessControlList
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This setting is DBSecurityService specific - this class is consulted for the names
-# of the columns in the users' tables for the purpose of creating join queries.
-# If you use your own User implementation in conjunction with DBSecurityService,
-# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
-# and you need to specify the name of the peer class here.
-#
-# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
-#
-services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.TurbineUserPeer
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# Configuration for the LDAP Security Service implementation
-
-#services.SecurityService.ldap.security.athentication=simple
-#services.SecurityService.ldap.port=<LDAP PORT>
-#services.SecurityService.ldap.host=<LDAP HOST>
-#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
-#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
-#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
-#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
-#services.SecurityService.ldap.dn.attribute=userPrincipalName
-#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# This property specifies the type of security authentication
-#
-# Default: simple
-#
-
-# services.SecurityService.ldap.security.authentication=simple
-
-#
-# The host name where the LDAP server is listenting.
-#
-# Default: localhost
-#
-
-# services.SecurityService.ldap.host=localhost
-
-#
-# The port number where the LDAP server is listenting.
-#
-# Default: 389
-#
-
-# services.SecurityService.ldap.port=389
-
-#
-# The user name of the admin user. The admin user should be able to
-# read from the LDAP repository.
-# Characteres '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.username=turbineUserUniqueId/turbine%dc/example%dc/com
-
-#
-# The password of the admin user.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.password=turbine
-
-#
-# The class name of the ldap provider.
-#
-# Default: com.sun.jndi.ldap.LdapCtxFactory
-#
-
-# services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# The directory base to search.
-# '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.basesearch=dc/example%dc/com
-
-#
-# The unique id. It must be an integer field and it is required only when
-# the users are in LDAP but the groups, roles and permissions are in the
-# Database.
-#
-# services.SecurityService.ldap.user.userid=
-
-#
-# This property maps the username with an attribute in LDAP.
-#
-# Default: turbineUserUniqueId
-#
-
-# services.SecurityService.ldap.user.username=turbineUserUniqueId
-
-#
-# This property maps the firstname with an attribute in LDAP.
-#
-# Default: turbineUserFirstName
-#
-
-# services.SecurityService.ldap.user.firstname=turbineUserFirstName
-
-#
-# This property maps the lastname with an attribute in LDAP.
-#
-# Default: turbineUserLastName
-#
-
-# services.SecurityService.ldap.user.lastname=turbineUserLastName
-
-#
-# This property maps the email with an attribute in LDAP.
-#
-# Default: turbineUserMailAddress
-#
-
-# services.SecurityService.ldap.user.email=turbineUserMailAddress
-
-#
-# This property maps the userPassword with an attribute in LDAP.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.user.password=userPassword
-
-
-# -------------------------------------------------------------------
-#
-#  X M L R P C  S E R V I C E
-#
-# -------------------------------------------------------------------
-# This property specifies which class should be used to parse
-# xml for XmlRpc functionality.
-#
-# Default: org.apache.xerces.parsers.SAXParser
-
-services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser
-
-# This property specifies which network interface the server part of
-# XmlRpc should bind to (if it is active).  If not specified, the
-# server will bind to all addresses configured for your host.
-#
-# Default: 127.0.0.1
-
-#services.XmlRpcService.address=127.0.0.1
-
-# This property specifies which TCP port the web server part of
-# XmlRpc should listen on (if it is active).
-#
-# Default: 12345
-
-services.XmlRpcService.port=12345
-
-# If any classes are specified here, the Service will create an
-# instance of them here and start up a listener on the specified
-# port.
-#
-# Note that the handlers demonstrated are not very useful.  You
-# will have to invent your own services.  They do however
-# illustrate that any class with a default constructor can be
-# added here
-#
-# The handler parameter without further extension determines
-# the default handler for the service
-#
-# Default: no classes are specified by default
-
-#services.XmlRpcService.handler.$default=java.util.Hashtable
-#services.XmlRpcService.handler.stringhandler=java.lang.String
-
-# The following properties allow the transfer of data between
-# separate Turbine applications running on different servers.
-# This allows B2B type behavior such as sending database
-# updates in the form of XML or whatever type of data
-# that needs to be shared between Turbine applications
-# running on separate servers.
-
-services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.FileHandler
-services.XmlRpcService.paranoid = false
-services.XmlRpcService.acceptClient = 192.168.1.*
-services.XmlRpcService.denyClient =
-
-# Do we want a secure server
-
-services.XmlRpcService.secure.server = false
-
-# Secure server options
-
-services.XmlRpcService.secure.server.option.java.protocol.handler.pkgs = \
-    com.sun.net.ssl.internal.www.protocol
-
-services.XmlRpcService.secure.server.option.security.provider = \
-    com.sun.net.ssl.internal.ssl.Provider
-
-services.XmlRpcService.secure.server.option.security.protocol = TLS
-
-# You probably want to keep your key stores and trust stores
-# clear out of your webapp.
-
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStore = /tmp/keystore
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStorePassword = password
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStore = /tmp/truststore
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStorePassword = password
-
-services.XmlRpcService.secure.server.option.sun.ssl.keymanager.type = SunX509
-services.XmlRpcService.secure.server.option.sun.ssl.trust.manager.type = SunX509
-
-# These values should be set to 'all' for debugging purposes.
-
-services.XmlRpcService.secure.server.option.javax.net.debug = none
-services.XmlRpcService.secure.server.option.java.security.debug = none
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-#services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-#--------------------------------------------------------------------
-#
-# X S L T  S E R V I C E
-#
-#--------------------------------------------------------------------
-
-services.XSLTService.path = /path/to/stylesheets
-services.XSLTService.cache = false
-
-# -------------------------------------------------------------------
-#
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of the xml file specifying valid inputs
-#
-# If you need to define multiple definition files, you can should
-# seperate them with commas.
-#
-# Default: WEB-INF/conf/intake.xml
-#
-services.IntakeService.xml.path=WEB-INF/conf/intake.xml
-
-# This file is used to cache the XML definitions after they are
-# parsed.  It provides for a small performance gain on startup.
-#
-# Note: Even if you have multiple XML definition files, you will
-# only need one serialization file!
-#
-# Default: WEB-INF/appData.ser
-#
-services.IntakeService.serialize.path=WEB-INF/appData.ser
-
-#--------------------------------------------------------------------
-#
-# P A R A M E T E R  P A R S E R
-#
-#--------------------------------------------------------------------
-#
-# This variable controls the case folding applied to URL variable
-# names.
-#
-# Allowed values: none, lower, upper
-# Default: lower
-#
-
-url.case.folding=lower
-
-# -------------------------------------------------------------------
-#
-#  C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-# THE COMPOINENTSERVICE IS DEPRECATED!!!!
-# You should use the AvalonComponentService instead!
-# -------------------------------------------------------------------
-
-#
-# Here you define the names of the various components to load. These
-# names are used as identifiers later so you can choose them freely. It
-# is, however, sensible to use the same names as the component projects
-# that you want to load.
-#
-services.ComponentService.name = torque
-
-#
-# This is the class of the component to be loaded.
-#
-# It must implement the org.apache.stratum.lifecycle.Initializable and
-# org.apache.stratum.lifecycle.Configurable interface to be loaded.
-#
-# It may implement the org.apache.stratum.lifecycle.Disposable interface.
-# If it does, the Component is disposed at shutdown (Servlet destroy()) time.
-#
-services.ComponentService.torque.classname = org.apache.torque.Torque
-
-#
-# This is the path to the Config file of the Component. It is relative
-# to the Root of the Application (either the Webroot given by the Servlet
-# Container or the Root given to TurbineConfig at startup time)
-#
-services.ComponentService.torque.config = /WEB-INF/conf/Torque.properties
-
-#
-# Properties can be given directly to Components. This sets the "foo"
-# property for torque to "bar".
-#
-#services.ComponentService.torque.property.foo = bar
-
-#
-# This is an example of how to load Fulcrum as a component
-#
-#services.ComponentService.name = fulcrum
-#services.ComponentService.fulcrum.classname = org.apache.fulcrum.Fulcrum
-#services.ComponentService.fulcrum.config = /WEB-INF/conf/Fulcrum.properties
-
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the Avalon lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Name and location to the configuration file for the components.
-#
-services.AvalonComponentService.componentConfiguration = WEB-INF/conf/componentConfiguration.xml
-
-#
-# Name and location to the configuration file for the component roles.
-#
-services.AvalonComponentService.componentRoles = WEB-INF/conf/roleConfiguration.xml
-
-#
-# If you want to run Torque from the Avalon Component Service, you must load it
-# at startup time
-services.AvalonComponentService.lookup = org.apache.torque.avalon.Torque
-
-
-# -------------------------------------------------------------------
-#
-#  S E S S I O N   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.SessionService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
-
-
diff --git a/conf/test/Log4j.properties b/conf/test/Log4j.properties
deleted file mode 100644
index 0452b7a..0000000
--- a/conf/test/Log4j.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-# ------------------------------------------------------------------------
-#
-# Logging Configuration for the Template Service tests.
-#
-# $Id$
-#
-# ------------------------------------------------------------------------
-
-log4j.rootLogger = FATAL, log
-
-# we want to see any errors thrown by Turbine.java, primarily in the handleException method
-log4j.category.org.apache.turbine.Turbine=ERROR
-
-log4j.appender.log = org.apache.log4j.ConsoleAppender
-log4j.appender.log.target = System.out
-log4j.appender.log.layout = org.apache.log4j.PatternLayout
-log4j.appender.log.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-
-
diff --git a/conf/test/MerlinComponentServiceTest.properties b/conf/test/MerlinComponentServiceTest.properties
deleted file mode 100644
index c9e5b0e..0000000
--- a/conf/test/MerlinComponentServiceTest.properties
+++ /dev/null
@@ -1,23 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for the Torque Load tests of the
-# Turbine 2 project. Do not remove!
-#
-# -------------------------------------------------------------------
-
-log4j.file = /conf/test/Log4j.properties
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.MerlinComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineMerlinComponentService
-
-services.MerlinComponentService.earlyInit=true
-services.MerlinComponentService.block.path=conf/test/merlin
-services.MerlinComponentService.kernel=conf/test/merlin/kernel.xml
-
diff --git a/conf/test/TemplateService.properties b/conf/test/TemplateService.properties
deleted file mode 100644
index 83138da..0000000
--- a/conf/test/TemplateService.properties
+++ /dev/null
@@ -1,68 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for the Template Service tests of the
-# Turbine 2 project. Do not remove!
-#
-# -------------------------------------------------------------------
-
-log4j.file = /conf/test/Log4j.properties
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-module.cache=false
-
-action.cache.size       = 20
-layout.cache.size       = 10
-navigation.cache.size   = 10
-page.cache.size         = 5
-screen.cache.size       = 50
-scheduledjob.cache.size = 10
-
-module.packages=org.apache.turbine.modules, org.apache.turbine.services.template.modules
-
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-services.AssemblerBrokerService.screen       = org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action       = org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout       = org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page         = org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation   = org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob = org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-services.PullService.earlyInit= true
-
-services.VelocityService.earlyInit = true
-services.VelocityService.template.extension = vm
-
-services.VelocityService.default.page            = VelocityPage
-services.VelocityService.default.screen          = VelocityScreen
-services.VelocityService.default.layout          = VelocityOnlyLayout
-services.VelocityService.default.navigation      = VelocityNavigation
-services.VelocityService.default.layout.template = Default.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path  = src/templates/test
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.test1.resource.loader.path  = relative/path
-services.VelocityService.test2.resource.loader.path  = /absolute/path
-services.VelocityService.test3.resource.loader.path  = jar:file://jar-file.jar!/
-services.VelocityService.test4.resource.loader.path  = jar:file://jar-file.jar!/with/some/extensions
-services.VelocityService.test5.resource.loader.path  = jar:file://jar-file.jar
-services.VelocityService.test6.resource.loader.path  = jar:http://jar.on.website/
-services.VelocityService.test7.resource.loader.path  = file://file/system/reference/
-services.VelocityService.test8.resource.loader.path  = http://reference.on.website/
diff --git a/conf/test/TestFulcrumComponents.properties b/conf/test/TestFulcrumComponents.properties
deleted file mode 100644
index 978fb38..0000000
--- a/conf/test/TestFulcrumComponents.properties
+++ /dev/null
@@ -1,122 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /conf/test/Log4j.properties
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Note: org.apache.turbine.modules will always be added to the search
-# path.  If it is not explictly added here, it will be added to the
-# end.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=@MODULE_PACKAGES@
-
-
-services.MerlinComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineMerlinComponentService
-services.AvalonComponentService.classname=org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-
-
-
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-#services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-services.PullService.earlyInit= true
-
-services.PullService.tools.per.request.refresh=true
-
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-
-
-services.AvalonComponentService.componentConfiguration = conf/test/fulcrumComponentConfiguration.xml
-services.AvalonComponentService.componentRoles = conf/test/fulcrumRoleConfiguration.xml
-services.AvalonComponentService.earlyInit=true
-services.AvalonComponentService.lookup = org.apache.fulcrum.cache.GlobalCacheService
-
-
-services.MerlinComponentService.earlyInit=true
-services.MerlinComponentService.block.path=conf/test/merlin
-services.MerlinComponentService.kernel=conf/test/merlin/kernel.xml
diff --git a/conf/test/TorqueTest.properties b/conf/test/TorqueTest.properties
deleted file mode 100644
index 51f9906..0000000
--- a/conf/test/TorqueTest.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-# ------------------------------------------------------------------------
-#
-# Torque Configuration for Torque Load test cases
-#
-# $Id$
-#
-# ------------------------------------------------------------------------
-
-torque.applicationRoot = .
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-torque.defaults.pool.defaultMaxActive=30
-torque.defaults.pool.testOnBorrow=true
-torque.defaults.pool.validationQuery=SELECT 1
-
-torque.idbroker.cleverquantity=true
-torque.idbroker.prefetch=true
-torque.idbroker.usenewconnection=true
-
diff --git a/conf/test/TurbineComponentService.properties b/conf/test/TurbineComponentService.properties
deleted file mode 100644
index 2ae18ce..0000000
--- a/conf/test/TurbineComponentService.properties
+++ /dev/null
@@ -1,22 +0,0 @@
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for the Torque Load tests of the
-# Turbine 2 project. Do not remove!
-#
-# -------------------------------------------------------------------
-
-log4j.file = /conf/test/Log4j.properties
-pipeline.default.descriptor = conf/turbine-classic-pipeline.xml
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-
-services.ComponentService.name= torque
-services.ComponentService.torque.classname= org.apache.torque.Torque
-services.ComponentService.torque.config= conf/test/TorqueTest.properties
diff --git a/conf/test/TurbineConfiguration.xml b/conf/test/TurbineConfiguration.xml
deleted file mode 100644
index 29551b7..0000000
--- a/conf/test/TurbineConfiguration.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<configuration>
-  <xml fileName="conf/test/TurbineResources.xml"/>
-  <properties className="org.apache.commons.configuration.PropertiesConfiguration" fileName="conf/test/TemplateService.properties"/>
-</configuration>
-
-  
-  
-
-
-
diff --git a/conf/test/TurbineResources.xml b/conf/test/TurbineResources.xml
deleted file mode 100644
index 7accabc..0000000
--- a/conf/test/TurbineResources.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-
-<XmlConfiguration>
-  <module>
-    <cache>true</cache>
-  </module>
-</XmlConfiguration>
diff --git a/conf/test/fulcrumComponentConfiguration.xml b/conf/test/fulcrumComponentConfiguration.xml
deleted file mode 100644
index f128b1a..0000000
--- a/conf/test/fulcrumComponentConfiguration.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<!-- 
-	This configuration file for Avalon components is used for testing the Fulcrum components
-	with Turbine.
--->
-
-<componentConfig>
-	<cache cacheInitialSize="20" cacheCheckFrequency="5"/>   
-	<mimetype/>
-    <crypto>
-      <algorithm>
-      	<unix>org.apache.fulcrum.crypto.provider.UnixCrypt</unix>
-        <clear>org.apache.fulcrum.crypto.provider.ClearCrypt</clear>
-        <java>org.apache.fulcrum.crypto.provider.JavaCrypt</java>   
-        <oldjava>org.apache.fulcrum.crypto.provider.OldJavaCrypt</oldjava>                         
-      </algorithm>
-    </crypto>	
-    <localization>
-      <bundles>
-        <bundle>org.apache.turbine.services.localization.BarBundle</bundle>        
-      </bundles>
-    </localization>
-	<intake>
-      <serialDataPath>target/appData.ser</serialDataPath>
-      <xmlPaths>
-        <xmlPath>conf/test/intake.xml</xmlPath>
-      </xmlPaths>
-    </intake>    
-    <factory/>
-    <torque>
-       <configfile>conf/test/TorqueTest.properties</configfile>
-    </torque>    
-</componentConfig>
diff --git a/conf/test/fulcrumRoleConfiguration.xml b/conf/test/fulcrumRoleConfiguration.xml
deleted file mode 100644
index eb0305b..0000000
--- a/conf/test/fulcrumRoleConfiguration.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<!-- 
-	This configuration file for Avalon components is used for testing the Fulcrum Components with
-	Turbine.
--->
-
-<role-list>
-    <role
-        name="org.apache.fulcrum.cache.GlobalCacheService"
-        shorthand="cache"
-        default-class="org.apache.fulcrum.cache.DefaultGlobalCacheService"/>
-        
-    <role
-        name="org.apache.fulcrum.mimetype.MimeTypeService"
-        shorthand="mimetype"
-        default-class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>        
-        
-    <role
-        name="org.apache.fulcrum.crypto.CryptoService"
-        shorthand="crypto"
-        default-class="org.apache.fulcrum.crypto.DefaultCryptoService"/>        
-        
-    <role
-        name="org.apache.fulcrum.localization.LocalizationService"
-        shorthand="localization"
-        default-class="org.apache.fulcrum.localization.DefaultLocalizationService"/>         
-
-    <role
-        name="org.apache.fulcrum.intake.IntakeService"
-        shorthand="intake"
-        default-class="org.apache.fulcrum.intake.IntakeServiceImpl"/>  
-        
-    <role
-        name="org.apache.fulcrum.factory.FactoryService"
-        shorthand="factory"
-        default-class="org.apache.fulcrum.factory.DefaultFactoryService"/> 
-        
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />                            
-</role-list>
-
diff --git a/conf/test/intake.xml b/conf/test/intake.xml
deleted file mode 100644
index 32ef03c..0000000
--- a/conf/test/intake.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE input-data SYSTEM
-           "http://jakarta.apache.org/turbine/dtd/intake_2_3.dtd">
-<input-data basePackage="org.apache.turbine.services.intake.">
-<group name="LoginGroup" key="loginGroupKey" mapToObject="LoginForm">
-<field name="Username" key="loginUsernameKey" type="String"
-        mapToProperty="Username">
-  
-</field>
-</group>
-
-
-</input-data>
-
diff --git a/conf/test/merlin/BLOCK-INF/block.xml b/conf/test/merlin/BLOCK-INF/block.xml
deleted file mode 100644
index f6fb415..0000000
--- a/conf/test/merlin/BLOCK-INF/block.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-
-<container name="fulcrum">
-   <classloader>
-     <classpath>
-       <repository>
-         <resource id="fulcrum:fulcrum-mimetype-api" version="1.0.4"/>
-         <resource id="fulcrum:fulcrum-mimetype-impl" version="1.0.4"/>
-         <resource id="fulcrum:fulcrum-localization-api" version="1.0.4"/>
-         <resource id="fulcrum:fulcrum-localization-impl" version="1.0.4"/>
-         
-         <resource id="fulcrum:fulcrum-factory-api" version="1.0.2"/>
-         <resource id="fulcrum:fulcrum-factory-impl" version="1.0.2"/>
-         <resource id="fulcrum:fulcrum-crypto-api" version="1.0.4"/>
-         <resource id="fulcrum:fulcrum-crypto-impl" version="1.0.4"/>         
-         <resource id="fulcrum:fulcrum-intake" version="1.0.3"/>
-       </repository>
-     </classpath>
-   </classloader>
-   <component name="mimetype" class="org.apache.fulcrum.mimetype.DefaultMimeTypeService"/>   
-   <component name="localization" 
-     class="org.apache.fulcrum.localization.DefaultLocalizationService">
-     <configuration>
-       <bundles>
-         <bundle>org.apache.turbine.services.localization.BarBundle</bundle>
-       </bundles>
-     </configuration>
-   </component>
-   <component name="factory" class="org.apache.fulcrum.factory.DefaultFactoryService"/>  
-	
-   <component name="intake" 
-       class="org.apache.fulcrum.intake.IntakeServiceImpl"
-       activation="lazy">
-     <configuration>
-       <serialDataPath>../../target/appData.ser</serialDataPath>
-       <xmlPaths>
-      	<xmlPath>../../conf/test/intake.xml</xmlPath>
-       </xmlPaths>
-     </configuration>
-   </component>   
-   
-   <component name="crypto" class="org.apache.fulcrum.crypto.DefaultCryptoService"/>
-</container>
-
diff --git a/conf/test/merlin/config.xml b/conf/test/merlin/config.xml
deleted file mode 100644
index 3955693..0000000
--- a/conf/test/merlin/config.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-<targets>
-
-  <target path="/fulcrum/localization">
-    <categories priority="INFO"/>
-    <configuration>
-      <bundles>
-        <bundle>org.apache.turbine.services.localization.BarBundle</bundle>  
-      </bundles>
-    </configuration>
-  </target>
-
-</targets>
diff --git a/conf/test/merlin/kernel.xml b/conf/test/merlin/kernel.xml
deleted file mode 100644
index bd05b1e..0000000
--- a/conf/test/merlin/kernel.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<kernel> 
-
-   <logging priority="INFO" name="kernel">
-      <category name="/logger" priority="WARN"/>
-   </logging>
-
-   <repository>
-     <hosts>
-       <host path="http://jakarta.apache.org/turbine/repo/"/>
-       <host path="http://dpml.net/"/>
-       <host path="http://www.ibiblio.org/maven/"/>
-     </hosts>
-   </repository>
-
-</kernel>
-
diff --git a/conf/turbine-classic-pipeline.xml b/conf/turbine-classic-pipeline.xml
deleted file mode 100644
index dac8060..0000000
--- a/conf/turbine-classic-pipeline.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<org.apache.turbine.pipeline.TurbinePipeline>
-  <valves>
-    <org.apache.turbine.pipeline.DetermineActionValve/>
-    <org.apache.turbine.pipeline.DetermineTargetValve/>   
-    <org.apache.turbine.pipeline.DefaultSessionTimeoutValve/>   
-    <org.apache.turbine.pipeline.DefaultLoginValve/>
-    <org.apache.turbine.pipeline.DefaultSessionValidationValve/>
-    <org.apache.turbine.pipeline.DefaultACLCreationValve/>
-    <org.apache.turbine.pipeline.ExecutePageValve/>
-    <org.apache.turbine.pipeline.CleanUpValve/>
-    <org.apache.turbine.pipeline.DetermineRedirectRequestedValve/>    
-  </valves>
-</org.apache.turbine.pipeline.TurbinePipeline>
diff --git a/conf/view/ecs b/conf/view/ecs
deleted file mode 100644
index c3bc542..0000000
--- a/conf/view/ecs
+++ /dev/null
@@ -1,23 +0,0 @@
-template.hompage=
-template.login=
-screen.homepage=Login
-screen.login=Login
-screen.error=Error
-screen.invalidstate=error.InvalidState
-
-action.login=LoginUser
-action.logout=LogoutUser
-action.sessionvalidator=sessionvalidator.DefaultSessionValidator
-action.accesscontroller=AccessController
-
-layout.default=DefaultLayout
-page.default=DefaultPage
-        
-template.default.extension=
-template.path=
-template.default.navigation=
-template.default.screen=
-template.default.layout=
-template.error=
-
-template.service=## ECS is being used. No template service required.
diff --git a/conf/view/jsp b/conf/view/jsp
deleted file mode 100644
index 9bf07ca..0000000
--- a/conf/view/jsp
+++ /dev/null
@@ -1,23 +0,0 @@
-template.hompage=Index.jsp
-template.login=Login.jsp
-screen.homepage=
-screen.login=
-screen.error=JspErrorScreen
-screen.invalidstate=error.InvalidState
-
-action.login=LoginUser
-action.logout=LogoutUser
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-action.accesscontroller=AccessController
-
-layout.default=JspLayout
-page.default=JspPage
-        
-template.default.extension=jsp
-template.path=/templates/app
-template.default.navigation=BaseJspNavigation
-template.default.screen=BaseJspScreen
-template.default.layout=Default.jsp
-template.error=Error.jsp
-
-template.service=services.JspService.classname=org.apache.turbine.services.velocity.TurbineJspService
diff --git a/conf/view/velocity b/conf/view/velocity
deleted file mode 100644
index c16a3cf..0000000
--- a/conf/view/velocity
+++ /dev/null
@@ -1,23 +0,0 @@
-template.hompage=Index.vm
-template.login=Login.vm
-screen.homepage=
-screen.login=
-screen.error=VelocityErrorScreen
-screen.invalidstate=error.InvalidState
-
-action.login=LoginUser
-action.logout=LogoutUser
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-action.accesscontroller=AccessController
-
-layout.default=VelocityOnlyLayout
-page.default=VelocityPage
-
-template.default.extension=vm
-template.path=/templates/app
-template.default.navigation=VelocityNavigation
-template.default.screen=VelocityScreen
-template.default.layout=Default.vm
-template.error=Error.vm
-
-template.service=services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
diff --git a/conf/view/velocity-secure b/conf/view/velocity-secure
deleted file mode 100644
index 60b91bc..0000000
--- a/conf/view/velocity-secure
+++ /dev/null
@@ -1,23 +0,0 @@
-template.hompage=Index.vm
-template.login=Login.vm
-screen.homepage=
-screen.login=
-screen.error=Error
-screen.invalidstate=error.InvalidState
-
-action.login=LoginUser
-action.logout=LogoutUser
-action.sessionvalidator=sessionvalidator.TemplateSecureSessionValidator
-action.accesscontroller=AccessController
-
-layout.default=VelocityECSLayout
-page.default=VelocityPage
-        
-template.default.extension=vm
-template.path=/templates/app
-template.default.navigation=VelocityNavigation
-template.default.screen=VelocityScreen
-template.default.layout=Default.vm
-template.error=Error.vm
-
-template.service=services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
diff --git a/extensions/torque/.classpath b/extensions/torque/.classpath
deleted file mode 100644
index 57fddac..0000000
--- a/extensions/torque/.classpath
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<classpath>
-  <classpathentry kind="src" path="target\src">
-  </classpathentry>
-  <classpathentry output="target\test-classes" kind="src" path="src\test">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/junit/jars/junit-3.8.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" rootpath="JRE_SRCROOT" path="JRE_LIB" sourcepath="JRE_SRC">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/turbine/jars/turbine-2.4-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jdbc/jars/jdbc-2.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jndi/jars/jndi-1.2.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/torque/jars/torque-3.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/village/jars/village-2.0-dev-20030825.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-xo/jars/commons-xo-20040218.104422.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/mx4j/jars/mx4j-jmx-1.1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/mx4j/jars/mx4j-tools-1.1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-framework/jars/avalon-framework-api-4.1.5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-framework/jars/avalon-framework-impl-4.1.5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/merlin/jars/merlin-kernel-spi-3.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/merlin/jars/merlin-kernel-impl-3.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-activation/jars/avalon-activation-api-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-activation/jars/avalon-activation-spi-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-activation/jars/avalon-activation-impl-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-composition/jars/avalon-composition-api-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-composition/jars/avalon-composition-spi-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-composition/jars/avalon-composition-impl-1.2-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-extension/jars/avalon-extension-spi-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-extension/jars/avalon-extension-impl-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-meta/jars/avalon-meta-api-1.2.1-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-meta/jars/avalon-meta-spi-1.2.1-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-meta/jars/avalon-meta-impl-1.2.1-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-repository/jars/avalon-repository-spi-1.0b1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/avalon-repository/jars/avalon-repository-impl-1.0b1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/logkit/jars/logkit-1.2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-lifecycle/jars/excalibur-lifecycle-api-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-i18n/jars/excalibur-i18n-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-thread/jars/excalibur-thread-1.1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-event/jars/excalibur-event-1.0.3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur/jars/excalibur-util-concurrent-1.3.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-configuration/jars/excalibur-configuration-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-beanutils/jars/commons-beanutils-1.6.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-codec/jars/commons-codec-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-collections/jars/commons-collections-2.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-configuration/jars/commons-configuration-20040328.175011.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-digester/jars/commons-digester-1.5.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-email/jars/commons-email-20030310.165926.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-fileupload/jars/commons-fileupload-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-io/jars/commons-io-0.2-dev.20020717.100545.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-lang/jars/commons-lang-2.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-logging/jars/commons-logging-1.0.3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/commons-pool/jars/commons-pool-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/cryptix/jars/cryptix-3.2.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/dom4j/jars/dom4j-1.4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/ecs/jars/ecs-1.4.2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-component/jars/excalibur-component-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-instrument/jars/excalibur-instrument-1.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-logger/jars/excalibur-logger-1.0.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/excalibur-pool/jars/excalibur-pool-1.2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-cache-1.0-alpha-3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-crypto-api-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-crypto-impl-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-localization-api-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-localization-impl-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-intake-1.0-alpha-2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-factory-api-1.0-alpha-2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-factory-impl-1.0-alpha-2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-mimetype-api-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/fulcrum/jars/fulcrum-mimetype-impl-1.0-alpha-4.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jaf/jars/activation-1.0.2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/javamail/jars/javamail-1.3.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/oro/jars/oro-2.0.7.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/jython/jars/jython-2.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/log4j/jars/log4j-1.2.8.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/servletapi/jars/servletapi-2.3.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/stratum/jars/stratum-1.0-b5-dev.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/velocity/jars/velocity-1.3.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/xalan/jars/xalan-2.5.1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/xerces/jars/xercesImpl-2.4.0.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/xml-apis/jars/xml-apis-1.0.b2.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/xmlrpc/jars/xmlrpc-1.2-b1.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/mockobjects/jars/mockobjects-jdk1.4-j2ee1.3-0.09.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/mockobjects/jars/mockobjects-core-0.09.jar">
-  </classpathentry>
-  <classpathentry kind="var" path="MAVEN_REPO/merlin/tutorial/jars/hello-1.1.jar">
-  </classpathentry>
-  <classpathentry kind="output" path="target\classes">
-  </classpathentry>
-</classpath>
\ No newline at end of file
diff --git a/extensions/torque/.cvsignore b/extensions/torque/.cvsignore
deleted file mode 100644
index 1beebd4..0000000
--- a/extensions/torque/.cvsignore
+++ /dev/null
@@ -1,3 +0,0 @@
-*.ser
-target
-*.log
diff --git a/extensions/torque/.project b/extensions/torque/.project
deleted file mode 100644
index 732f5bb..0000000
--- a/extensions/torque/.project
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<projectDescription>
-  <name>turbine-torque-impl</name>
-  <comment>Torque provides autogeneration of objects and sql based on an xml schema document. This project contains the generated code required by Turbine for Torque implementations of the Schedule service and the Security Service.</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>
\ No newline at end of file
diff --git a/extensions/torque/maven.xml b/extensions/torque/maven.xml
deleted file mode 100644
index 7a009fd..0000000
--- a/extensions/torque/maven.xml
+++ /dev/null
@@ -1,161 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  maven Buildfile                                                         -->
-<!--                                                                          -->
-<!-- $Id$ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<project
-  xmlns:j="jelly:core"
-  xmlns:m="maven"
-  xmlns:u="jelly:util"
-  xmlns:maven="jelly:maven"
-  default="jar:jar">
-
-  <!-- ================================================================== -->
-  <!-- C O M P I L E   P R E - G O A L                                    -->
-  <!-- ================================================================== -->
-  <!-- Before compiling the Turbine Source Code, it is necessary to       -->
-  <!-- generate the Torque Peers. This preGoal runs the prepare-sources   -->
-  <!-- target.                                                            -->
-  <!-- ================================================================== -->
-  <preGoal name="java:compile">
-    <attainGoal name="prepare-sources"/>
-
-    <!-- Hack for Maven bug when compiling with a clean target. -->
-    <j:if test="${sourcesPresent != 'true'}">
-      <j:set var="sourcesPresent" value="true"/>
-      <path id="maven.compile.src.set" location="target/src"/>
-    </j:if>
-
-  </preGoal>
-
-  
-  <!-- ================================================================== -->
-  <!-- T O R Q U E - I N I T   P R E - G O A L                            -->
-  <!-- ================================================================== -->
-  <!-- The schema files for the Torque peers must be prepared and some    -->
-  <!-- variables added. This must be done before doing any torque work    -->
-  <!-- ================================================================== -->
-  <preGoal name="torque:init">
-    <attainGoal name="copy-om"/>
-  </preGoal>
-
-  <!-- ================================================================== -->
-  <!-- P R E P A R E   S O U R C E S                                      -->
-  <!-- ================================================================== -->
-  <!-- This target builds the torque peers needed to compile the Turbine  -->
-  <!-- distribution. If you don't want to build the whole code with       -->
-  <!-- maven but use an IDE (e.g. Eclipse), you can run this target and   -->
-  <!-- use target/src as your source directory.                           -->
-  <!-- ================================================================== -->
-  <goal name="prepare-sources" description="Copy Turbine and Torque generated sources to target/src">
-    <copy todir="target/src">
-      <fileset dir="src/java"/>
-    </copy>
-
-    <attainGoal name="generate-om"/>
-  </goal>
-
-
-  <!-- ================================================================== -->
-  <!-- T O R Q U E  G E N E R A T I O N   G O A L                         --> 
-  <!-- ================================================================== -->
-  <!-- Generates only the java classes for the peers of the scheduler and -->
-  <!-- the torque security service                                        -->
-  <!-- ================================================================== -->
-  <goal name="generate-om" description="Generate Torque peer classes in target/src"
-    prereqs="scheduler-om, torque-security-om"/>
-
-
-  <!-- ================================================== -->
-  <!-- Prepare all Sources for Torque                     -->
-  <!-- ================================================== -->
-  <goal name="copy-om" description="Copy all schema files to target/xml and replace database related variables"
-    prereqs="copy-scheduler-om, copy-torque-security-om, copy-id-table-om"/>
-
-  <!-- ================================================== -->
-  <!-- Prepare Scheduler Sources for Torque               -->
-  <!-- ================================================== -->
-  <goal name="copy-scheduler-om" description="Copy scheduler schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${scheduler.database.name}"/>
-    <filter token="EXTRA_USER_COLUMNS" value="${scheduler.extra.user.columns}"/>
-    <copy
-      file="src/schema/scheduler-schema.xml"
-      tofile="${torque.schema.dir}/scheduler-schema.xml"
-      filtering="yes"/>
-  </goal>
-
-  <!-- ================================================== -->
-  <!-- Prepare Torque Security Service Sources for Torque -->
-  <!-- ================================================== -->
-  <goal name="copy-torque-security-om" description="Copy torque security service schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${torque.security.database.name}"/>
-    <copy
-      file="src/schema/torque-security-schema.xml"
-      tofile="${torque.schema.dir}/torque-security-schema.xml"
-      filtering="yes"/>
-  </goal>
-  
-  <!-- ================================================== -->
-  <!-- Prepare ID Table (for idBroker) Sources for Torque -->
-  <!-- ================================================== -->
-  <goal name="copy-id-table-om" description="Copy id-table schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${scheduler.database.name}"/>
-    <copy
-      file="src/schema/id-table-schema.xml"
-      tofile="${torque.schema.dir}/scheduler-idtable-schema.xml"
-      filtering="yes"/>
-    <filter token="DATABASE_DEFAULT" value="${torque.security.database.name}"/>
-    <copy
-      file="src/schema/id-table-schema.xml"
-      tofile="${torque.schema.dir}/torque-security-idtable-schema.xml"
-      filtering="yes"/>
-  </goal>
-
-  <!-- ================================================== -->
-  <!-- Build Peers for the Scheduler                      -->
-  <!-- ================================================== -->
-  <goal name="scheduler-om" description="generate Torque peers for the scheduler"
-    prereqs="copy-scheduler-om">
-
-    <j:set var="torque.project" value="scheduler"/>
-    <j:set var="torque.schema.om.includes" value="scheduler-schema.xml"/>
-    <j:set var="torque.targetPackage" value="${scheduler.package}"/>
-    <attainGoal name="torque:om"/>
-
-  </goal>
-
-  <!-- ================================================== -->
-  <!-- Build Peers for Torque Security                    -->
-  <!-- ================================================== -->
-  <goal name="torque-security-om" description="generate Torque peers for the torque security service"
-    prereqs="copy-torque-security-om">
-
-    <j:set var="torque.project" value="torque-security"/>
-    <j:set var="torque.schema.om.includes" value="torque-security-schema.xml"/>
-    <j:set var="torque.targetPackage" value="${torque.security.package}"/>
-    <attainGoal name="torque:om"/>
-
-  </goal>
-</project>
diff --git a/extensions/torque/project.properties b/extensions/torque/project.properties
deleted file mode 100644
index 4171e5c..0000000
--- a/extensions/torque/project.properties
+++ /dev/null
@@ -1,72 +0,0 @@
-# -------------------------------------------------------------------
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#     http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-# P R O J E C T  P R O P E R T I E S
-#
-# $Id$
-#
-# Do not change this file. Please use build.properties in this directory
-# to do site or installation specific changes to the project build.
-# -------------------------------------------------------------------
-maven.multiproject.type=jar
-
-#========================================================================
-# You can uncomment this if you're willing to use the unofficial
-# Turbine-specific jar repository at the Turbine site. This will
-# contain all the jars needed to build Turbine, even if a jar
-# is missing on ibiblio
-#========================================================================
-maven.repo.remote=http://www.ibiblio.org/maven/,http://jakarta.apache.org/turbine/repo
-
-maven.checkstyle.format = turbine
-#maven.home = ${user.home}/maven
-
-# display the date on the site
-maven.xdoc.date = left
-# Display the version the web site is documenting
-maven.xdoc.version = ${pom.currentVersion}
-
-compile.debug = on
-compile.optimize = off
-compile.deprecation = off
-maven.compile.deprecation = off
-
-
-# -------------------------------------------------------------------
-# N I G H T L Y   B U I L D   P R O P E R T I E S
-# -------------------------------------------------------------------
-
-turbine.nightly.dist.dir = \
-    /www/jakarta.apache.org/builds/jakarta-turbine/turbine-2/nightly
-
-torque.addGetByNameMethod = true
-torque.addIntakeRetrievable = false
-torque.retrievableInterface = org.apache.turbine.om.Retrievable
-torque.addSaveMethod = true
-torque.addTimeStamp = true
-torque.basePrefix = Base
-torque.complexObjectModel = true
-torque.saveException = Exception
-torque.useClasspath = true
-torque.useManagers = false
-torque.omzip.src.base = false
-torque.omzip.src.extension = false
-torque.omzip.bin.base = false
-torque.omzip.bin.extension = false
-torque.omzip.deleteFiles = false
-torque.generateDeprecated = true
-torque.runOnlyOnSchemaChange = false
\ No newline at end of file
diff --git a/extensions/torque/project.xml b/extensions/torque/project.xml
deleted file mode 100644
index b5607c2..0000000
--- a/extensions/torque/project.xml
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<project>
-  <extend>${basedir}/../../project.xml</extend>
-  <pomVersion>3</pomVersion>
-  <name>Turbine Torque Impl</name>
-  <id>turbine-torque-impl</id>
-  <currentVersion>2.4-dev</currentVersion>
-  
-  <package>org.apache.turbine</package>
-
- 
-  <shortDescription>Torque Generated Code for Turbine</shortDescription>
-  <description>
-  	Torque provides autogeneration of objects and sql based on an xml schema document.   This
-    project contains the generated code required by Turbine for Torque implementations of the
-    Schedule service and the Security Service.
-  </description>
-  
-
-  <repository>
-    <connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-turbine-2/extensions/torque</connection>
-    <developerConnection>scm:cvs:ext:${maven.username}@cvs.apache.org:/home/cvs:jakarta-turbine-2/extensions/torque</developerConnection>
-    <url>http://cvs.apache.org/viewcvs/jakarta-turbine-2.4/extensions/torque</url>
-  </repository>
-
-
-  <dependencies>
-    <dependency>
-      <id>turbine</id>
-      <version>2.4-dev</version>
-      <url>http://jakarta.apache.org/turbine</url>
-    </dependency>
-    <dependency>
-      <id>jdbc</id>
-      <version>2.0</version>
-      <url>http://java.sun.com/products/jdbc/</url>
-    </dependency>
-    <dependency>
-      <id>jndi</id>
-      <version>1.2.1</version>
-      <url>http://java.sun.com/products/jndi/</url>
-    </dependency>
-    <dependency>
-      <id>torque</id>
-      <version>3.1</version>
-      <url>http://db.apache.org/torque/</url>
-    </dependency>
-    <dependency>
-      <id>village</id>
-      <version>2.0-dev-20030825</version>
-      <url>http://share.whichever.com/index.php?SCREEN=village</url>
-    </dependency>
-    
-    <!-- Needed to compile OM code -->
-	<dependency> 
-      <groupId>torque</groupId> 
-      <artifactId>maven-torque-plugin</artifactId> 
-      <version>3.2-20031017</version> 
-      <url>http://maven-plugins.sourceforge.net/maven-tasks-plugin/</url> 
-      <type>plugin</type>
-    </dependency>     
-  </dependencies>
-
-  <build>
-    <sourceDirectory>target/src</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.java</include>
-      </includes>
-    </unitTest>
-    <integrationUnitTestSourceDirectory/>
-    <integrationUnitTest/>
-    <aspectSourceDirectory/>
-  </build>
-
-
-</project>
diff --git a/extensions/torque/src/dtd/intake.dtd b/extensions/torque/src/dtd/intake.dtd
deleted file mode 100644
index 1b6c24e..0000000
--- a/extensions/torque/src/dtd/intake.dtd
+++ /dev/null
@@ -1,2 +0,0 @@
-For some reason the build for Torque wants this.  Something in how the

-project inheritance sorts out postGoals.
\ No newline at end of file
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorque.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorque.java
deleted file mode 100644
index 9f50e00..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorque.java
+++ /dev/null
@@ -1,403 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a wrapper for a scheduled job.  It is modeled after the
- * Unix scheduler cron.  Note: BaseJobEntry is generated by Torque
- * at compile time, and is therefore NOT in CVS.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class JobEntryTorque
-        extends BaseJobEntryTorque
-        implements JobEntry
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScheduleService.LOGGER_NAME);
-
-    /** indicates if job is currently running */
-    private boolean jobIsActive = false;
-
-    /** Next runtime. **/
-    private long runtime = 0;
-
-    /** schedule types **/
-    private static final int SECOND = 0;
-    private static final int MINUTE = 1;
-    private static final int WEEK_DAY = 2;
-    private static final int DAY_OF_MONTH = 3;
-    private static final int DAILY = 4;
-
-    /**
-     * default constructor
-     */
-    public JobEntryTorque()
-    {
-    }
-
-    /**
-     * Constuctor.
-     *
-     * Schedule a job to run on a certain point of time.<br>
-     *
-     * Example 1: Run the DefaultScheduledJob at 8:00am every 15th of
-     * the month - <br>
-     *
-     * JobEntry je = new JobEntry(0,0,8,15,"DefaultScheduledJob");<br>
-     *
-     * Example 2: Run the DefaultScheduledJob at 8:00am every day -
-     * <br>
-     *
-     * JobEntry je = new JobEntry(0,0,8,-1,"DefaultScheduledJob");<br>
-     *
-     * Example 3: Run the DefaultScheduledJob every 2 hours. - <br>
-     *
-     * JobEntry je = new JobEntry(0,120,-1,-1,"DefaultScheduledJob");<br>
-     *
-     * Example 4: Run the DefaultScheduledJob every 30 seconds. - <br>
-     *
-     * JobEntry je = new JobEntry(30,-1,-1,-1,"DefaultScheduledJob");<br>
-     *
-     * @param sec Value for entry "seconds".
-     * @param min Value for entry "minutes".
-     * @param hour Value for entry "hours".
-     * @param wd Value for entry "week days".
-     * @param day_mo Value for entry "month days".
-     * @param task Task to execute.
-     * @exception TurbineException a generic exception.
-     */
-    public JobEntryTorque(int sec,
-                    int min,
-                    int hour,
-                    int wd,
-                    int day_mo,
-                    String task)
-            throws TurbineException
-    {
-        if (StringUtils.isEmpty(task))
-        {
-            throw new TurbineException("Error in JobEntry. " +
-                    "Bad Job parameter. Task not set.");
-        }
-
-        setSecond(sec);
-        setMinute(min);
-        setHour(hour);
-        setWeekDay(wd);
-        setDayOfMonth(day_mo);
-        setTask(task);
-
-        calcRunTime();
-    }
-
-    /**
-     * Used for ordering Jobentries
-     * Note: this comparator imposes orderings that are inconsistent with
-     * equals.
-     *
-     * @param je The first <code>JobEntry</code> object.
-     * @return An <code>int</code> indicating the result of the comparison.
-     */
-    public int compareTo(Object je)
-    {
-        int result = -1;
-        if (je instanceof JobEntryTorque)
-        {
-            result = getJobId() - ((JobEntryTorque) je).getJobId();
-        }
-        return result;
-    }
-
-    /**
-     * Sets whether the job is running.
-     *
-     * @param isActive Whether the job is running.
-     */
-    public void setActive(boolean isActive)
-    {
-        jobIsActive = isActive;
-    }
-
-    /**
-     * Check to see if job is currently active/running
-     *
-     * @return true if job is currently geing run by the
-     *  workerthread, otherwise false
-     */
-    public boolean isActive()
-    {
-        return jobIsActive;
-    }
-
-    /**
-     * Get the next runtime for this job as a long.
-     *
-     * @return The next run time as a long.
-     */
-    public long getNextRuntime()
-    {
-        return runtime;
-    }
-
-    /**
-     * Gets the next runtime as a date
-     *
-     * @return Next run date
-     */
-    public Date getNextRunDate()
-    {
-        return new Date(runtime);
-    }
-
-    /**
-     * Get the next runtime for this job as a String.
-     *
-     * @return The next run time as a String.
-     */
-    public String getNextRunAsString()
-    {
-        return getNextRunDate().toString();
-    }
-
-    /**
-     * Calculate how long before the next runtime.<br>
-     *
-     * The runtime determines it's position in the job queue.
-     * Here's the logic:<br>
-     *
-     * 1. Create a date the represents when this job is to run.<br>
-     *
-     * 2. If this date has expired, them "roll" appropriate date
-     * fields forward to the next date.<br>
-     *
-     * 3. Calculate the diff in time between the current time and the
-     * next run time.<br>
-     *
-     * @exception TurbineException a generic exception.
-     */
-    public void calcRunTime()
-            throws TurbineException
-    {
-        Calendar schedrun = Calendar.getInstance();
-        Calendar now = Calendar.getInstance();
-
-        switch (evaluateJobType())
-        {
-            case SECOND:
-                // SECOND (every so many seconds...)
-                schedrun.add(Calendar.SECOND, getSecond());
-                runtime = schedrun.getTime().getTime();
-                break;
-
-            case MINUTE:
-                // MINUTE (every so many minutes...)
-                schedrun.add(Calendar.SECOND, getSecond());
-                schedrun.add(Calendar.MINUTE, getMinute());
-                runtime = schedrun.getTime().getTime();
-                break;
-
-            case WEEK_DAY:
-                // WEEKDAY (day of the week)
-                schedrun.set(Calendar.SECOND, getSecond());
-                schedrun.set(Calendar.MINUTE, getMinute());
-                schedrun.set(Calendar.HOUR_OF_DAY, getHour());
-                schedrun.set(Calendar.DAY_OF_WEEK, getWeekDay());
-
-                if (now.before(schedrun))
-                {
-                    // Scheduled time has NOT expired.
-                    runtime = schedrun.getTime().getTime();
-                }
-                else
-                {
-                    // Scheduled time has expired; roll to the next week.
-                    schedrun.add(Calendar.DAY_OF_WEEK, 7);
-                    runtime = schedrun.getTime().getTime();
-                }
-                break;
-
-            case DAY_OF_MONTH:
-                // DAY_OF_MONTH (date of the month)
-                schedrun.set(Calendar.SECOND, getSecond());
-                schedrun.set(Calendar.MINUTE, getMinute());
-                schedrun.set(Calendar.HOUR_OF_DAY, getHour());
-                schedrun.set(Calendar.DAY_OF_MONTH, getDayOfMonth());
-
-                if (now.before(schedrun))
-                {
-                    // Scheduled time has NOT expired.
-                    runtime = schedrun.getTime().getTime();
-                }
-                else
-                {
-                    // Scheduled time has expired; roll to the next month.
-                    schedrun.add(Calendar.MONTH, 1);
-                    runtime = schedrun.getTime().getTime();
-                }
-                break;
-
-            case DAILY:
-                // DAILY (certain hour:minutes of the day)
-                schedrun.set(Calendar.SECOND, getSecond());
-                schedrun.set(Calendar.MINUTE, getMinute());
-                schedrun.set(Calendar.HOUR_OF_DAY, getHour());
-
-                // Scheduled time has NOT expired.
-                if (now.before(schedrun))
-                {
-                    runtime = schedrun.getTime().getTime();
-                }
-                else
-                {
-                    // Scheduled time has expired; roll forward 24 hours.
-                    schedrun.add(Calendar.HOUR_OF_DAY, 24);
-                    runtime = schedrun.getTime().getTime();
-                }
-                break;
-
-            default:
-                // Do nothing.
-        }
-
-        log.info("Next runtime for task " + this.getTask() + " is " + this.getNextRunDate());
-    }
-
-    /**
-     * What schedule am I on?
-     *
-     * I know this is kinda ugly!  If you can think of a cleaner way
-     * to do this, please jump in!
-     *
-     * @return A number specifying the type of schedule. See
-     * calcRunTime().
-     * @exception TurbineException a generic exception.
-     */
-    private int evaluateJobType()
-            throws TurbineException
-    {
-
-        // First start by checking if it's a day of the month job.
-        if (getDayOfMonth() < 0)
-        {
-            // Not a day of the month job... check weekday.
-            if (getWeekDay() < 0)
-            {
-                // Not a weekday job...check if by the hour.
-                if (getHour() < 0)
-                {
-                    // Not an hourly job...check if it is by the minute
-                    if (getMinute() < 0)
-                    {
-                        // Not a by the minute job so must be by the second
-                        if (getSecond() < 0)
-                            throw new TurbineException("Error in JobEntry. Bad Job parameter.");
-
-                        return SECOND;
-                    }
-                    else
-                    {
-                        // Must be a job run by the minute so we need minutes and
-                        // seconds.
-                        if (getMinute() < 0 || getSecond() < 0)
-                            throw new TurbineException("Error in JobEntry. Bad Job parameter.");
-
-                        return MINUTE;
-                    }
-                }
-                else
-                {
-                    // Must be a daily job by hours minutes, and seconds.  In
-                    // this case, we need the minute, second, and hour params.
-                    if (getMinute() < 0 || getHour() < 0 || getSecond() < 0)
-                        throw new TurbineException("Error in JobEntry. Bad Job parameter.");
-
-                    return DAILY;
-                }
-            }
-            else
-            {
-                // Must be a weekday job.  In this case, we need
-                // minute, second, and hour params
-                if (getMinute() < 0 || getHour() < 0 || getSecond() < 0)
-                    throw new TurbineException("Error in JobEntry. Bad Job parameter.");
-
-                return WEEK_DAY;
-            }
-        }
-        else
-        {
-            // Must be a day of the month job.  In this case, we need
-            // minute, second, and hour params
-            if (getMinute() < 0 || getHour() < 0)
-                throw new TurbineException("Error in JobEntry. Bad Job parameter.");
-
-            return DAY_OF_MONTH;
-        }
-    }
-
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorquePeer.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorquePeer.java
deleted file mode 100644
index 6a808f7..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobEntryTorquePeer.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/**
- * The skeleton for this class was autogenerated by Torque on:
- *
- * [Tue Oct 14 14:03:25 CEST 2003]
- *
- *  You should add additional methods to this class to meet the
- *  application requirements.  This class will only be generated as
- *  long as it does not already exist in the output directory.
- */
-public class JobEntryTorquePeer
-    extends org.apache.turbine.services.schedule.BaseJobEntryTorquePeer
-{
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobQueue.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/JobQueue.java
deleted file mode 100644
index fb210a6..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/JobQueue.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Vector;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Queue for the scheduler.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class JobQueue
-{
-    /**
-     * The queue of <code>JobEntry</code> objects.
-     */
-    private Vector queue = null;
-
-    /**
-     * Creates a new instance.
-     */
-    public JobQueue()
-    {
-        queue = new Vector(10);
-    }
-
-    /**
-     * Return the next job off the top of the queue, or <code>null</code> if
-     * there are no jobs in the queue.
-     *
-     * @return The next job in the queue.
-     */
-    public JobEntry getNext()
-    {
-        if (queue.size() > 0)
-        {
-            return (JobEntry) queue.elementAt(0);
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Return a specific job.
-     *
-     * @param je The JobEntry we are looking for.
-     * @return A JobEntry.
-     */
-    public JobEntry getJob(JobEntry je)
-    {
-        int index = -1;
-
-        if (je != null)
-        {
-            index = queue.indexOf(je);
-        }
-
-        if (index < 0)
-        {
-            return null;
-        }
-        else
-        {
-            return (JobEntry) queue.elementAt(index);
-        }
-    }
-
-    /**
-     * List jobs in the queue.  This is used by the scheduler UI.
-     *
-     * @return A Vector of <code>JobEntry</code> objects.
-     */
-    public Vector list()
-    {
-        if (queue != null && queue.size() > 0)
-        {
-            return (Vector) queue.clone();
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Add a job to the queue.
-     *
-     * @param je A JobEntry job.
-     */
-    public synchronized void add(JobEntry je)
-    {
-        queue.addElement(je);
-        sortQueue();
-    }
-
-    /**
-     * Batch load jobs.  Retains any already enqueued jobs.  Called on
-     * <code>SchedulerService</code> start-up.
-     *
-     * @param jobEntries A list of the <code>JobEntry</code> objects to load.
-     */
-    public synchronized void batchLoad(List jobEntries)
-    {
-        if (jobEntries != null)
-        {
-            queue.addAll(jobEntries);
-            sortQueue();
-        }
-
-    }
-
-    /**
-     * Remove a job from the queue.
-     *
-     * @param je A JobEntry with the job to remove.
-     */
-    public synchronized void remove(JobEntry je)
-    {
-        queue.removeElement(je);
-        sortQueue();
-    }
-
-    /**
-     * Modify a job on the queue.
-     *
-     * @param je A JobEntry with the job to modify
-     */
-    public synchronized void modify(JobEntry je)
-            throws TurbineException
-    {
-        remove(je);
-        je.calcRunTime();
-        this.add(je);
-        sortQueue();
-    }
-
-    /**
-     * Update the job for its next run time.
-     *
-     * @param je A JobEntry to be updated.
-     * @exception TurbineException a generic exception.
-     */
-    public synchronized void updateQueue(JobEntry je)
-            throws TurbineException
-    {
-        je.calcRunTime();
-        sortQueue();
-    }
-
-    /**
-     * Re-sort the existing queue.  Consumers of this method should be
-     * <code>synchronized</code>.
-     */
-    private void sortQueue()
-    {
-        Comparator aComparator = new Comparator()
-        {
-            public int compare(Object o1, Object o2)
-            {
-                Long time1 = new Long(((JobEntry) o1).getNextRuntime());
-                Long time2 = new Long(((JobEntry) o2).getNextRuntime());
-                return (time1.compareTo(time2));
-            }
-        };
-
-        Collections.sort(queue, aComparator);
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java
deleted file mode 100644
index 7ef726d..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerService.java
+++ /dev/null
@@ -1,276 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Service for a cron like scheduler that uses the
- * TurbineResources.properties file instead of the database.
- * The methods that operate on jobs ( get,add,update,remove )
- * only operate on the queue in memory and changes are not reflected
- * to the properties file which was used to initilize the jobs.
- * An example is given below.  The job names are the class names that
- * extend ScheduledJob.
- *
- * <PRE>
- *
- * services.SchedulerService.scheduler.jobs=scheduledJobName,scheduledJobName2
- *
- * services.SchedulerService.scheduler.job.scheduledJobName.ID=1
- * services.SchedulerService.scheduler.job.scheduledJobName.SECOND=-1
- * services.SchedulerService.scheduler.job.scheduledJobName.MINUTE=-1
- * services.SchedulerService.scheduler.job.scheduledJobName.HOUR=7
- * services.SchedulerService.scheduler.job.scheduledJobName.WEEKDAY=-1
- * services.SchedulerService.scheduler.job.scheduledJobName.DAY_OF_MONTH=-1
- *
- * services.SchedulerService.scheduler.job.scheduledJobName2.ID=1
- * services.SchedulerService.scheduler.job.scheduledJobName2.SECOND=-1
- * services.SchedulerService.scheduler.job.scheduledJobName2.MINUTE=-1
- * services.SchedulerService.scheduler.job.scheduledJobName2.HOUR=7
- * services.SchedulerService.scheduler.job.scheduledJobName2.WEEKDAY=-1
- * services.SchedulerService.scheduler.job.scheduledJobName2.DAY_OF_MONTH=-1
- *
- * </PRE>
- *
- * Based on TamboraSchedulerService written by John Thorhauer.
- *
- * @author <a href="mailto:ekkerbj@netscpae.net">Jeff Brekke</a>
- * @author <a href="mailto:john@zenplex.com">John Thorhauer</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineNonPersistentSchedulerService
-        extends TurbineSchedulerService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScheduleService.LOGGER_NAME);
-
-    /**
-     * Constructor.
-     *
-     * @exception TurbineException a generic exception.
-     */
-    public TurbineNonPersistentSchedulerService()
-            throws TurbineException
-    {
-        super();
-    }
-
-    /**
-     * Called the first time the Service is used.<br>
-     *
-     * Load all the jobs from cold storage.  Add jobs to the queue
-     * (sorted in ascending order by runtime) and start the scheduler
-     * thread.
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        try
-        {
-            scheduleQueue = new JobQueue();
-            mainLoop = new MainLoop();
-
-            List jobProps = conf.getList("scheduler.jobs");
-            List jobs = new Vector();
-            // If there are scheduler.jobs defined then set up a job vector
-            // for the scheduleQueue
-            if (!jobProps.isEmpty())
-            {
-                for (int i = 0; i < jobProps.size(); i++)
-                {
-                    String jobName = (String) jobProps.get(i);
-                    String jobPrefix = "scheduler.job." + jobName;
-
-                    String jobId = conf.getString(jobPrefix + ".ID", null);
-                    if (StringUtils.isEmpty(jobId))
-                    {
-                        throw new Exception(
-                                "There is an error in the TurbineResources.properties file. \n"
-                                + jobPrefix + ".ID is not found.\n");
-                    }
-
-                    int sec = conf.getInt(jobPrefix + ".SECOND", -1);
-                    int min = conf.getInt(jobPrefix + ".MINUTE", -1);
-                    int hr = conf.getInt(jobPrefix + ".HOUR", -1);
-                    int wkday = conf.getInt(jobPrefix + ".WEEKDAY", -1);
-                    int dayOfMonth = conf.getInt(jobPrefix + ".DAY_OF_MONTH", -1);
-
-                    JobEntryTorque je = new JobEntryTorque(sec,
-                            min,
-                            hr,
-                            wkday,
-                            dayOfMonth,
-                            jobName);
-                    je.setJobId(Integer.parseInt(jobId));
-                    jobs.add(je);
-
-                }
-            }
-
-            if (jobs != null && jobs.size() > 0)
-            {
-                scheduleQueue.batchLoad(jobs);
-            }
-
-            setEnabled(getConfiguration().getBoolean("enabled", true));
-            restart();
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "Could not initialize the scheduler service";
-            log.error(errorMessage, e);
-            throw new InitializationException(errorMessage, e);
-        }
-    }
-
-    /**
-     * Called the first time the Service is used.<br>
-     *
-     * Load all the jobs from cold storage.  Add jobs to the queue
-     * (sorted in ascending order by runtime) and start the scheduler
-     * thread.
-     *
-     * @param config A ServletConfig.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config)
-            throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * This method returns the job element from the internal queue.
-     *
-     * @param oid The int id for the job.
-     * @return A JobEntry.
-     * @exception TurbineException could not retrieve job
-     */
-    public JobEntry getJob(int oid)
-            throws TurbineException
-    {
-        JobEntryTorque je = new JobEntryTorque();
-        je.setJobId(oid);
-        return scheduleQueue.getJob(je);
-    }
-
-    /**
-     * Add a new job to the queue.
-     *
-     * @param je A JobEntry with the job to add.
-     * @throws TurbineException job could not be added
-     */
-    public void addJob(JobEntry je)
-            throws TurbineException
-    {
-        updateJob(je);
-    }
-
-    /**
-     * Remove a job from the queue.
-     *
-     * @param je A JobEntry with the job to remove.
-     */
-    public void removeJob(JobEntry je)
-    {
-        // Remove from the queue.
-        scheduleQueue.remove(je);
-        restart();
-    }
-
-    /**
-     * Add/update a job
-     *
-     * @param je A JobEntry with the job to modify
-     * @throws TurbineException job could not be updated
-     */
-    public void updateJob(JobEntry je)
-            throws TurbineException
-    {
-        try
-        {
-            je.calcRunTime();
-
-            // Update the queue.
-            scheduleQueue.modify(je);
-            restart();
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "Problem updating Scheduled Job: " + je.getTask();
-            log.error(errorMessage, e);
-            throw new TurbineException(errorMessage, e);
-        }
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineSchedulerService.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineSchedulerService.java
deleted file mode 100644
index 11c4a64..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/TurbineSchedulerService.java
+++ /dev/null
@@ -1,493 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Service for a cron like scheduler.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineSchedulerService
-        extends TurbineBaseService
-        implements ScheduleService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScheduleService.LOGGER_NAME);
-
-    /** The queue */
-    protected JobQueue scheduleQueue = null;
-
-    /** Current status of the scheduler */
-    private boolean enabled = false;
-
-    /** The main loop for starting jobs. */
-    protected MainLoop mainLoop;
-
-    /** The thread used to process commands.  */
-    protected Thread thread;
-
-    /**
-     * Creates a new instance.
-     */
-    public TurbineSchedulerService()
-    {
-        mainLoop = null;
-        thread = null;
-    }
-
-    /**
-     * Initializes the SchedulerService.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        try
-        {
-            setEnabled(getConfiguration().getBoolean("enabled", true));
-            scheduleQueue = new JobQueue();
-            mainLoop = new MainLoop();
-
-            // Load all from cold storage.
-            List jobs = JobEntryTorquePeer.doSelect(new Criteria());
-
-            if (jobs != null && jobs.size() > 0)
-            {
-                Iterator it = jobs.iterator();
-                while (it.hasNext())
-                {
-                    ((JobEntry) it.next()).calcRunTime();
-                }
-                scheduleQueue.batchLoad(jobs);
-
-                restart();
-            }
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "Could not initialize the scheduler service";
-            log.error(errorMessage, e);
-            throw new InitializationException(errorMessage, e);
-        }
-    }
-
-    /**
-     * Called the first time the Service is used.<br>
-     *
-     * Load all the jobs from cold storage.  Add jobs to the queue
-     * (sorted in ascending order by runtime) and start the scheduler
-     * thread.
-     *
-     * @param config A ServletConfig.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config) throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Shutdowns the service.
-     *
-     * This methods interrupts the housekeeping thread.
-     */
-    public void shutdown()
-    {
-        if (getThread() != null)
-        {
-            getThread().interrupt();
-        }
-    }
-
-    /**
-     * Get a specific Job from Storage.
-     *
-     * @param oid The int id for the job.
-     * @return A JobEntry.
-     * @exception TurbineException job could not be retreived.
-     */
-    public JobEntry getJob(int oid)
-            throws TurbineException
-    {
-        try
-        {
-            JobEntry je = JobEntryTorquePeer.retrieveByPK(oid);
-            return scheduleQueue.getJob(je);
-        }
-        catch (TorqueException e)
-        {
-            String errorMessage = "Error retrieving job from persistent storage.";
-            log.error(errorMessage, e);
-            throw new TurbineException(errorMessage, e);
-        }
-    }
-
-    /**
-     * Add a new job to the queue.
-     *
-     * @param je A JobEntry with the job to add.
-     * @throws TurbineException job could not be added
-     */
-    public void addJob(JobEntry je)
-            throws TurbineException
-    {
-        updateJob(je);
-    }
-
-    /**
-     * Remove a job from the queue.
-     *
-     * @param je A JobEntry with the job to remove.
-     * @exception TurbineException job could not be removed
-     */
-    public void removeJob(JobEntry je)
-            throws TurbineException
-    {
-        try
-        {
-            // First remove from DB.
-            Criteria c = new Criteria().add(JobEntryTorquePeer.JOB_ID, ((JobEntryTorque)je).getPrimaryKey());
-            JobEntryTorquePeer.doDelete(c);
-
-            // Remove from the queue.
-            scheduleQueue.remove(je);
-
-            // restart the scheduler
-            restart();
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "Problem removing Scheduled Job: " + je.getTask();
-            log.error(errorMessage, e);
-            throw new TurbineException(errorMessage, e);
-        }
-    }
-
-    /**
-     * Add or update a job.
-     *
-     * @param je A JobEntry with the job to modify
-     * @throws TurbineException job could not be updated
-     */
-    public void updateJob(JobEntry je)
-            throws TurbineException
-    {
-        try
-        {
-            je.calcRunTime();
-
-            // Update the queue.
-            if (((JobEntryTorque)je).isNew())
-            {
-                scheduleQueue.add(je);
-            }
-            else
-            {
-                scheduleQueue.modify(je);
-            }
-
-            ((JobEntryTorque)je).save();
-
-            restart();
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "Problem updating Scheduled Job: " + je.getTask();
-            log.error(errorMessage, e);
-            throw new TurbineException(errorMessage, e);
-        }
-    }
-
-    /**
-     * List jobs in the queue.  This is used by the scheduler UI.
-     *
-     * @return A List of jobs.
-     */
-    public List listJobs()
-    {
-        return scheduleQueue.list();
-    }
-
-    /**
-     * Sets the enabled status of the scheduler
-     *
-     * @param enabled
-     *
-     */
-    protected void setEnabled(boolean enabled)
-    {
-        this.enabled = enabled;
-    }
-
-    /**
-     * Determines if the scheduler service is currently enabled.
-     *
-     * @return Status of the scheduler service.
-     */
-    public boolean isEnabled()
-    {
-        return enabled;
-    }
-
-    /**
-     * Starts or restarts the scheduler if not already running.
-     */
-    public synchronized void startScheduler()
-    {
-        setEnabled(true);
-        restart();
-    }
-
-    /**
-     * Stops the scheduler if it is currently running.
-     */
-    public synchronized void stopScheduler()
-    {
-        log.info("Stopping job scheduler");
-        Thread thread = getThread();
-        if (thread != null)
-        {
-            thread.interrupt();
-        }
-        enabled = false;
-    }
-
-    /**
-     * Return the thread being used to process commands, or null if
-     * there is no such thread.  You can use this to invoke any
-     * special methods on the thread, for example, to interrupt it.
-     *
-     * @return A Thread.
-     */
-    public synchronized Thread getThread()
-    {
-        return thread;
-    }
-
-    /**
-     * Set thread to null to indicate termination.
-     */
-    private synchronized void clearThread()
-    {
-        thread = null;
-    }
-
-    /**
-     * Start (or restart) a thread to process commands, or wake up an
-     * existing thread if one is already running.  This method can be
-     * invoked if the background thread crashed due to an
-     * unrecoverable exception in an executed command.
-     */
-    public synchronized void restart()
-    {
-        if (enabled)
-        {
-            log.info("Starting job scheduler");
-            if (thread == null)
-            {
-                // Create the the housekeeping thread of the scheduler. It will wait
-                // for the time when the next task needs to be started, and then
-                // launch a worker thread to execute the task.
-                thread = new Thread(mainLoop, ScheduleService.SERVICE_NAME);
-                // Indicate that this is a system thread. JVM will quit only when there
-                // are no more enabled user threads. Settings threads spawned internally
-                // by Turbine as daemons allows commandline applications using Turbine
-                // to terminate in an orderly manner.
-                thread.setDaemon(true);
-                thread.start();
-            }
-            else
-            {
-                notify();
-            }
-        }
-    }
-
-    /**
-     *  Return the next Job to execute, or null if thread is
-     *  interrupted.
-     *
-     * @return A JobEntry.
-     * @exception TurbineException a generic exception.
-     */
-    private synchronized JobEntry nextJob()
-            throws TurbineException
-    {
-        try
-        {
-            while (!Thread.interrupted())
-            {
-                // Grab the next job off the queue.
-                JobEntry je = scheduleQueue.getNext();
-
-                if (je == null)
-                {
-                    // Queue must be empty. Wait on it.
-                    wait();
-                }
-                else
-                {
-                    long now = System.currentTimeMillis();
-                    long when = je.getNextRuntime();
-
-                    if (when > now)
-                    {
-                        // Wait till next runtime.
-                        wait(when - now);
-                    }
-                    else
-                    {
-                        // Update the next runtime for the job.
-                        scheduleQueue.updateQueue(je);
-                        // Return the job to run it.
-                        return je;
-                    }
-                }
-            }
-        }
-        catch (InterruptedException ex)
-        {
-        }
-
-        // On interrupt.
-        return null;
-    }
-
-    /**
-     * Inner class.  This is isolated in its own Runnable class just
-     * so that the main class need not implement Runnable, which would
-     * allow others to directly invoke run, which is not supported.
-     */
-    protected class MainLoop
-            implements Runnable
-    {
-        /**
-         * Method to run the class.
-         */
-        public void run()
-        {
-            String taskName = null;
-            try
-            {
-                while (enabled)
-                {
-                    JobEntry je = nextJob();
-                    if (je != null)
-                    {
-                        taskName = je.getTask();
-
-                        // Start the thread to run the job.
-                        Runnable wt = new WorkerThread(je);
-                        Thread helper = new Thread(wt);
-                        helper.start();
-                    }
-                    else
-                    {
-                        break;
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Error running a Scheduled Job: " + taskName, e);
-                enabled = false;
-            }
-            finally
-            {
-                clearThread();
-            }
-        }
-    }
-    public JobEntry createJobEntry(){
-        JobEntry je = new JobEntryTorque();
-        return je;
-    }
-    
-    public JobEntry createJobEntry(int sec,
-                            int min,
-                            int hr,
-                            int wkday,
-                            int dayOfMonth,
-                            String jobName) throws TurbineException{
-        JobEntry je = new JobEntryTorque(sec,
-                            min,
-                            hr,
-                            wkday,
-                            dayOfMonth,
-                            jobName);
-        return je;
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/schedule/WorkerThread.java b/extensions/torque/src/java/org/apache/turbine/services/schedule/WorkerThread.java
deleted file mode 100644
index f6600ea..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/schedule/WorkerThread.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.modules.ScheduledJobLoader;
-
-/**
- * Wrapper for a <code>JobEntry</code> to actually perform the job's action.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class WorkerThread
-        implements Runnable
-{
-    /**
-     * The <code>JobEntry</code> to run.
-     */
-    private JobEntry je = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScheduleService.LOGGER_NAME);
-
-    /**
-     * Creates a new worker to run the specified <code>JobEntry</code>.
-     *
-     * @param je The <code>JobEntry</code> to create a worker for.
-     */
-    public WorkerThread(JobEntry je)
-    {
-        this.je = je;
-    }
-
-    /**
-     * Run the job.
-     */
-    public void run()
-    {
-        if (je == null || je.isActive())
-        {
-            return;
-        }
-
-        try
-        {
-            if (!je.isActive())
-            {
-                je.setActive(true);
-                logStateChange("started");
-                ScheduledJobLoader.getInstance().exec(je, je.getTask());
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Error in WorkerThread for scheduled job #" +
-                    ((JobEntryTorque)je).getPrimaryKey() + ", task: " + je.getTask(), e);
-        }
-        finally
-        {
-            if (je.isActive())
-            {
-                je.setActive(false);
-                logStateChange("completed");
-            }
-        }
-    }
-
-    /**
-     * Macro to log <code>JobEntry</code> status information.
-     *
-     * @param state The new state of the <code>JobEntry</code>.
-     */
-    private final void logStateChange(String state)
-    {
-        log.debug("Scheduled job #" + ((JobEntryTorque)je).getPrimaryKey() + ' ' + state +
-                ", task: " + je.getTask());
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManager.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManager.java
deleted file mode 100644
index 13f0746..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManager.java
+++ /dev/null
@@ -1,705 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import java.beans.PropertyDescriptor;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.GroupSet;
-
-/**
- * This class capsulates all direct Peer access for the Group entities.
- * It allows the exchange of the default Turbine supplied TurbineGroupPeer
- * class against a custom class.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-public class GroupPeerManager
-    implements GroupPeerManagerConstants
-{
-    /** The class of the Peer the TorqueSecurityService uses */
-    private static Class groupPeerClass = null;
-
-    /** The class name of the objects returned by the configured peer. */
-    private static Class groupObject = null;
-
-    /** The name of the Table used for Group Object queries  */
-    private static String tableName = null;
-
-    /** The name of the column used as "Name" Column */
-    private static String nameColumn = null;
-
-    /** The name of the column used as "Id" Column */
-    private static String idColumn = null;
-
-    /** The "Name" property descriptor */
-    private static PropertyDescriptor namePropDesc = null;
-
-    /** The "Id" property descriptor */
-    private static PropertyDescriptor idPropDesc = null;
-
-    /** Logging */
-    static Log log = LogFactory.getLog(GroupPeerManager.class);
-
-    /**
-     * Initializes the GroupPeerManager, loading the class object for the
-     * Peer used to retrieve Group objects
-     *
-     * @param conf The configuration object used to configure the Manager
-     *
-     * @exception InitializationException A problem occured during initialization
-     */
-
-    public static void init(Configuration conf)
-        throws InitializationException
-    {
-        String groupPeerClassName = conf.getString(GROUP_PEER_CLASS_KEY,
-                                                   GROUP_PEER_CLASS_DEFAULT);
-        String groupObjectName = null;
-
-        try
-        {
-            groupPeerClass = Class.forName(groupPeerClassName);
-
-            tableName  = (String) groupPeerClass.getField("TABLE_NAME").get(null);
-
-            //
-            // We have either an user configured Object class or we use the default
-            // as supplied by the Peer class
-            //
-            groupObject = getPersistenceClass(); // Default from Peer, can be overridden
-
-            groupObjectName = conf.getString(GROUP_CLASS_KEY,
-                    groupObject.getName());
-
-            groupObject = Class.forName(groupObjectName); // Maybe the user set a new value...
-
-            // If any of the following Field queries fails, the group subsystem 
-            // is unusable. So check this right here at init time, which saves 
-            // us much time and hassle if it fails...
-            nameColumn = (String) groupPeerClass.getField(conf
-                    .getString(GROUP_NAME_COLUMN_KEY, GROUP_NAME_COLUMN_DEFAULT)
-                    ).get(null);
-
-            idColumn = (String) groupPeerClass.getField(conf
-                    .getString(GROUP_ID_COLUMN_KEY, GROUP_ID_COLUMN_DEFAULT)
-                    ).get(null);
-
-            namePropDesc = new PropertyDescriptor(conf
-                    .getString(GROUP_NAME_PROPERTY_KEY, 
-                    GROUP_NAME_PROPERTY_DEFAULT), groupObject);
-
-            idPropDesc = new PropertyDescriptor(conf
-                    .getString(GROUP_ID_PROPERTY_KEY, 
-                    GROUP_ID_PROPERTY_DEFAULT), groupObject);
-        }
-        catch (Exception e)
-        {
-            if (groupPeerClassName == null || groupPeerClass == null)
-            {
-                throw new InitializationException(
-                    "Could not find GroupPeer class ("
-                    + groupPeerClassName + ")", e);
-            }
-            if (tableName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the table name from the Peer object", e);
-            }
-
-            if (groupObject == null || groupObjectName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the object type from the Peer object", e);
-            }
-
-            if (nameColumn == null || namePropDesc == null)
-            {
-                throw new InitializationException(
-                    "GroupPeer " + groupPeerClassName + " has no name column information!", e);
-            }
-            if (idColumn == null || idPropDesc == null)
-            {
-                throw new InitializationException(
-                    "GroupPeer " + groupPeerClassName + " has no id column information!", e);
-            }
-        }
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return tableName;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Name Column for a group
-     *
-     * @return A String containing the column name
-     */
-    public static String getNameColumn()
-    {
-        return nameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Id Column for a group
-     *
-     * @return A String containing the column id
-     */
-    public static String getIdColumn()
-    {
-        return idColumn;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name The column to fully qualify
-     *
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(getTableName());
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Returns a new, empty object for the underlying peer.
-     * Used to create a new underlying object
-     *
-     * @return A new object which is compatible to the Peer
-     *         and can be used as a Group object
-     *
-     */
-
-    public static Persistent newPersistentInstance()
-    {
-        Persistent obj = null;
-
-        if(groupObject == null)
-        {
-            // This can happen if the Turbine wants to determine the
-            // name of the anonymous user before the security service
-            // has been initialized. In this case, the Peer Manager
-            // has not yet been inited and the groupObject is still
-            // null. Return null in this case.
-            //
-            return obj;
-        }
-
-        try
-        {
-            obj = (Persistent) groupObject.newInstance();
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a group object", e);
-            obj = null;
-        }
-        return obj;
-    }
-
-    /**
-     * Retrieves/assembles a GroupSet of all of the Groups.
-     *
-     * @return A set of all the Groups in the system
-     * @exception Exception A generic exception.
-     */
-    public static GroupSet retrieveSet()
-        throws Exception
-    {
-        return retrieveSet(new Criteria());
-    }
-
-    /**
-     * Retrieves/assembles a GroupSet based on the Criteria passed in
-     *
-     * @param criteria A criteria containing a pre-assembled set of criterias
-     *                 for the GroupSet
-     *
-     * @return A Set of groups which fulfil the required criterias
-     *
-     * @exception Exception A generic exception
-     *
-     */
-    public static GroupSet retrieveSet(Criteria criteria)
-        throws Exception
-    {
-        List results = doSelect(criteria);
-        GroupSet gs = new GroupSet();
-
-        for(Iterator it = results.iterator(); it.hasNext(); )
-        {
-            gs.add((Group) it.next());
-        }
-        return gs;
-    }
-
-    /**
-     * Checks if a Group is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param group The Group to be checked.
-     * @return <code>true</code> if given Group exists in the system.
-     * @throws DataBackendException when more than one Group with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    public static boolean checkExists(Group group)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.addSelectColumn(getIdColumn());
-
-        criteria.add(getNameColumn(), group.getName());
-
-        List results = BasePeer.doSelect(criteria);
-
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple groups named '" +
-                                           group.getName() + "' exist!");
-        }
-
-        return (results.size() == 1);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * WARNING! Do not read on if you have a weak stomach. What follows here
-     * are some abominations thanks to the braindead static peers of Torque
-     * and the rigidity of Java....
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Calls buildCriteria(Group group) in the configured GroupPeer. If you get
-     * a ClassCastException in this routine, you put a Group object into this
-     * method which can't be cast into an object for the TorqueSecurityService. This is a
-     * configuration error most of the time.
-     *
-     * @param group An object which implements the Group interface
-     *
-     * @return A criteria for the supplied group object
-     */
-
-    public static Criteria buildCriteria(Group group)
-    {
-        Criteria crit;
-
-        try
-        {
-            Class[] clazz = new Class[] { groupObject };
-            Object[] params =
-              new Object[] { ((TorqueGroup) group).getPersistentObj() };
-
-            crit =  (Criteria) groupPeerClass
-                .getMethod("buildCriteria", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            crit = null;
-        }
-
-        return crit;
-    }
-
-    /**
-     * Invokes doUpdate(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            groupPeerClass
-                .getMethod("doUpdate", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doUpdate failed", e);
-        }
-    }
-
-    /**
-     * Invokes doInsert(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doInsert(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            groupPeerClass
-                .getMethod("doInsert", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doInsert failed", e);
-        }
-    }
-
-    /**
-     * Invokes doSelect(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @return A List of Group Objects selected by the Criteria
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static List doSelect(Criteria criteria)
-        throws TorqueException
-    {
-        List list;
-
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            list = (List) groupPeerClass
-                .getMethod("doSelect", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doSelect failed", e);
-        }
-        List newList = new ArrayList(list.size());
-
-        //
-        // Wrap the returned Objects into the configured Peer Objects.
-        //
-        for (Iterator it = list.iterator(); it.hasNext(); )
-        {
-            Group dr = getNewGroup((Persistent) it.next());
-            newList.add(dr);
-        }
-
-        return newList;
-    }
-
-    /**
-     * Invokes doDelete(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static void doDelete(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz =
-              new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            groupPeerClass
-                .getMethod("doDelete", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doDelete failed", e);
-        }
-    }
-
-    /**
-     * Invokes setName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     *
-     * @param name The Name to set
-     */
-    public static void setGroupName(Persistent obj, String name)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { name };
-            namePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Group Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getName() on the supplied base object
-     *
-     * @param obj The object to use for getting the name
-     *
-     * @return A string containing the name
-     */
-    public static String getGroupName(Persistent obj)
-    {
-        String name = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            name = (String) namePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Group Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return name;
-    }
-
-    /**
-     * Invokes setId(int n) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param id The new Id
-     */
-    public static void setId(Persistent obj, int id)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { Integer.TYPE };
-            idPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Group Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getId() on the supplied base object
-     *
-     * @param obj The object to use for getting the id
-     *
-     * @return The Id of this object
-     */
-    public static Integer getIdAsObj(Persistent obj)
-    {
-        Integer id = null;
-
-        if(obj == null)
-        {
-            return new Integer(0);
-        }
-
-        try
-        {
-            id = (Integer) idPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Group Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return id;
-    }
-
-    /**
-     * Returns the Class of the configured Object class
-     * from the peer
-     *
-     * @return The class of the objects returned by the configured peer
-     *
-     */
-
-    private static Class getPersistenceClass()
-    {
-        Class persistenceClass = null;
-
-        try
-        {
-            Object[] params = new Object[0];
-
-            persistenceClass =  (Class) groupPeerClass
-                .getMethod("getOMClass", null)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            persistenceClass = null;
-        }
-
-        return persistenceClass;
-    }
-
-    /**
-     * Returns a new, configured Group Object with
-     * a supplied Persistent object at its core
-     *
-     * @param p The persistent object
-     *
-     * @return a new, configured Group Object
-     *
-     * @exception Exception Could not create a new Object
-     *
-     */
-
-    public static Group getNewGroup(Persistent p)
-    {
-        Group g = null;
-        try
-        {
-            Class groupWrapperClass = TurbineSecurity.getGroupClass();
-
-            Class [] clazz = new Class [] { Persistent.class };
-            Object [] params = new Object [] { p };
-
-            g = (Group) groupWrapperClass
-                .getConstructor(clazz)
-                .newInstance(params);
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a new group from supplied persistent: ", e);
-        }
-
-        return g;
-    }
-}
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManagerConstants.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManagerConstants.java
deleted file mode 100644
index 380d0f3..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/GroupPeerManagerConstants.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.security.torque.om.TurbineGroupPeer;
-
-/**
- * Constants for configuring the various columns and bean properties
- * for the used peer.
- *
- * <pre>
- * Default is:
- *
- * security.torque.groupPeer.class = org.apache.turbine.services.security.torque.om.TurbineGroupPeer
- * security.torque.groupPeer.column.name       = GROUP_NAME
- * security.torque.groupPeer.column.id         = GROUP_ID
- *
- * security.torque.group.class = org.apache.turbine.services.security.torque.om.TurbineGroup
- * security.torque.group.property.name       = Name
- * security.torque.group.property.id         = GroupId
- *
- * </pre>
- * If security.torque.group.class is unset, then the value of the constant CLASSNAME_DEFAULT
- * from the configured Peer is used.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface GroupPeerManagerConstants
-{
-    /** The key within the security service properties for the group class implementation */
-    String GROUP_CLASS_KEY =
-            "torque.group.class";
-
-    /** The key within the security service properties for the group peer class implementation */
-    String GROUP_PEER_CLASS_KEY =
-            "torque.groupPeer.class";
-
-    /** Group peer default class */
-    String GROUP_PEER_CLASS_DEFAULT =
-            TurbineGroupPeer.class.getName();
-
-    /** The column name for the login name field. */
-    String GROUP_NAME_COLUMN_KEY =
-            "torque.groupPeer.column.name";
-
-    /** The column name for the id field. */
-    String GROUP_ID_COLUMN_KEY =
-        "torque.groupPeer.column.id";
-
-
-    /** The default value for the column name constant for the login name field. */
-    String GROUP_NAME_COLUMN_DEFAULT =
-        "GROUP_NAME";
-
-    /** The default value for the column name constant for the id field. */
-    String GROUP_ID_COLUMN_DEFAULT =
-        "GROUP_ID";
-
-
-    /** The property name of the bean property for the login name field. */
-    String GROUP_NAME_PROPERTY_KEY =
-        "torque.group.property.name";
-
-    /** The property name of the bean property for the id field. */
-    String GROUP_ID_PROPERTY_KEY =
-        "torque.group.property.id";
-
-
-    /** The default value of the bean property for the login name field. */
-    String GROUP_NAME_PROPERTY_DEFAULT =
-        "Name";
-
-    /** The default value of the bean property for the id field. */
-    String GROUP_ID_PROPERTY_DEFAULT =
-        "GroupId";
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManager.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManager.java
deleted file mode 100644
index b8d274f..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManager.java
+++ /dev/null
@@ -1,762 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.PropertyDescriptor;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Vector;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.torque.om.TurbineRolePermissionPeer;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.PermissionSet;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-
-/**
- * This class capsulates all direct Peer access for the Permission entities.
- * It allows the exchange of the default Turbine supplied TurbinePermissionPeer
- * class against a custom class.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public class PermissionPeerManager
-    implements PermissionPeerManagerConstants
-{
-    /** The class of the Peer the TorqueSecurityService uses */
-    private static Class persistentPeerClass = null;
-
-    /** The class name of the objects returned by the configured peer. */
-    private static Class permissionObject = null;
-
-    /** The name of the Table used for Permission Object queries  */
-    private static String tableName = null;
-
-    /** The name of the column used as "Name" Column */
-    private static String nameColumn = null;
-
-    /** The name of the column used as "Id" Column */
-    private static String idColumn = null;
-
-    /** The "Name" property descriptor */
-    private static PropertyDescriptor namePropDesc = null;
-
-    /** The "Id" property descriptor */
-    private static PropertyDescriptor idPropDesc = null;
-
-    /** Logging */
-    static Log log = LogFactory.getLog(PermissionPeerManager.class);
-
-    /**
-     * Initializes the PermissionPeerManager, loading the class object for the
-     * Peer used to retrieve Permission objects
-     *
-     * @param conf The configuration object used to configure the Manager
-     *
-     * @exception InitializationException A problem occured during initialization
-     */
-
-    public static void init(Configuration conf)
-        throws InitializationException
-    {
-        String persistentPeerClassName =
-            conf.getString(PERMISSION_PEER_CLASS_KEY,
-                           PERMISSION_PEER_CLASS_DEFAULT);
-
-        String permissionObjectName = null;
-
-        try
-        {
-            persistentPeerClass = Class.forName(persistentPeerClassName);
-
-            tableName  =
-                (String) persistentPeerClass.getField("TABLE_NAME").get(null);
-
-            //
-            // We have either an user configured Object class or we use the
-            // default as supplied by the Peer class
-            //
-            // Default from Peer, can be overridden
-
-            permissionObject = getPersistenceClass();
-
-            permissionObjectName = conf.getString(PERMISSION_CLASS_KEY,
-                                        permissionObject.getName());
-
-            // Maybe the user set a new value...
-            permissionObject = Class.forName(permissionObjectName);
-
-            /* If any of the following Field queries fails, the permission
-             * subsystem is unusable. So check this right here at init time,
-             * which saves us much time and hassle if it fails...
-             */
-
-            nameColumn = (String) persistentPeerClass.getField(
-                    conf.getString(PERMISSION_NAME_COLUMN_KEY,
-                                   PERMISSION_NAME_COLUMN_DEFAULT)
-                    ).get(null);
-
-            idColumn = (String) persistentPeerClass.getField(
-                    conf.getString(PERMISSION_ID_COLUMN_KEY,
-                                   PERMISSION_ID_COLUMN_DEFAULT)
-                    ).get(null);
-
-            namePropDesc = new PropertyDescriptor(
-                    conf.getString(PERMISSION_NAME_PROPERTY_KEY,
-                                   PERMISSION_NAME_PROPERTY_DEFAULT),
-                    permissionObject);
-
-            idPropDesc = new PropertyDescriptor(
-                    conf.getString(PERMISSION_ID_PROPERTY_KEY,
-                                   PERMISSION_ID_PROPERTY_DEFAULT),
-                    permissionObject);
-        }
-        catch (Exception e)
-        {
-            if (persistentPeerClassName == null || persistentPeerClass == null)
-            {
-                throw new InitializationException(
-                    "Could not find PermissionPeer class ("
-                    + persistentPeerClassName + ")", e);
-            }
-            if (tableName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the table name from the Peer object", e);
-            }
-
-            if (permissionObject == null || permissionObjectName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the object type from the Peer object", e);
-            }
-
-
-            if (nameColumn == null || namePropDesc == null)
-            {
-                throw new InitializationException(
-                    "PermissionPeer " + persistentPeerClassName +
-                    " has no name column information!", e);
-            }
-            if (idColumn == null || idPropDesc == null)
-            {
-                throw new InitializationException(
-                    "PermissionPeer " + persistentPeerClassName +
-                    " has no id column information!", e);
-            }
-        }
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return tableName;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Name Column for a permission
-     *
-     * @return A String containing the column name
-     */
-    public static String getNameColumn()
-    {
-        return nameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Id Column for a permission
-     *
-     * @return A String containing the column id
-     *
-     */
-    public static String getIdColumn()
-    {
-        return idColumn;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name The column to fully qualify
-     *
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(getTableName());
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Returns a new, empty object for the underlying peer.
-     * Used to create a new underlying object
-     *
-     * @return A new object which is compatible to the Peer
-     *         and can be used as a User object
-     *
-     */
-
-    public static Persistent newPersistentInstance()
-    {
-        Persistent obj = null;
-
-        if(permissionObject == null)
-        {
-            // This can happen if the Turbine wants to determine the
-            // name of the anonymous user before the security service
-            // has been initialized. In this case, the Peer Manager
-            // has not yet been inited and the permissionObject is still
-            // null. Return null in this case.
-            //
-            return obj;
-        }
-
-        try
-        {
-            obj = (Persistent) permissionObject.newInstance();
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a permission object", e);
-            obj = null;
-        }
-        return obj;
-    }
-
-    /**
-     * Checks if a Permission is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param permission The Permission to be checked.
-     * @return <code>true</code> if given Permission exists in the system.
-     * @throws DataBackendException when more than one Permission with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    public static boolean checkExists(Permission permission)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.addSelectColumn(getIdColumn());
-
-        criteria.add(getNameColumn(), permission.getName());
-
-        List results = BasePeer.doSelect(criteria);
-
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple permissions named '" +
-                                           permission.getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Retrieves/assembles a PermissionSet
-     *
-     * @param criteria The criteria to use.
-     * @return A PermissionSet.
-     * @exception Exception A generic Exception.
-     */
-    public static PermissionSet retrieveSet(Criteria criteria)
-        throws Exception
-    {
-        List results = doSelect(criteria);
-        PermissionSet ps = new PermissionSet();
-
-        for(Iterator it = results.iterator(); it.hasNext(); )
-        {
-            ps.add((Permission) it.next());
-        }
-        return ps;
-    }
-
-    /**
-     * Retrieves a set of Permissions associated with a particular Role.
-     *
-     * @param role The role to query permissions of.
-     * @return A set of permissions associated with the Role.
-     * @exception Exception A generic Exception.
-     */
-    public static PermissionSet retrieveSet(Role role)
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(TurbineRolePermissionPeer.ROLE_ID,
-                     ((Persistent) role).getPrimaryKey());
-
-        criteria.addJoin(TurbineRolePermissionPeer.PERMISSION_ID,
-                         getIdColumn());
-
-        return retrieveSet(criteria);
-    }
-
-    /**
-     * Pass in two Vector's of Permission Objects.  It will return a
-     * new Vector with the difference of the two Vectors: C = (A - B).
-     *
-     * @param some Vector B in C = (A - B).
-     * @param all Vector A in C = (A - B).
-     * @return Vector C in C = (A - B).
-     */
-    public static final Vector getDifference(Vector some, Vector all)
-    {
-        Vector clone = (Vector) all.clone();
-        for (Enumeration e = some.elements() ; e.hasMoreElements() ;)
-        {
-            Permission tmp = (Permission) e.nextElement();
-            for (Enumeration f = clone.elements() ; f.hasMoreElements() ;)
-            {
-                Permission tmp2 = (Permission) f.nextElement();
-                if (((Persistent) tmp).getPrimaryKey() ==
-                    ((Persistent) tmp2).getPrimaryKey())
-                {
-                    clone.removeElement(tmp2);
-                    break;
-                }
-            }
-        }
-        return clone;
-    }
-
-    /*
-     * ========================================================================
-     *
-     * WARNING! Do not read on if you have a weak stomach. What follows here
-     * are some abominations thanks to the braindead static peers of Torque
-     * and the rigidity of Java....
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Calls buildCriteria(Permission permission) in
-     * the configured PermissionPeer. If you get a
-     * ClassCastException in this routine, you put a
-     * Permission object into this method which
-     * can't be cast into an object for the
-     * TorqueSecurityService. This is a configuration error most of
-     * the time.
-     *
-     * @param permission An object which implements
-     *                 the Permission interface
-     *
-     * @return A criteria for the supplied permission object
-     */
-
-    public static Criteria buildCriteria(Permission permission)
-    {
-        Criteria crit;
-
-        try
-        {
-            Class[] clazz = new Class[] { permissionObject };
-            Object[] params =
-              new Object[] { ((TorquePermission) permission).getPersistentObj() };
-
-            crit =  (Criteria) persistentPeerClass
-                .getMethod("buildCriteria", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            crit = null;
-        }
-
-        return crit;
-    }
-
-    /**
-     * Invokes doUpdate(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            persistentPeerClass
-                .getMethod("doUpdate", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doUpdate failed", e);
-        }
-    }
-
-    /**
-     * Invokes doInsert(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doInsert(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            persistentPeerClass
-                .getMethod("doInsert", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doInsert failed", e);
-        }
-    }
-
-    /**
-     * Invokes doSelect(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @return A List of Permission Objects selected by the Criteria
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static List doSelect(Criteria criteria)
-        throws TorqueException
-    {
-        List list;
-
-        try
-        {
-            Class[] clazz =
-              new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            list = (List) persistentPeerClass
-                .getMethod("doSelect", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doSelect failed", e);
-        }
-
-        List newList = new ArrayList(list.size());
-
-        //
-        // Wrap the returned Objects into TorquePermissions.
-        //
-        for (Iterator it = list.iterator(); it.hasNext(); )
-        {
-            Permission p = getNewPermission((Persistent) it.next());
-            newList.add(p);
-        }
-
-        return newList;
-    }
-
-    /**
-     * Invokes doDelete(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static void doDelete(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            persistentPeerClass
-                .getMethod("doDelete", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doDelete failed", e);
-        }
-    }
-
-    /**
-     * Invokes setName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param name The Name to set
-     */
-    public static void setPermissionName(Persistent obj, String name)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { name };
-            namePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Permission Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getName() on the supplied base object
-     *
-     * @param obj The object to use for getting the name
-     *
-     * @return A string containing the name
-     */
-    public static String getPermissionName(Persistent obj)
-    {
-        String name = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            name = (String) namePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Permission Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return name;
-    }
-
-    /**
-     * Invokes setId(int n) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param id The new Id
-     */
-    public static void setId(Persistent obj, int id)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { Integer.TYPE };
-            idPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Permission Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getId() on the supplied base object
-     *
-     * @param obj The object to use for getting the id
-     *
-     * @return The Id of this object
-     */
-    public static Integer getIdAsObj(Persistent obj)
-    {
-        Integer id = null;
-
-        if(obj == null)
-        {
-            return new Integer(0);
-        }
-
-        try
-        {
-            id = (Integer) idPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Permission Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return id;
-    }
-
-    /**
-     * Returns the Class of the configured Object class
-     * from the peer
-     *
-     * @return The class of the objects returned by the configured peer
-     *
-     */
-
-    private static Class getPersistenceClass()
-    {
-        Class persistenceClass = null;
-
-        try
-        {
-            Object[] params = new Object[0];
-
-            persistenceClass =  (Class) persistentPeerClass
-                .getMethod("getOMClass", null)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            persistenceClass = null;
-        }
-
-        return persistenceClass;
-    }
-
-    /**
-     * Returns a new, configured Permission Object with
-     * a supplied Persistent object at its core
-     *
-     * @param p The persistent object
-     *
-     * @return a new, configured Permission Object
-     *
-     * @exception Exception Could not create a new Object
-     *
-     */
-
-    public static Permission getNewPermission(Persistent p)
-    {
-        Permission perm = null;
-        try
-        {
-            Class permissionWrapperClass = TurbineSecurity.getPermissionClass();
-
-            Class [] clazz = new Class [] { Persistent.class };
-            Object [] params = new Object [] { p };
-
-            perm = (Permission) permissionWrapperClass
-              .getConstructor(clazz)
-              .newInstance(params);
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a new permission from supplied persistent: ", e);
-        }
-
-        return perm;
-    }
-}
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManagerConstants.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManagerConstants.java
deleted file mode 100644
index c991651..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/PermissionPeerManagerConstants.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.security.torque.om.TurbinePermissionPeer;
-
-/**
- * Constants for configuring the various columns and bean properties
- * for the used peer.
- *
- * <pre>
- * Default is:
- *
- * security.torque.permissionPeer.class = org.apache.turbine.services.security.torque.om.TurbinePermissionPeer
- * security.torque.permissionPeer.column.name       = PERMISSION_NAME
- * security.torque.permissionPeer.column.id         = PERMISSION_ID
- *
- * security.torque.permission.class = org.apache.turbine.services.security.torque.om.TurbinePermission
- * security.torque.permission.property.name       = Name
- * security.torque.permission.property.id         = PermissionId
- *
- * </pre>
- * If security.torque.permission.class is unset, then the value of the constant CLASSNAME_DEFAULT
- * from the configured Peer is used.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface PermissionPeerManagerConstants
-{
-    /** The key within the security service properties for the permission class implementation */
-    String PERMISSION_CLASS_KEY =
-        "torque.permission.class";
-
-    /** The key within the security service properties for the permission peer class implementation */
-    String PERMISSION_PEER_CLASS_KEY =
-        "torque.permissionPeer.class";
-
-    /** Permission peer default class */
-    String PERMISSION_PEER_CLASS_DEFAULT =
-        TurbinePermissionPeer.class.getName();
-
-    /** The column name for the login name field. */
-    String PERMISSION_NAME_COLUMN_KEY =
-        "torque.permissionPeer.column.name";
-
-    /** The column name for the id field. */
-    String PERMISSION_ID_COLUMN_KEY =
-        "torque.permissionPeer.column.id";
-
-
-    /** The default value for the column name constant for the login name field. */
-    String PERMISSION_NAME_COLUMN_DEFAULT =
-        "PERMISSION_NAME";
-
-    /** The default value for the column name constant for the id field. */
-    String PERMISSION_ID_COLUMN_DEFAULT =
-        "PERMISSION_ID";
-
-
-    /** The property name of the bean property for the login name field. */
-    String PERMISSION_NAME_PROPERTY_KEY =
-        "torque.permission.property.name";
-
-    /** The property name of the bean property for the id field. */
-    String PERMISSION_ID_PROPERTY_KEY =
-        "torque.permission.property.id";
-
-
-    /** The default value of the bean property for the login name field. */
-    String PERMISSION_NAME_PROPERTY_DEFAULT =
-        "Name";
-
-    /** The default value of the bean property for the id field. */
-    String PERMISSION_ID_PROPERTY_DEFAULT =
-        "PermissionId";
-
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManager.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManager.java
deleted file mode 100644
index a4a4f19..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManager.java
+++ /dev/null
@@ -1,743 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.PropertyDescriptor;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.torque.om.TurbineUserGroupRolePeer;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.RoleSet;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-
-/**
- * This class capsulates all direct Peer access for the Role entities.
- * It allows the exchange of the default Turbine supplied TurbineRolePeer
- * class against a custom class
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public class RolePeerManager
-    implements RolePeerManagerConstants
-{
-    /** The class of the Peer the TorqueSecurityService uses */
-    private static Class rolePeerClass = null;
-
-    /** The class name of the objects returned by the configured peer. */
-    private static Class roleObject = null;
-
-    /** The name of the Table used for Role Object queries  */
-    private static String tableName = null;
-
-    /** The name of the column used as "Name" Column */
-    private static String nameColumn = null;
-
-    /** The name of the column used as "Id" Column */
-    private static String idColumn = null;
-
-    /** The "Name" property descriptor */
-    private static PropertyDescriptor namePropDesc = null;
-
-    /** The "Id" property descriptor */
-    private static PropertyDescriptor idPropDesc = null;
-
-    /** Logging */
-    static Log log = LogFactory.getLog(RolePeerManager.class);
-
-    /**
-     * Initializes the RolePeerManager, loading the class object for the
-     * Peer used to retrieve Role objects
-     *
-     * @param conf The configuration object used to configure the Manager
-     *
-     * @exception InitializationException A problem occured during
-     *            initialization
-     */
-
-    public static void init(Configuration conf)
-        throws InitializationException
-    {
-        String rolePeerClassName = conf.getString(ROLE_PEER_CLASS_KEY,
-                                                  ROLE_PEER_CLASS_DEFAULT);
-
-        String roleObjectName = null;
-
-        try
-        {
-            rolePeerClass = Class.forName(rolePeerClassName);
-
-            tableName  =
-              (String) rolePeerClass.getField("TABLE_NAME").get(null);
-
-            //
-            // We have either an user configured Object class or we use the
-            // default as supplied by the Peer class
-            //
-
-            // Default from Peer, can be overridden
-
-            roleObject = getPersistenceClass();
-
-            roleObjectName = conf.getString(ROLE_CLASS_KEY, 
-                    roleObject.getName());
-
-            // Maybe the user set a new value...
-            roleObject = Class.forName(roleObjectName);
-
-            /* If any of the following Field queries fails, the role
-             * subsystem is unusable. So check this right here at init time,
-             * which saves us much time and hassle if it fails...
-             */
-
-            nameColumn = (String) rolePeerClass.getField(
-                    conf.getString(ROLE_NAME_COLUMN_KEY,
-                                   ROLE_NAME_COLUMN_DEFAULT)
-                    ).get(null);
-
-            idColumn = (String) rolePeerClass.getField(
-                    conf.getString(ROLE_ID_COLUMN_KEY,
-                                   ROLE_ID_COLUMN_DEFAULT)
-                    ).get(null);
-
-            namePropDesc = new PropertyDescriptor(
-                    conf.getString(ROLE_NAME_PROPERTY_KEY,
-                                   ROLE_NAME_PROPERTY_DEFAULT),
-                    roleObject);
-
-            idPropDesc = new PropertyDescriptor(
-                    conf.getString(ROLE_ID_PROPERTY_KEY,
-                                   ROLE_ID_PROPERTY_DEFAULT),
-                    roleObject);
-
-        }
-        catch (Exception e)
-        {
-            if (rolePeerClassName == null || rolePeerClass == null)
-            {
-                throw new InitializationException(
-                    "Could not find RolePeer class ("
-                    + rolePeerClassName + ")", e);
-            }
-            if (tableName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the table name from the Peer object", e);
-            }
-
-            if (roleObject == null || roleObjectName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the object type from the Peer object", e);
-            }
-
-
-            if (nameColumn == null || namePropDesc == null)
-            {
-                throw new InitializationException(
-                    "RolePeer " + rolePeerClassName
-                    + " has no name column information!", e);
-            }
-            if (idColumn == null || idPropDesc == null)
-            {
-                throw new InitializationException(
-                    "RolePeer " + rolePeerClassName
-                    + " has no id column information!", e);
-            }
-        }
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return tableName;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Name Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getNameColumn()
-    {
-        return nameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Id Column for a role
-     *
-     * @return A String containing the column id
-     */
-    public static String getIdColumn()
-    {
-        return idColumn;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name The column to fully qualify
-     *
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(getTableName());
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Returns a new, empty object for the underlying peer.
-     * Used to create a new underlying object
-     *
-     * @return A new object which is compatible to the Peer
-     *         and can be used as a User object
-     *
-     */
-
-    public static Persistent newPersistentInstance()
-    {
-        Persistent obj = null;
-
-        if(roleObject == null)
-        {
-            // This can happen if the Turbine wants to determine the
-            // name of the anonymous user before the security service
-            // has been initialized. In this case, the Peer Manager
-            // has not yet been inited and the roleObject is still
-            // null. Return null in this case.
-            //
-            return obj;
-        }
-
-        try
-        {
-            obj = (Persistent) roleObject.newInstance();
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a role object", e);
-            obj = null;
-        }
-        return obj;
-    }
-
-    /**
-     * Retrieves/assembles a RoleSet based on the Criteria passed in
-     *
-     * @param criteria A criteria containing a pre-assembled set of criterias
-     *         for the RoleSet
-     *
-     * @return A Set of roles which fulfil the required criterias
-     *
-     * @exception Exception A generic exception.
-     *
-     */
-    public static RoleSet retrieveSet(Criteria criteria)
-        throws Exception
-    {
-        List results = doSelect(criteria);
-        RoleSet rs = new RoleSet();
-
-        for(Iterator it = results.iterator(); it.hasNext(); )
-        {
-            rs.add((Role) it.next());
-        }
-        return rs;
-    }
-
-    /**
-     * Retrieves a set of Roles that an User was assigned in a Group
-     *
-     * @param user An user object
-     * @param group A group object
-     *
-     * @return A Set of Roles of this User in the Group
-     *
-     * @exception Exception A generic exception.
-     */
-    public static RoleSet retrieveSet(User user, Group group)
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.add(UserPeerManager.getNameColumn(),
-                     user.getName());
-
-        criteria.add(TurbineUserGroupRolePeer.GROUP_ID,
-                     ((Persistent) group).getPrimaryKey());
-
-        criteria.addJoin(UserPeerManager.getIdColumn(),
-                         TurbineUserGroupRolePeer.USER_ID);
-
-        criteria.addJoin(TurbineUserGroupRolePeer.ROLE_ID, getIdColumn());
-
-        return retrieveSet(criteria);
-    }
-
-    /**
-     * Checks if a Role is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param role The Role to be checked.
-     * @return <code>true</code> if given Role exists in the system.
-     * @throws DataBackendException when more than one Role with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    public static boolean checkExists(Role role)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.addSelectColumn(getIdColumn());
-
-        criteria.add(getNameColumn(), role.getName());
-
-        List results = BasePeer.doSelect(criteria);
-
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple roles named '" +
-                                           role.getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * WARNING! Do not read on if you have a weak stomach. What follows here
-     * are some abominations thanks to the braindead static peers of Torque
-     * and the rigidity of Java....
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Calls buildCriteria(Role role) in the configured RolePeer. If you get
-     * a ClassCastException in this routine, you put a Role object into this
-     * method which can't be cast into an object for the TorqueSecurityService. This is a
-     * configuration error most of the time.
-     *
-     * @param role An object which implements the Role interface
-     *
-     * @return A criteria for the supplied role object
-     */
-
-    public static Criteria buildCriteria(Role role)
-    {
-        Criteria crit;
-
-        try
-        {
-            Class[] clazz = new Class[] { roleObject };
-            Object[] params =
-                new Object[] { ((TorqueRole) role).getPersistentObj() };
-
-            crit =  (Criteria) rolePeerClass
-                .getMethod("buildCriteria", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            crit = null;
-        }
-
-        return crit;
-    }
-
-    /**
-     * Invokes doUpdate(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            rolePeerClass
-                .getMethod("doUpdate", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doUpdate failed", e);
-        }
-    }
-
-    /**
-     * Invokes doInsert(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doInsert(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            rolePeerClass
-                .getMethod("doInsert", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doInsert failed", e);
-        }
-    }
-
-    /**
-     * Invokes doSelect(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @return A List of Role Objects selected by the Criteria
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static List doSelect(Criteria criteria)
-        throws TorqueException
-    {
-        List list;
-
-        try
-        {
-            Class[] clazz =
-                new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            list = (List) rolePeerClass
-                .getMethod("doSelect", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doSelect failed", e);
-        }
-        List newList = new ArrayList(list.size());
-
-        //
-        // Wrap the returned Objects into TorqueRoles.
-        //
-        for (Iterator it = list.iterator(); it.hasNext(); )
-        {
-            Role r = getNewRole((Persistent) it.next());
-            newList.add(r);
-        }
-
-        return newList;
-    }
-
-    /**
-     * Invokes doDelete(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static void doDelete(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            rolePeerClass
-                .getMethod("doDelete", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doDelete failed", e);
-        }
-    }
-
-    /**
-     * Invokes setName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param name The Name to set
-     *
-     */
-    public static void setRoleName(Persistent obj, String name)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { name };
-            namePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Role Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getName() on the supplied base object
-     *
-     * @param obj The object to use for getting the name
-     *
-     * @return A string containing the name
-     */
-    public static String getRoleName(Persistent obj)
-    {
-        String name = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            name = (String) namePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Role Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return name;
-    }
-
-    /**
-     * Invokes setId(int n) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param id The new Id
-     */
-    public static void setId(Persistent obj, int id)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { Integer.TYPE };
-            idPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Role Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getId() on the supplied base object
-     *
-     * @param obj The object to use for getting the id
-     *
-     * @return The Id of this object
-     */
-    public static Integer getIdAsObj(Persistent obj)
-    {
-        Integer id = null;
-
-        if(obj == null)
-        {
-            return new Integer(0);
-        }
-
-        try
-        {
-            id = (Integer) idPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be a Role Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return id;
-    }
-
-    /**
-     * Returns the Class of the configured Object class
-     * from the peer
-     *
-     * @return The class of the objects returned by the configured peer
-     */
-
-    private static Class getPersistenceClass()
-    {
-        Class persistenceClass = null;
-
-        try
-        {
-            Object[] params = new Object[0];
-
-            persistenceClass =  (Class) rolePeerClass
-                .getMethod("getOMClass", null)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            persistenceClass = null;
-        }
-
-        return persistenceClass;
-    }
-
-
-    /**
-     * Returns a new, configured Role Object with
-     * a supplied Persistent object at its core
-     *
-     * @param p The persistent object
-     *
-     * @return a new, configured Role Object
-     *
-     * @exception Exception Could not create a new Object
-     *
-     */
-
-    public static Role getNewRole(Persistent p)
-    {
-        Role r = null;
-        try
-        {
-            Class roleWrapperClass = TurbineSecurity.getRoleClass();
-
-            Class [] clazz = new Class [] { Persistent.class };
-            Object [] params = new Object [] { p };
-
-            r = (Role) roleWrapperClass
-                .getConstructor(clazz)
-                .newInstance(params);
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a new role from supplied persistent: ", e);
-        }
-
-        return r;
-    }
-}
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManagerConstants.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManagerConstants.java
deleted file mode 100644
index 94febd0..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/RolePeerManagerConstants.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.security.torque.om.TurbineRolePeer;
-
-/**
- * Constants for configuring the various columns and bean properties
- * for the used peer.
- *
- * <pre>
- * Default is:
- *
- * security.torque.rolePeer.class = org.apache.turbine.services.security.torque.om.TurbineRolePeer
- * security.torque.rolePeer.column.name       = ROLE_NAME
- * security.torque.rolePeer.column.id         = ROLE_ID
- *
- * security.torque.role.class = org.apache.turbine.services.security.torque.om.TurbineRole
- * security.torque.role.property.name       = Name
- * security.torque.role.property.id         = RoleId
- *
- * </pre>
- * If security.torque.role.class is unset, then the value of the constant CLASSNAME_DEFAULT
- * from the configured Peer is used.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface RolePeerManagerConstants
-{
-    /** The key within the security service properties for the role class implementation */
-    public static final String ROLE_CLASS_KEY =
-        "torque.role.class";
-
-    /** The key within the security service properties for the role peer class implementation */
-    public static final String ROLE_PEER_CLASS_KEY =
-        "torque.rolePeer.class";
-
-    /** Role peer default class */
-    public static final String ROLE_PEER_CLASS_DEFAULT =
-            TurbineRolePeer.class.getName();
-
-    /** The column name for the login name field. */
-    public static final String ROLE_NAME_COLUMN_KEY =
-        "torque.rolePeer.column.name";
-
-    /** The column name for the id field. */
-    public static final String ROLE_ID_COLUMN_KEY =
-        "torque.rolePeer.column.id";
-
-
-    /** The default value for the column name constant for the login name field. */
-    public static final String ROLE_NAME_COLUMN_DEFAULT =
-        "ROLE_NAME";
-
-    /** The default value for the column name constant for the id field. */
-    public static final String ROLE_ID_COLUMN_DEFAULT =
-        "ROLE_ID";
-
-
-    /** The property name of the bean property for the login name field. */
-    public static final String ROLE_NAME_PROPERTY_KEY =
-        "torque.role.property.name";
-
-    /** The property name of the bean property for the id field. */
-    public static final String ROLE_ID_PROPERTY_KEY =
-        "torque.role.property.id";
-
-
-    /** The default value of the bean property for the login name field. */
-    public static final String ROLE_NAME_PROPERTY_DEFAULT =
-        "Name";
-
-    /** The default value of the bean property for the id field. */
-    public static final String ROLE_ID_PROPERTY_DEFAULT =
-        "RoleId";
-
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueGroup.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueGroup.java
deleted file mode 100644
index 7911693..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueGroup.java
+++ /dev/null
@@ -1,323 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-
-import org.apache.torque.om.Persistent;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a Group of Users in the system that are associated
- * with specific entity or resource. The users belonging to the Group may
- * have various Roles. The Permissions to perform actions upon the resource
- * depend on the Roles in the Group that they are assigned. It is separated
- * from the actual Torque peer object to be able to replace the Peer with an
- * user supplied Peer (and Object)
- *
- * <a name="global">
- * <p> Certain Roles that the Users may have in the system are not related
- * to any specific resource nor entity.
- * They are assigned within a special group named 'global' that can be
- * referenced in the code as {@link #GLOBAL_GROUP_NAME}.
- * <br>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TorqueGroup
-    extends TorqueObject
-    implements Group,
-               Comparable,
-               Persistent
-{
-    /**
-     * Constructs a new Group.
-     */
-    public TorqueGroup()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new Group with the specified name.
-     *
-     * @param name The name of the new object.
-     */
-
-    public TorqueGroup(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * The package private Constructor is used when the GroupPeerManager
-     * has retrieved a list of Database Objects from the peer and
-     * must 'wrap' them into TorqueGroup Objects.
-     * You should not use it directly!
-     *
-     * @param obj An Object from the peer
-     */
-    public TorqueGroup(Persistent obj)
-    {
-        super(obj);
-    }
-
-    /**
-     * Returns the underlying Object for the Peer
-     *
-     * Used in the GroupPeerManager when building a new Criteria.
-     *
-     * @return The underlying persistent object
-     *
-     */
-
-    public Persistent getPersistentObj()
-    {
-        if (obj == null)
-        {
-            obj = GroupPeerManager.newPersistentInstance();
-        }
-        return obj;
-    }
-
-    /**
-     * Returns the name of this object.
-     *
-     * @return The name of the object.
-     */
-    public String getName()
-    {
-        return GroupPeerManager.getGroupName(getPersistentObj());
-    }
-
-    /**
-     * Sets the name of this object.
-     *
-     * @param name The name of the object.
-     */
-    public void setName(String name)
-    {
-        GroupPeerManager.setGroupName(getPersistentObj(), name);
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public int getId()
-    {
-        return GroupPeerManager.getIdAsObj(getPersistentObj()).intValue();
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public Integer getIdAsObj()
-    {
-        return GroupPeerManager.getIdAsObj(getPersistentObj());
-    }
-
-    /**
-     * Sets the Id of this object
-     *
-     * @param id The new Id
-     */
-    public void setId(int id)
-    {
-        GroupPeerManager.setId(getPersistentObj(), id);
-    }
-
-    /**
-     * Provides a reference to the Group object that represents the
-     * <a href="#global">global group</a>.
-     *
-     * @return a Group object that represents the global group.
-     * @deprecated Please use the method in TurbineSecurity now.
-     */
-    public static Group getGlobalGroup()
-    {
-        return TurbineSecurity.getGlobalGroup();
-    }
-
-    /**
-     * Creates a new Group in the system.
-     *
-     * @param name The name of the new Group.
-     * @return An object representing the new Group.
-     * @throws TurbineSecurityException if the Group could not be created.
-     * @deprecated Please use the createGroup method in TurbineSecurity now.
-     */
-    public static Group create(String name)
-        throws TurbineSecurityException
-    {
-        return TurbineSecurity.createGroup(name);
-    }
-
-    // These following methods are wrappers around TurbineSecurity
-
-    /**
-     * Makes changes made to the Group attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public void save()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.saveGroup(this);
-    }
-
-    /**
-     * Removes a group from the system.
-     *
-     * @throws TurbineSecurityException if the Group could not be removed.
-     */
-    public void remove()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.removeGroup(this);
-    }
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Group name.
-     * @throws TurbineSecurityException if the Group could not be renamed.
-     */
-    public void rename(String name)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.renameGroup(this, name);
-    }
-
-    /**
-     * Grants a Role in this Group to an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Role.
-     */
-    public void grant(User user, Role role)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.grant(user, this, role);
-    }
-
-    /**
-     * Grants Roles in this Group to an User.
-     *
-     * @param user An User.
-     * @param roleSet A RoleSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Roles.
-     */
-    public void grant(User user, RoleSet roleSet)
-        throws TurbineSecurityException
-    {
-        Iterator roles = roleSet.iterator();
-        while (roles.hasNext())
-        {
-            TurbineSecurity.grant(user, this, (Role) roles.next());
-        }
-    }
-
-    /**
-     * Revokes a Role in this Group from an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Role.
-     */
-    public void revoke(User user, Role role)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.revoke(user, this, role);
-    }
-
-    /**
-     * Revokes Roles in this group from an User.
-     *
-     * @param user An User.
-     * @param roleSet a RoleSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Roles.
-     */
-    public void revoke(User user, RoleSet roleSet)
-        throws TurbineSecurityException
-    {
-        Iterator roles = roleSet.iterator();
-        while (roles.hasNext())
-        {
-            TurbineSecurity.revoke(user, this, (Role) roles.next());
-        }
-    }
-
-}
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueObject.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueObject.java
deleted file mode 100644
index 654d6be..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueObject.java
+++ /dev/null
@@ -1,344 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-
-import org.apache.torque.om.ObjectKey;
-import org.apache.torque.om.Persistent;
-
-import org.apache.turbine.om.security.SecurityEntity;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * All the Torque Security objects (User, Group, Role, Permission) are
- * derived from this class which contains the base compare and management
- * methods for all security objects.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class TorqueObject
-    implements SecurityEntity,
-               Comparable,
-               Persistent
-{
-    /** The underlying database Object which is proxied */
-    protected Persistent obj = null;
-
-    /**
-     * Constructs a new TorqueObject
-     *
-     */
-    public TorqueObject()
-    {
-    }
-
-    /**
-     * Constructs a new Object with the specified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TorqueObject(String name)
-    {
-        this.setName(name);
-    }
-
-    /**
-     * This Constructor is used when a Manager
-     * has retrieved a list of Database Objects from the peer and
-     * must 'wrap' them into TorqueObjects.
-     *
-     * @param obj An Object from the peer
-     */
-   public  TorqueObject(Persistent obj)
-    {
-        this.obj = obj;
-    }
-
-    /**
-     * Returns the underlying Object for the Peer
-     *
-     * @return The underlying persistent object
-     *
-     */
-    public abstract Persistent getPersistentObj();
-
-    /**
-     * Returns the name of this object
-     *
-     * @return The name of the object
-     */
-    public abstract String getName();
-
-    /**
-     * Sets the name of this object
-     *
-     * @param name The name of the object
-     */
-    public abstract void setName(String name);
-
-    /**
-     * getter for the object primaryKey.
-     *
-     * @return the object primaryKey as an Object
-     */
-    public ObjectKey getPrimaryKey()
-    {
-        Persistent p = getPersistentObj();
-        if(p != null)
-        {
-            return p.getPrimaryKey();
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Sets the PrimaryKey for the object.
-     *
-     * @param primaryKey The new PrimaryKey for the object.
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void setPrimaryKey(ObjectKey primaryKey)
-        throws Exception
-    {
-        getPersistentObj().setPrimaryKey(primaryKey);
-    }
-
-    /**
-     * Sets the PrimaryKey for the object.
-     *
-     * @param primaryKey the String should be of the form produced by
-     *        ObjectKey.toString().
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void setPrimaryKey(String primaryKey)
-        throws Exception
-    {
-        getPersistentObj().setPrimaryKey(primaryKey);
-    }
-
-    /**
-     * Returns whether the object has been modified, since it was
-     * last retrieved from storage.
-     *
-     * @return True if the object has been modified.
-     */
-    public boolean isModified()
-    {
-        return getPersistentObj().isModified();
-    }
-
-    /**
-     * Returns whether the object has ever been saved.  This will
-     * be false, if the object was retrieved from storage or was created
-     * and then saved.
-     *
-     * @return true, if the object has never been persisted.
-     */
-    public boolean isNew()
-    {
-        return getPersistentObj().isNew();
-    }
-
-    /**
-     * Setter for the isNew attribute.  This method will be called
-     * by Torque-generated children and Peers.
-     *
-     * @param b the state of the object.
-     */
-    public void setNew(boolean b)
-    {
-        getPersistentObj().setNew(b);
-    }
-
-    /**
-     * Sets the modified state for the object.
-     *
-     * @param m The new modified state for the object.
-     */
-    public void setModified(boolean m)
-    {
-        getPersistentObj().setModified(m);
-    }
-
-    /**
-     * Stores the object in the database.  If the object is new,
-     * it inserts it; otherwise an update is performed.
-     *
-     * @param torqueName The name under which the object should be stored.
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void save(String torqueName)
-        throws Exception
-    {
-        getPersistentObj().save(torqueName);
-    }
-
-    /**
-     * Stores the object in the database.  If the object is new,
-     * it inserts it; otherwise an update is performed.  This method
-     * is meant to be used as part of a transaction, otherwise use
-     * the save() method and the connection details will be handled
-     * internally
-     *
-     * @param con A Connection object to save the object
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void save(Connection con)
-        throws Exception
-    {
-        getPersistentObj().save(con);
-    }
-
-    /**
-     * Makes changes made to the TorqueObject permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public abstract void save()
-        throws TurbineSecurityException;
-
-    /**
-     * Used for ordering TorqueObjects.
-     *
-     * @param obj The Object to compare to.
-     * @return -1 if the name of the other object is lexically greater than this
-     *         group, 1 if it is lexically lesser, 0 if they are equal.
-     */
-    public int compareTo(Object obj)
-    {
-        if (this.getClass() != obj.getClass())
-        {
-            throw new ClassCastException();
-        }
-        String name1 = ((SecurityEntity) obj).getName();
-        String name2 = this.getName();
-
-        return name2.compareTo(name1);
-    }
-
-    /**
-     * Compares this with another <code>BaseObject</code> instance.  If
-     * <code>obj</code> is an instance of <code>BaseObject</code>, delegates to
-     * <code>equals(BaseObject)</code>.  Otherwise, returns <code>false</code>.
-     *
-     * @param obj The object to compare to.
-     * @return    Whether equal to the object specified.
-     */
-    public boolean equals(Object obj)
-    {
-        if (obj != null && obj instanceof TorqueObject)
-        {
-            return equals((TorqueObject) obj);
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Compares the primary key of this instance with the key of another.
-     *
-     * @param torqueObject The TorqueObject to compare to.
-     * @return   Whether the primary keys are equal.
-     */
-    public boolean equals(TorqueObject torqueObject)
-    {
-        if (torqueObject == null)
-        {
-            return false;
-        }
-        if (this == torqueObject)
-        {
-            return true;
-        }
-        else if (getPrimaryKey() == null || torqueObject.getPrimaryKey() == null)
-        {
-            return false;
-        }
-        else
-        {
-            return getPrimaryKey().equals(torqueObject.getPrimaryKey());
-        }
-    }
-
-    /**
-     * If the primary key is not <code>null</code>, return the hashcode of the
-     * primary key.  Otherwise calls <code>Object.hashCode()</code>.
-     *
-     * @return an <code>int</code> value
-     */
-    public int hashCode()
-    {
-        ObjectKey ok = getPrimaryKey();
-        if (ok == null)
-        {
-            return super.hashCode();
-        }
-
-        return ok.hashCode();
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorquePermission.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorquePermission.java
deleted file mode 100644
index 98ba13f..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorquePermission.java
+++ /dev/null
@@ -1,233 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.torque.om.Persistent;
-
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a permission given to a Role associated with the
- * current Session. It is separated from the actual Torque peer object
- * to be able to replace the Peer with an user supplied Peer (and Object)
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TorquePermission
-    extends TorqueObject
-    implements Permission,
-               Comparable,
-               Persistent
-{
-    /**
-     * Constructs a Permission
-     */
-    public TorquePermission()
-    {
-      super();
-    }
-
-    /**
-     * Constructs a new Permission with the sepcified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TorquePermission(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * The package private Constructor is used when the PermissionPeerManager
-     * has retrieved a list of Database Objects from the peer and
-     * must 'wrap' them into TorquePermission Objects.
-     * You should not use it directly!
-     *
-     * @param obj An Object from the peer
-     */
-
-    public TorquePermission(Persistent obj)
-    {
-        super(obj);
-    }
-
-    /**
-     * Returns the underlying Object for the Peer
-     *
-     * Used in the PermissionPeerManager when building a new Criteria.
-     *
-     * @return The underlying Persistent Object
-     *
-     */
-
-    public Persistent getPersistentObj()
-    {
-        if (obj == null)
-        {
-            obj = PermissionPeerManager.newPersistentInstance();
-        }
-        return obj;
-    }
-
-    /**
-     * Returns the name of this object.
-     *
-     * @return The name of the object.
-     */
-    public String getName()
-    {
-        return PermissionPeerManager.getPermissionName(getPersistentObj());
-    }
-
-    /**
-     * Sets the name of this object.
-     *
-     * @param name The name of the object.
-     */
-    public void setName(String name)
-    {
-        PermissionPeerManager.setPermissionName(getPersistentObj(), name);
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public int getId()
-    {
-        return PermissionPeerManager.getIdAsObj(getPersistentObj()).intValue();
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public Integer getIdAsObj()
-    {
-        return PermissionPeerManager.getIdAsObj(getPersistentObj());
-    }
-
-    /**
-     * Sets the Id of this object
-     *
-     * @param id The new Id
-     */
-    public void setId(int id)
-    {
-        PermissionPeerManager.setId(getPersistentObj(), id);
-    }
-
-    /**
-     * Creates a new Permission in the system.
-     *
-     * @param name The name of the new Permission.
-     * @return An object representing the new Permission.
-     * @throws TurbineSecurityException if the Permission could not be created.
-     * @deprecated Please use the createPermission method in TurbineSecurity.
-     */
-    public static Permission create(String name)
-        throws TurbineSecurityException
-    {
-        return TurbineSecurity.createPermission(name);
-    }
-
-    /**
-     * Makes changes made to the Permission attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public void save()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.savePermission(this);
-    }
-
-    /**
-     * Removes a permission from the system.
-     *
-     * @throws TurbineSecurityException if the Permission could not be removed.
-     */
-    public void remove()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.removePermission(this);
-    }
-
-    /**
-     * Renames the permission.
-     *
-     * @param name The new Permission name.
-     * @throws TurbineSecurityException if the Permission could not be renamed.
-     */
-    public void rename(String name)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.renamePermission(this, name);
-    }
-}
-
-
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueRole.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueRole.java
deleted file mode 100644
index dc4392c..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueRole.java
+++ /dev/null
@@ -1,318 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-import org.apache.torque.om.Persistent;
-
-/**
- * This class represents a role played by the User associated with the
- * current Session. It is separated from the actual Torque peer object
- * to be able to replace the Peer with an user supplied Peer (and Object)
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TorqueRole
-    extends TorqueObject
-    implements Role,
-               Comparable,
-               Persistent
-{
-    /** The permissions for this role. */
-    private PermissionSet permissionSet = null;
-
-    /**
-     * Constructs a new Role
-     */
-    public TorqueRole()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new Role with the specified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TorqueRole(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * The package private Constructor is used when the RolePeerManager
-     * has retrieved a list of Database Objects from the peer and
-     * must 'wrap' them into TorqueRole Objects. You should not use it directly!
-     *
-     * @param obj An Object from the peer
-     */
-    public TorqueRole(Persistent obj)
-    {
-        super(obj);
-    }
-
-    /**
-     * Returns the underlying Object for the Peer
-     *
-     * Used in the RolePeerManager when building a new Criteria.
-     *
-     * @return The underlying persistent object
-     *
-     */
-
-    public Persistent getPersistentObj()
-    {
-        if (obj == null)
-        {
-            obj = RolePeerManager.newPersistentInstance();
-        }
-        return obj;
-    }
-
-    /**
-     * Returns the name of this role.
-     *
-     * @return The name of the role.
-     */
-    public String getName()
-    {
-        return RolePeerManager.getRoleName(getPersistentObj());
-    }
-
-    /**
-     * Sets the name of this Role
-     *
-     * @param name The name of the role.
-     */
-    public void setName(String name)
-    {
-        RolePeerManager.setRoleName(getPersistentObj(), name);
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public int getId()
-    {
-        return RolePeerManager.getIdAsObj(getPersistentObj()).intValue();
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public Integer getIdAsObj()
-    {
-        return RolePeerManager.getIdAsObj(getPersistentObj());
-    }
-
-    /**
-     * Sets the Id of this object
-     *
-     * @param id The new Id
-     */
-    public void setId(int id)
-    {
-        RolePeerManager.setId(getPersistentObj(), id);
-    }
-    /**
-     * Returns the set of Permissions associated with this Role.
-     *
-     * @return A PermissionSet.
-     *
-     * @exception Exception a generic exception.
-     */
-    public PermissionSet getPermissions()
-        throws Exception
-    {
-        return permissionSet;
-    }
-
-    /**
-     * Sets the Permissions associated with this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     */
-    public void setPermissions(PermissionSet permissionSet)
-    {
-        this.permissionSet = permissionSet;
-    }
-
-    // These following methods are wrappers around TurbineSecurity
-
-    /**
-     * Creates a new Role in the system.
-     *
-     * @param name The name of the new Role.
-     * @return An object representing the new Role.
-     * @throws TurbineSecurityException if the Role could not be created.
-     */
-    public Role create(String name)
-        throws TurbineSecurityException
-    {
-        return TurbineSecurity.createRole(name);
-    }
-
-    /**
-     * Makes changes made to the Role attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public void save()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.saveRole(this);
-    }
-
-    /**
-     * Removes a role from the system.
-     *
-     * @throws TurbineSecurityException if the Role could not be removed.
-     */
-    public void remove()
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.removeRole(this);
-    }
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Role name.
-     * @throws TurbineSecurityException if the Role could not be renamed.
-     */
-    public void rename(String name)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.renameRole(this, name);
-    }
-
-    /**
-     * Grants a Permission to this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permission.
-     */
-    public void grant(Permission permission)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.grant(this, permission);
-    }
-
-    /**
-     * Grants Permissions from a PermissionSet to this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permissions.
-     */
-    public void grant(PermissionSet permissionSet)
-        throws TurbineSecurityException
-    {
-        Iterator permissions = permissionSet.iterator();
-        while (permissions.hasNext())
-        {
-            TurbineSecurity.grant(this, (Permission) permissions.next());
-        }
-    }
-
-    /**
-     * Revokes a Permission from this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permission.
-     */
-    public void revoke(Permission permission)
-        throws TurbineSecurityException
-    {
-        TurbineSecurity.revoke(this, permission);
-    }
-
-    /**
-     * Revokes Permissions from a PermissionSet from this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permissions.
-     */
-    public void revoke(PermissionSet permissionSet)
-        throws TurbineSecurityException
-    {
-        Iterator permissions = permissionSet.iterator();
-        while (permissions.hasNext())
-        {
-            TurbineSecurity.revoke(this, (Permission) permissions.next());
-        }
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueSecurityService.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueSecurityService.java
deleted file mode 100644
index 486c85e..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueSecurityService.java
+++ /dev/null
@@ -1,1193 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.om.NumberKey;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.BaseSecurityService;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.torque.om.TurbineRolePermissionPeer;
-import org.apache.turbine.services.security.torque.om.TurbineUserGroupRolePeer;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An implementation of SecurityService that uses torque objects.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @version $Id$
- */
-public class TorqueSecurityService
-    extends BaseSecurityService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TorqueSecurityService.class);
-
-    /**
-     * Initializes the TorqueSecurityService, loading the various class objects
-     * representing the security entity peer classes
-     *
-     * @exception InitializationException A problem occured during initialization
-     */
-
-    public void init()
-        throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        GroupPeerManager.init(conf);
-        RolePeerManager.init(conf);
-        PermissionPeerManager.init(conf);
-
-        /* At the end, because it calls setInit(true)! */
-        super.init();
-    }
-
-
-    /*-----------------------------------------------------------------------
-      Creation of AccessControlLists
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * This method creates a snapshot of the state of security information
-     * concerning this user, at the moment of invocation and stores it
-     * into an AccessControlList object.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @return A new AccessControlList object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    public AccessControlList getACL(User user)
-        throws DataBackendException, UnknownEntityException
-    {
-        if (!TurbineSecurity.accountExists(user))
-        {
-            throw new UnknownEntityException("The account '"
-                                             + user.getName() + "' does not exist");
-        }
-        try
-        {
-            Hashtable roles = new Hashtable();
-            Hashtable permissions = new Hashtable();
-            // notify the state modifiers (writers) that we want to create
-            // the snapshot.
-            lockShared();
-
-            // construct the snapshot:
-
-            // foreach group in the system
-            for (Iterator groupsIterator = getAllGroups().iterator();
-                 groupsIterator.hasNext();)
-            {
-                Group group = (Group) groupsIterator.next();
-                // get roles of user in the group
-                RoleSet groupRoles = RolePeerManager.retrieveSet(user, group);
-                // put the Set into roles(group)
-                roles.put(group, groupRoles);
-                // collect all permissions in this group
-                PermissionSet groupPermissions = new PermissionSet();
-                // foreach role in Set
-                for (Iterator rolesIterator = groupRoles.iterator();
-                     rolesIterator.hasNext();)
-                {
-                    Role role = (Role) rolesIterator.next();
-                    // get permissions of the role
-                    PermissionSet rolePermissions =
-                        PermissionPeerManager.retrieveSet(role);
-                    groupPermissions.add(rolePermissions);
-                }
-                // put the Set into permissions(group)
-                permissions.put(group, groupPermissions);
-            }
-            return getAclInstance(roles, permissions);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to build ACL for user '" +
-                                           user.getName() + "'" , e);
-        }
-        finally
-        {
-            // notify the state modifiers that we are done creating the snapshot.
-            unlockShared();
-        }
-    }
-
-    /*-----------------------------------------------------------------------
-      Security management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void grant(User user, Group group, Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(TurbineUserGroupRolePeer.USER_ID,
-                             ((Persistent) user).getPrimaryKey());
-                criteria.add(TurbineUserGroupRolePeer.GROUP_ID,
-                             ((Persistent) group).getPrimaryKey());
-                criteria.add(TurbineUserGroupRolePeer.ROLE_ID,
-                             ((Persistent) role).getPrimaryKey());
-                TurbineUserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(User,Group,Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException("Unknown user '"
-                                             + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException("Unknown group '"
-                                             + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                                             + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void revoke(User user, Group group, Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(TurbineUserGroupRolePeer.USER_ID,
-                             ((Persistent) user).getPrimaryKey());
-                criteria.add(TurbineUserGroupRolePeer.GROUP_ID,
-                             ((Persistent) group).getPrimaryKey());
-                criteria.add(TurbineUserGroupRolePeer.ROLE_ID,
-                             ((Persistent) role).getPrimaryKey());
-                TurbineUserGroupRolePeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(User,Role,Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException("Unknown user '"
-                                             + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException("Unknown group '"
-                                             + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                                             + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all roles from an User.
-     *
-     * This method is used when deleting an account.
-     *
-     * @param user the User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the account is not present.
-     */
-    public synchronized void revokeAll(User user)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            if (userExists)
-            {
-                // The following would not work, due to an annoying misfeature
-                // of Village. Village allows only a single row to be deleted at
-                // a time. I wish that it was possible to disable this
-                // behaviour!
-
-                // Criteria criteria = new Criteria();
-                // criteria.add(UserGroupRolePeer.USER_ID,
-                //           ((Persistent) user).getPrimaryKey());
-                // UserGroupRolePeer.doDelete(criteria);
-                int id = ((NumberKey) ((Persistent) user)
-                          .getPrimaryKey()).intValue();
-                TurbineUserGroupRolePeer.deleteAll(
-                    TurbineUserGroupRolePeer.TABLE_NAME,
-                    TurbineUserGroupRolePeer.USER_ID, id);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(User) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown user '"
-                                         + user.getName() + "'");
-    }
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void grant(Role role, Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(TurbineRolePermissionPeer.ROLE_ID,
-                             ((Persistent) role).getPrimaryKey());
-                criteria.add(TurbineRolePermissionPeer.PERMISSION_ID,
-                             ((Persistent) permission).getPrimaryKey());
-                TurbineUserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                                             + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException("Unknown permission '"
-                                             + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void revoke(Role role, Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(TurbineRolePermissionPeer.ROLE_ID,
-                             ((Persistent) role).getPrimaryKey());
-                criteria.add(TurbineRolePermissionPeer.PERMISSION_ID,
-                             ((Persistent) permission).getPrimaryKey());
-                TurbineRolePermissionPeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                                             + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException("Unknown permission '"
-                                             + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all permissions from a Role.
-     *
-     * This method is user when deleting a Role.
-     *
-     * @param role the Role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Role is not present.
-     */
-    public synchronized void revokeAll(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                // The following would not work, due to an annoying misfeature
-                // of Village. see revokeAll( user )
-
-                // Criteria criteria = new Criteria();
-                // criteria.add(RolePermissionPeer.ROLE_ID,
-                //         role.getPrimaryKey());
-                // RolePermissionPeer.doDelete(criteria);
-
-                int id = ((NumberKey) ((Persistent) role)
-                          .getPrimaryKey()).intValue();
-                TurbineRolePermissionPeer.deleteAll(
-                    TurbineRolePermissionPeer.TABLE_NAME,
-                    TurbineRolePermissionPeer.ROLE_ID, id);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '"
-                                         + role.getName() + "'");
-    }
-
-    /*-----------------------------------------------------------------------
-      Group/Role/Permission management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public GroupSet getGroups(Criteria criteria)
-        throws DataBackendException
-    {
-        Criteria torqueCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            torqueCriteria.put(GroupPeerManager.getColumnName(key),
-                    criteria.get(key));
-        }
-        List groups = new ArrayList(0);
-        try
-        {
-            groups = GroupPeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getGroups(Criteria) failed", e);
-        }
-        return new GroupSet(groups);
-    }
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public RoleSet getRoles(Criteria criteria)
-        throws DataBackendException
-    {
-        Criteria torqueCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            torqueCriteria.put(RolePeerManager.getColumnName(key),
-                    criteria.get(key));
-        }
-        List roles = new ArrayList(0);
-        try
-        {
-            roles = RolePeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getRoles(Criteria) failed", e);
-        }
-        return new RoleSet(roles);
-    }
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public PermissionSet getPermissions(Criteria criteria)
-        throws DataBackendException
-    {
-        Criteria torqueCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            torqueCriteria.put(PermissionPeerManager.getColumnName(key),
-                    criteria.get(key));
-        }
-        List permissions = new ArrayList(0);
-        try
-        {
-            permissions = PermissionPeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "getPermissions(Criteria) failed", e);
-        }
-        return new PermissionSet(permissions);
-    }
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @return A Permission set for the Role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role is not present.
-     */
-    public PermissionSet getPermissions(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockShared();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                return PermissionPeerManager.retrieveSet(role);
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getPermissions(Role) failed", e);
-        }
-        finally
-        {
-            unlockShared();
-        }
-        throw new UnknownEntityException("Unknown role '"
-                                         + role.getName() + "'");
-    }
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public void saveGroup(Group group)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeerManager.buildCriteria(group);
-                GroupPeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveGroup(Group) failed", e);
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public void saveRole(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                Criteria criteria = RolePeerManager.buildCriteria(role);
-                RolePeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveRole(Role) failed", e);
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Stores Permission's attributes. The Permissions is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public void savePermission(Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeerManager.buildCriteria(permission);
-                PermissionPeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "savePermission(Permission) failed", e);
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                                         + permission + "'");
-    }
-
-    /**
-     * Creates a new group with specified attributes.
-     *
-     * @param group the object describing the group to be created.
-     * @return a new Group object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    public synchronized Group addGroup(Group group)
-        throws DataBackendException,
-               EntityExistsException
-    {
-        boolean groupExists = false;
-
-        if (StringUtils.isEmpty(group.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                                           + "a group with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (!groupExists)
-            {
-                // add a row to the table
-                Criteria criteria = GroupPeerManager.buildCriteria(group);
-                GroupPeerManager.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(GroupPeerManager.getNameColumn(),
-                             group.getName());
-                List results = GroupPeerManager.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                        + results.size() + " rows");
-                }
-                Group newGroup = (Group) results.get(0);
-                // add the group to system-wide cache
-                getAllGroups().add(newGroup);
-                // return the object with correct id
-                return newGroup;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the groupExists was true.
-        throw new EntityExistsException("Group '" + group + "' already exists");
-    }
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role the object describing the role to be created.
-     * @return a new Role object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    public synchronized Role addRole(Role role)
-        throws DataBackendException, EntityExistsException
-    {
-        boolean roleExists = false;
-
-        if (StringUtils.isEmpty(role.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                                           + "a role with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (!roleExists)
-            {
-                // add a row to the table
-                Criteria criteria = RolePeerManager.buildCriteria(role);
-                RolePeerManager.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(RolePeerManager.getNameColumn(), role.getName());
-                List results = RolePeerManager.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                        + results.size() + " rows");
-                }
-                Role newRole = (Role) results.get(0);
-                // add the role to system-wide cache
-                getAllRoles().add(newRole);
-                // return the object with correct id
-                return newRole;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addRole(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the roleExists was true.
-        throw new EntityExistsException("Role '" + role + "' already exists");
-    }
-
-    /**
-     * Creates a new permission with specified attributes.
-     *
-     * @param permission the object describing the permission to be created.
-     * @return a new Permission object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    public synchronized Permission addPermission(Permission permission)
-        throws DataBackendException, EntityExistsException
-    {
-        boolean permissionExists = false;
-
-        if (StringUtils.isEmpty(permission.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                                           + "a permission with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (!permissionExists)
-            {
-                // add a row to the table
-                Criteria criteria = PermissionPeerManager.buildCriteria(permission);
-                PermissionPeerManager.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(PermissionPeerManager.getNameColumn(),
-                             permission.getName());
-                List results = PermissionPeerManager.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                        + results.size() + " rows");
-                }
-                Permission newPermission = (Permission) results.get(0);
-                // add the permission to system-wide cache
-                getAllPermissions().add(newPermission);
-                // return the object with correct id
-                return newPermission;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "addPermission(Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the permissionExists was true.
-        throw new EntityExistsException("Permission '" + permission
-                                        + "' already exists");
-    }
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group The object describing the group to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void removeGroup(Group group)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeerManager.buildCriteria(group);
-                GroupPeerManager.doDelete(criteria);
-                getAllGroups().remove(group);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Failed to delete a Group");
-            log.error(e);
-            throw new DataBackendException("removeGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role The object describing the role to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void removeRole(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                // revoke all permissions from the role to be deleted
-                revokeAll(role);
-                Criteria criteria = RolePeerManager.buildCriteria(role);
-                RolePeerManager.doDelete(criteria);
-                getAllRoles().remove(role);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removeRole(Role)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission The object describing the permission to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void removePermission(Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeerManager.buildCriteria(permission);
-                PermissionPeerManager.doDelete(criteria);
-                getAllPermissions().remove(permission);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removePermission(Permission)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                                         + permission + "'");
-    }
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group The object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void renameGroup(Group group, String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                group.setName(name);
-                Criteria criteria = GroupPeerManager.buildCriteria(group);
-                GroupPeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameGroup(Group,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role The object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void renameRole(Role role, String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                role.setName(name);
-                Criteria criteria = RolePeerManager.buildCriteria(role);
-                RolePeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameRole(Role,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission The object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void renamePermission(Permission permission,
-                                              String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                permission.setName(name);
-                Criteria criteria = PermissionPeerManager.buildCriteria(permission);
-                PermissionPeerManager.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "renamePermission(Permission,name)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                                         + permission + "'");
-    }
-
-    /* Service specific implementation methods */
-
-    /**
-     * Determines if the <code>Group</code> exists in the security system.
-     *
-     * @param group a <code>Group</code> value
-     * @return true if the group exists in the system, false otherwise
-     * @throws DataBackendException when more than one Group with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Group group)
-        throws DataBackendException, Exception
-    {
-        return GroupPeerManager.checkExists(group);
-    }
-
-    /**
-     * Determines if the <code>Role</code> exists in the security system.
-     *
-     * @param role a <code>Role</code> value
-     * @return true if the role exists in the system, false otherwise
-     * @throws DataBackendException when more than one Role with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Role role)
-        throws DataBackendException, Exception
-    {
-        return RolePeerManager.checkExists(role);
-    }
-
-    /**
-     * Determines if the <code>Permission</code> exists in the security system.
-     *
-     * @param permission a <code>Permission</code> value
-     * @return true if the permission exists in the system, false otherwise
-     * @throws DataBackendException when more than one Permission with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Permission permission)
-        throws DataBackendException, Exception
-    {
-        return PermissionPeerManager.checkExists(permission);
-    }
-
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUser.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUser.java
deleted file mode 100644
index dd7bf16..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUser.java
+++ /dev/null
@@ -1,823 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-
-import java.sql.Connection;
-
-import java.util.Date;
-import java.util.Hashtable;
-
-import javax.servlet.http.HttpSessionBindingEvent;
-
-import org.apache.torque.om.Persistent;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This is the User class used by the TorqueSecurity Service. It decouples
- * all the database peer access from the actual Peer object
- *
- * @author <a href="mailto:josh@stonecottage.com">Josh Lucas</a>
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TorqueUser
-    extends TorqueObject
-    implements User,
-               Persistent
-{
-    /** The date on which the user last accessed the application. */
-    private Date lastAccessDate = null;
-
-    /** This is data that will survive a servlet engine restart. */
-    private Hashtable permStorage = null;
-
-    /** This is data that will not survive a servlet engine restart. */
-    private Hashtable tempStorage = null;
-
-    /**
-     * Constructor.
-     * Create a new User and set the createDate.
-     */
-    public TorqueUser()
-    {
-        super();
-        setCreateDate(new Date());
-        tempStorage = new Hashtable(10);
-        setHasLoggedIn(Boolean.FALSE);
-    }
-
-    /**
-     * This Constructor is used when the UserPeerManager
-     * has retrieved a list of Database Objects from the peer and
-     * must 'wrap' them into TorqueRole Objects. You should not use it directly!
-     *
-     * @param obj An Object from the peer
-     */
-    public TorqueUser(Persistent obj)
-    {
-        super(obj);
-
-        // Do not set creation date. This is only called on retrieval from
-        // storage!
-
-        tempStorage = new Hashtable(10);
-        setHasLoggedIn(Boolean.FALSE);
-    }
-
-    /**
-     * Returns the underlying Object for the Peer
-     *
-     * Used in the UserPeerManager when building a new Criteria.
-     *
-     * @return The underlying persistent object
-     *
-     */
-
-    public Persistent getPersistentObj()
-    {
-        if (obj == null)
-        {
-            obj = UserPeerManager.newPersistentInstance();
-        }
-        return obj;
-    }
-
-    /**
-     * Stores the object in the database.  If the object is new,
-     * it inserts it; otherwise an update is performed.
-     *
-     * @param torqueName The name under which the object should be stored.
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void save(String torqueName)
-            throws Exception
-    {
-        setObjectdata(ObjectUtils.serializeHashtable(getPermStorage()));
-        super.save(torqueName);
-    }
-
-    /**
-     * Stores the object in the database.  If the object is new,
-     * it inserts it; otherwise an update is performed.  This method
-     * is meant to be used as part of a transaction, otherwise use
-     * the save() method and the connection details will be handled
-     * internally
-     *
-     * @param con A Connection object to save the object
-     *
-     * @exception Exception This method might throw an exceptions
-     */
-    public void save(Connection con)
-        throws Exception
-    {
-        setObjectdata(ObjectUtils.serializeHashtable(getPermStorage()));
-        super.save(con);
-    }
-
-    /**
-     * Makes changes made to the User attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public void save()
-        throws TurbineSecurityException
-    {
-        //
-        // This is inconsistent with all the other security classes
-        // because it calls save() on the underlying object directly.
-        // But the UserManager calls ((Persistent)user).save()
-        // so if we do TurbineSecurity.saveUser(this) here, we get
-        // a nice endless loop. :-(
-        //
-        // Users seem to be a special kind of security objects...
-        //
-
-        try
-        {
-            setObjectdata(ObjectUtils.serializeHashtable(getPermStorage()));
-            getPersistentObj().save();
-        }
-        catch (Exception e)
-        {
-            throw new TurbineSecurityException("User object said " 
-                    + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Returns the name of this object.
-     *
-     * @return The name of the object.
-     */
-    public String getName()
-    {
-        return UserPeerManager.getName(getPersistentObj());
-    }
-
-    /**
-     * Sets the name of this object
-     *
-     * @param name The name of the object
-     */
-    public void setName(String name)
-    {
-        setUserName(name);
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public int getId()
-    {
-        return UserPeerManager.getIdAsObj(getPersistentObj()).intValue();
-    }
-
-    /**
-     * Gets the Id of this object
-     *
-     * @return The Id of the object
-     */
-    public Integer getIdAsObj()
-    {
-        return UserPeerManager.getIdAsObj(getPersistentObj());
-    }
-
-    /**
-     * Sets the Id of this object
-     *
-     * @param id The new Id
-     */
-    public void setId(int id)
-    {
-        UserPeerManager.setId(getPersistentObj(), id);
-    }
-
-    /**
-     * Returns the name of this user.
-     *
-     * @return The name of the user.
-     * @deprecated Use getName() instead.
-     */
-    public String getUserName()
-    {
-        return getName();
-    }
-
-    /**
-     * Sets the name of this user.
-     *
-     * @param name The name of the user.
-     */
-    public void setUserName(String name)
-    {
-        UserPeerManager.setUserName(getPersistentObj(), name);
-    }
-
-    /**
-     * Returns the password of the User
-     *
-     * @return The password of the User
-     */
-    public String getPassword()
-    {
-        return UserPeerManager.getUserPassword(getPersistentObj());
-    }
-
-    /**
-     * Sets the password of the User
-     *
-     * @param password The new password of the User
-     */
-    public void setPassword(String password)
-    {
-        UserPeerManager.setUserPassword(getPersistentObj(), password);
-    }
-
-    /**
-     * Returns the first name of the User
-     *
-     * @return The first name of the User
-     */
-    public String getFirstName()
-    {
-        return UserPeerManager.getUserFirstName(getPersistentObj());
-    }
-
-    /**
-     * Sets the first name of the User
-     *
-     * @param firstName The new first name of the User
-     */
-    public void setFirstName(String firstName)
-    {
-        UserPeerManager.setUserFirstName(getPersistentObj(), firstName);
-    }
-
-    /**
-     * Returns the last name of the User
-     *
-     * @return The last name of the User
-     */
-    public String getLastName()
-    {
-        return UserPeerManager.getUserLastName(getPersistentObj());
-    }
-
-    /**
-     * Sets the last name of User
-     *
-     * @param lastName The new last name of the User
-     */
-    public void setLastName(String lastName)
-    {
-        UserPeerManager.setUserLastName(getPersistentObj(), lastName);
-    }
-
-    /**
-     * Returns the email address of the user
-     *
-     * @return The email address of the user
-     */
-    public String getEmail()
-    {
-        return UserPeerManager.getUserEmail(getPersistentObj());
-    }
-
-    /**
-     * Sets the new email address of the user
-     *
-     * @param email The new email address of the user
-     */
-    public void setEmail(String email)
-    {
-        UserPeerManager.setUserEmail(getPersistentObj(), email);
-    }
-
-    /**
-     * Returns the confirm value of the user
-     *
-     * @return The confirm value of the user
-     */
-    public String getConfirmed()
-    {
-        return UserPeerManager.getUserConfirmed(getPersistentObj());
-    }
-
-    /**
-     * Sets the new confirm value of the user
-     *
-     * @param confirm The new confirm value of the user
-     */
-    public void setConfirmed(String confirm)
-    {
-        UserPeerManager.setUserConfirmed(getPersistentObj(), confirm);
-    }
-
-    /**
-     * Returns the creation date of the user
-     *
-     * @return The creation date of the user
-     */
-    public java.util.Date getCreateDate()
-    {
-        return UserPeerManager.getUserCreateDate(getPersistentObj());
-    }
-
-    /**
-     * Sets the new creation date of the user
-     *
-     * @param createDate The new creation date of the user
-     */
-    public void setCreateDate(java.util.Date createDate)
-    {
-        UserPeerManager.setUserCreateDate(getPersistentObj(), createDate);
-    }
-
-    /**
-     * Returns the date of the last login of the user
-     *
-     * @return The date of the last login of the user
-     */
-    public java.util.Date getLastLogin()
-    {
-        return UserPeerManager.getUserLastLogin(getPersistentObj());
-    }
-
-    /**
-     * Sets the new date of the last login of the user
-     *
-     * @param lastLogin The new the date of the last login of the user
-     */
-    public void setLastLogin(java.util.Date lastLogin)
-    {
-        UserPeerManager.setUserLastLogin(getPersistentObj(), lastLogin);
-    }
-
-    /**
-     * Returns the value of the objectdata for this user.
-     * Objectdata is a VARBINARY column in the table used
-     * to store the permanent storage table from the User
-     * object.
-     *
-     * @return The bytes in the objectdata for this user
-     */
-    public byte [] getObjectdata()
-    {
-        return UserPeerManager.getUserObjectdata(getPersistentObj());
-    }
-
-    /**
-     * Sets the value of the objectdata for the user
-     *
-     * @param objectdata The new the date of the last login of the user
-     */
-    public void setObjectdata(byte [] objectdata)
-    {
-        UserPeerManager.setUserObjectdata(getPersistentObj(), objectdata);
-    }
-
-
-    /**
-     * Gets the access counter for a user from perm storage.
-     *
-     * @return The access counter for the user.
-     */
-    public int getAccessCounter()
-    {
-        try
-        {
-            return ((Integer) getPerm(User.ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Gets the access counter for a user during a session.
-     *
-     * @return The access counter for the user for the session.
-     */
-    public int getAccessCounterForSession()
-    {
-        try
-        {
-            return ((Integer) getTemp(User.SESSION_ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Increments the permanent hit counter for the user.
-     */
-    public void incrementAccessCounter()
-    {
-        // Ugh. Race city, here I come...
-        setAccessCounter(getAccessCounter() + 1);
-    }
-
-    /**
-     * Increments the session hit counter for the user.
-     */
-    public void incrementAccessCounterForSession()
-    {
-        setAccessCounterForSession(getAccessCounterForSession() + 1);
-    }
-
-    /**
-     * Sets the access counter for a user, saved in perm storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounter(int cnt)
-    {
-        setPerm(User.ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * Sets the session access counter for a user, saved in temp
-     * storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounterForSession(int cnt)
-    {
-        setTemp(User.SESSION_ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * This method reports whether or not the user has been confirmed
-     * in the system by checking the User.CONFIRM_VALUE
-     * column in the users record to see if it is equal to
-     * User.CONFIRM_DATA.
-     *
-     * @return True if the user has been confirmed.
-     */
-    public boolean isConfirmed()
-    {
-        String value = getConfirmed();
-        return (value != null && value.equals(User.CONFIRM_DATA));
-    }
-
-    /**
-     * The user is considered logged in if they have not timed out.
-     *
-     * @return Whether the user has logged in.
-     */
-    public boolean hasLoggedIn()
-    {
-        Boolean loggedIn = getHasLoggedIn();
-        return (loggedIn != null && loggedIn.booleanValue());
-    }
-
-    /**
-     * This sets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value.
-     *
-     * @param value Whether someone has logged in or not.
-     */
-    public void setHasLoggedIn(Boolean value)
-    {
-        setTemp(User.HAS_LOGGED_IN, value);
-    }
-
-    /**
-     * Gets the last access date for this User.  This is the last time
-     * that the user object was referenced.
-     *
-     * @return A Java Date with the last access date for the user.
-     */
-    public java.util.Date getLastAccessDate()
-    {
-        if (lastAccessDate == null)
-        {
-            setLastAccessDate();
-        }
-        return lastAccessDate;
-    }
-
-    /**
-     * Sets the last access date for this User. This is the last time
-     * that the user object was referenced.
-     */
-    public void setLastAccessDate()
-    {
-        lastAccessDate = new java.util.Date();
-    }
-
-    /**
-     * Returns the permanent storage. This is implemented
-     * as a Hashtable and backed by an VARBINARY column in
-     * the database.
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getPermStorage()
-    {
-        if (permStorage == null)
-        {
-            byte [] objectdata = getObjectdata();
-
-            if (objectdata != null)
-            {
-                permStorage = (Hashtable) ObjectUtils.deserialize(objectdata);
-            }
-
-            if (permStorage == null)
-            {
-                permStorage = new Hashtable();
-            }
-        }
-
-        return permStorage;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    public void setPermStorage(Hashtable permStorage)
-    {
-        if (permStorage != null)
-        {
-            this.permStorage = permStorage;
-        }
-    }
-
-    /**
-     * Returns the temporary storage. This is implemented
-     * as a Hashtable
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getTempStorage()
-    {
-        if (tempStorage == null)
-        {
-            tempStorage = new Hashtable();
-        }
-        return tempStorage;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    public void setTempStorage(Hashtable tempStorage)
-    {
-        if (tempStorage != null)
-        {
-            this.tempStorage = tempStorage;
-        }
-    }
-
-    /**
-     * Get an object from permanent storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    public Object getPerm(String name)
-    {
-        return getPermStorage().get(name);
-    }
-
-    /**
-     * Get an object from permanent storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getPerm(String name, Object def)
-    {
-        try
-        {
-            Object val = getPermStorage().get(name);
-            return (val == null ? def : val);
-        }
-        catch (Exception e)
-        {
-            return def;
-        }
-    }
-
-    /**
-     * Put an object into permanent storage. If the value is null,
-     * it will convert that to a "" because the underlying storage
-     * mechanism within TorqueUser is currently a Hashtable and
-     * null is not a valid value.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setPerm(String name, Object value)
-    {
-        getPermStorage().put(name, (value == null) ? "" : value);
-    }
-
-    /**
-     * Get an object from temporary storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name)
-    {
-        return getTempStorage().get(name);
-    }
-
-    /**
-     * Get an object from temporary storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name, Object def)
-    {
-        Object val;
-        try
-        {
-            val = getTempStorage().get(name);
-            if (val == null)
-            {
-                val = def;
-            }
-        }
-        catch (Exception e)
-        {
-            val = def;
-        }
-        return val;
-    }
-
-    /**
-     * Put an object into temporary storage. If the value is null,
-     * it will convert that to a "" because the underlying storage
-     * mechanism within TorqueUser is currently a Hashtable and
-     * null is not a valid value.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setTemp(String name, Object value)
-    {
-        getTempStorage().put(name, (value == null) ? "" : value);
-    }
-
-    /**
-     * Remove an object from temporary storage and return the object.
-     *
-     * @param name The name of the object to remove.
-     * @return An Object.
-     */
-    public Object removeTemp(String name)
-    {
-        return getTempStorage().remove(name);
-    }
-
-    /**
-     * Updates the last login date in the database.
-     *
-     * @exception Exception A generic exception.
-     */
-    public void updateLastLogin()
-        throws Exception
-    {
-        setLastLogin(new java.util.Date());
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Bound to the session.
-     *
-     * @param event Indication of value/session binding.
-     */
-    public void valueBound(HttpSessionBindingEvent hsbe)
-    {
-        // Currently we have no need for this method.
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Unbound from the session.
-     *
-     * @param event Indication of value/session unbinding.
-     */
-    public void valueUnbound(HttpSessionBindingEvent hsbe)
-    {
-        try
-        {
-            if (hasLoggedIn())
-            {
-                TurbineSecurity.saveOnSessionUnbind(this);
-            }
-        }
-        catch (Exception e)
-        {
-            //Log.error("TorqueUser.valueUnbound(): " + e.getMessage(), e);
-
-            // To prevent messages being lost in case the logging system
-            // goes away before sessions get unbound on servlet container
-            // shutdown, print the stcktrace to the container's console.
-            ByteArrayOutputStream ostr = new ByteArrayOutputStream();
-            e.printStackTrace(new PrintWriter(ostr, true));
-            String stackTrace = ostr.toString();
-            System.out.println(stackTrace);
-        }
-    }
-
-    /**
-     * This gets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value as a boolean.  This is private because you
-     * should use hasLoggedIn() instead.
-     *
-     * @return True if someone has logged in.
-     */
-    private Boolean getHasLoggedIn()
-    {
-        return (Boolean) getTemp(User.HAS_LOGGED_IN);
-    }
-
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUserManager.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUserManager.java
deleted file mode 100644
index 6ffcd3d..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/TorqueUserManager.java
+++ /dev/null
@@ -1,529 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.UserManager;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An UserManager performs {@link org.apache.turbine.om.security.User}
- * objects related tasks on behalf of the
- * {@link org.apache.turbine.services.security.BaseSecurityService}.
- *
- * This implementation uses a relational database for storing user data. It
- * expects that the User interface implementation will be castable to
- * {@link org.apache.torque.om.BaseObject}.
- *
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TorqueUserManager
-    implements UserManager
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TorqueUserManager.class);
-
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     *
-     * @throws InitializationException When something went wrong.
-     */
-    public void init(Configuration conf)
-        throws InitializationException
-    {
-        UserPeerManager.init(conf);
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing
-     *         the data backend.
-     */
-    public boolean accountExists(User user)
-        throws DataBackendException
-    {
-        return accountExists(user.getName());
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing
-     *         the data backend.
-     */
-    public boolean accountExists(String userName)
-        throws DataBackendException
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(UserPeerManager.getNameColumn(), userName);
-        List users;
-        try
-        {
-            users = UserPeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "Failed to check account's presence", e);
-        }
-        if (users.size() > 1)
-        {
-            throw new DataBackendException(
-                "Multiple Users with same username '" + userName + "'");
-        }
-        return (users.size() == 1);
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param userName the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String userName)
-        throws UnknownEntityException, DataBackendException
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(UserPeerManager.getNameColumn(), userName);
-        List users;
-        try
-        {
-            users = UserPeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to retrieve user '" +
-                                           userName + "'", e);
-        }
-        if (users.size() > 1)
-        {
-            throw new DataBackendException(
-                "Multiple Users with same username '" + userName + "'");
-        }
-        if (users.size() == 1)
-        {
-            return (User) users.get(0);
-        }
-        throw new UnknownEntityException("Unknown user '" + userName + "'");
-    }
-
-    /**
-     * @deprecated Use <a href="#retrieveList">retrieveList</a> instead.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public User[] retrieve(Criteria criteria)
-        throws DataBackendException
-    {
-        return (User [])retrieveList(criteria).toArray(new User[0]);
-    }
-
-    /**
-     * Retrieve a list of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of Torque implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List retrieveList(Criteria criteria)
-        throws DataBackendException
-    {
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-
-            // set the table name for all attached criterion
-            Criteria.Criterion[] criterion = criteria
-                .getCriterion(key).getAttachedCriterion();
-
-            for (int i = 0; i < criterion.length; i++)
-            {
-                String table = criterion[i].getTable();
-                if (table == null || "".equals(table))
-                {
-                    criterion[i].setTable(UserPeerManager.getTableName());
-                }
-            }
-        }
-        List users = new ArrayList(0);
-        try
-        {
-            users = UserPeerManager.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to retrieve users", e);
-        }
-        return users;
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param userName the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String userName, String password)
-        throws PasswordMismatchException, UnknownEntityException,
-               DataBackendException
-    {
-        User user = retrieve(userName);
-        authenticate(user, password);
-        return user;
-    }
-
-    /**
-     * Save an User object to persistent storage. User's account is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void store(User user)
-        throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                                             user.getName() + "' does not exist");
-        }
-
-        try
-        {
-            // this is to mimic the old behavior of the method, the user
-            // should be new that is passed to this method.  It would be
-            // better if this was checked, but the original code did not
-            // care about the user's state, so we set it to be appropriate
-            ((Persistent) user).setNew(false);
-            ((Persistent) user).setModified(true);
-            ((Persistent) user).save();
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to save user object", e);
-        }
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-        throws UnknownEntityException, DataBackendException
-    {
-        if (!user.hasLoggedIn())
-        {
-            return;
-        }
-        //
-        // Quinton did some more magic here in the DBSecurityService
-        // but I don't think this is necessary, because our Peer will
-        // do all the grunt work for us. Maybe: FIXME -- henning
-        //
-        store(user);
-    }
-
-
-    /**
-     * Authenticate an User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user an User object to authenticate.
-     * @param password the user supplied password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void authenticate(User user, String password)
-        throws PasswordMismatchException, UnknownEntityException,
-               DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                                             user.getName() + "' does not exist");
-        }
-
-        // log.debug("Supplied Pass: " + password);
-        // log.debug("User Pass: " + user.getPassword());
-
-        /*
-         * Unix crypt needs the existing, encrypted password text as
-         * salt for checking the supplied password. So we supply it
-         * into the checkPassword routine
-         */
-
-        if (!TurbineSecurity.checkPassword(password, user.getPassword()))
-        {
-            throw new PasswordMismatchException("The passwords do not match");
-        }
-    }
-
-    /**
-     * Change the password for an User. The user must have supplied the
-     * old password to allow the change.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword The old password to verify
-     * @param newPassword The new password to set
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void changePassword(User user, String oldPassword,
-                               String newPassword)
-        throws PasswordMismatchException, UnknownEntityException,
-               DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                                             user.getName() + "' does not exist");
-        }
-
-        if (!TurbineSecurity.checkPassword(oldPassword, user.getPassword()))
-        {
-            throw new PasswordMismatchException(
-                "The supplied old password for '" + user.getName() +
-                "' was incorrect");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(newPassword));
-        // save the changes in the database imediately, to prevent the password
-        // being 'reverted' to the old value if the user data is lost somehow
-        // before it is saved at session's expiry.
-        store(user);
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void forcePassword(User user, String password)
-        throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                                             user.getName() + "' does not exist");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(password));
-        // save the changes in the database immediately, to prevent the
-        // password being 'reverted' to the old value if the user data
-        // is lost somehow before it is saved at session's expiry.
-        store(user);
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user The object describing account to be created.
-     * @param initialPassword the password for the new account
-     * @throws DataBackendException if there was an error accessing
-     the data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void createAccount(User user, String initialPassword)
-        throws EntityExistsException, DataBackendException
-    {
-        if(StringUtils.isEmpty(user.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                                           + "an user with empty name!");
-        }
-
-        if (accountExists(user))
-        {
-            throw new EntityExistsException("The account '" +
-                                            user.getName() + "' already exists");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(initialPassword));
-
-        try
-        {
-            // this is to mimic the old behavior of the method, the user
-            // should be new that is passed to this method.  It would be
-            // better if this was checked, but the original code did not
-            // care about the user's state, so we set it to be appropriate
-            ((Persistent) user).setNew(true);
-            ((Persistent) user).setModified(true);
-            ((Persistent) user).save();
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to create account '" +
-                                           user.getName() + "'", e);
-        }
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing
-     the data backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeAccount(User user)
-        throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                                             user.getName() + "' does not exist");
-        }
-        Criteria criteria = new Criteria();
-        criteria.add(UserPeerManager.getNameColumn(), user.getName());
-        try
-        {
-            UserPeerManager.doDelete(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to remove account '" +
-                                           user.getName() + "'", e);
-        }
-    }
-}
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManager.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManager.java
deleted file mode 100644
index c5cfcef..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManager.java
+++ /dev/null
@@ -1,1539 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.PropertyDescriptor;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.DataBackendException;
-
-/**
- * This class capsulates all direct Peer access for the User entities.
- * It allows the exchange of the default Turbine supplied TurbineUserPeer
- * class against a custom class.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class UserPeerManager
-    implements UserPeerManagerConstants
-{
-    /** The class of the Peer the TorqueSecurityService uses */
-    private static Class userPeerClass = null;
-
-    /** The class name of the objects returned by the configured peer. */
-    private static Class userObject = null;
-
-    /** The name of the Table used for Group Object queries  */
-    private static String tableName = null;
-
-    /** The name of the column used as "Name" Column */
-    private static String nameColumn = null;
-
-    /** The name of the column used as "Id" Column */
-    private static String idColumn = null;
-
-    /** The name of the column used as "Password" Column */
-    private static String passwordColumn = null;
-
-    /** The name of the column used as "First name" Column */
-    private static String firstNameColumn = null;
-
-    /** The name of the column used as "Last name" Column */
-    private static String lastNameColumn = null;
-
-    /** The name of the column used as "Email" Column */
-    private static String emailColumn = null;
-
-    /** The name of the column used as "Confirm" Column */
-    private static String confirmColumn = null;
-
-    /** The name of the column used as "create date" Column */
-    private static String createDateColumn = null;
-
-    /** The name of the column used as "last login" Column */
-    private static String lastLoginColumn = null;
-
-    /** The name of the column used as "objectdata" Column */
-    private static String objectdataColumn = null;
-
-    /** The "Name" property descriptor */
-    private static PropertyDescriptor namePropDesc = null;
-
-    /** The "Id" property descriptor */
-    private static PropertyDescriptor idPropDesc = null;
-
-    /** The "Password" property descriptor */
-    private static PropertyDescriptor passwordPropDesc = null;
-
-    /** The "First name" property descriptor */
-    private static PropertyDescriptor firstNamePropDesc = null;
-
-    /** The "Last name" property descriptor */
-    private static PropertyDescriptor lastNamePropDesc = null;
-
-    /** The "Email" property descriptor */
-    private static PropertyDescriptor emailPropDesc = null;
-
-    /** The "Confirm" property descriptor */
-    private static PropertyDescriptor confirmPropDesc = null;
-
-    /** The "create date" property descriptor */
-    private static PropertyDescriptor createDatePropDesc = null;
-
-    /** The "last login" property descriptor */
-    private static PropertyDescriptor lastLoginPropDesc = null;
-
-    /** The "objectdata" property descriptor */
-    private static PropertyDescriptor objectdataPropDesc = null;
-
-    /** Logging */
-    static Log log = LogFactory.getLog(UserPeerManager.class);
-
-    /**
-     * Initializes the UserPeerManager, loading the class object for the
-     * Peer used to retrieve User objects
-     *
-     * @param conf The configuration object used to configure the Manager
-     *
-     * @exception InitializationException A problem occured during
-     *            initialization
-     */
-
-    public static void init(Configuration conf)
-        throws InitializationException
-    {
-        String userPeerClassName = conf.getString(USER_PEER_CLASS_KEY,
-                                                  USER_PEER_CLASS_DEFAULT);
-        String userObjectName = null;
-
-        try
-        {
-            userPeerClass = Class.forName(userPeerClassName);
-
-            tableName  =
-              (String) userPeerClass.getField("TABLE_NAME").get(null);
-
-            //
-            // We have either an user configured Object class or we use the
-            // default as supplied by the Peer class
-            //
-
-            // Default from Peer, can be overridden
-
-            userObject = getPersistenceClass();
-
-            userObjectName = conf.getString(USER_CLASS_KEY,
-                    userObject.getName());
-
-            // Maybe the user set a new value...
-            userObject = Class.forName(userObjectName);
-
-            /* If any of the following Field queries fails, the user
-             * subsystem is unusable. So check this right here at init time,
-             * which saves us much time and hassle if it fails...
-             */
-
-            nameColumn = (String) userPeerClass.getField(
-                conf.getString(USER_NAME_COLUMN_KEY,
-                               USER_NAME_COLUMN_DEFAULT)
-                ).get(null);
-
-            idColumn = (String) userPeerClass.getField(
-                conf.getString(USER_ID_COLUMN_KEY,
-                               USER_ID_COLUMN_DEFAULT)
-                ).get(null);
-
-            passwordColumn = (String) userPeerClass.getField(
-                conf.getString(USER_PASSWORD_COLUMN_KEY,
-                               USER_PASSWORD_COLUMN_DEFAULT)
-                ).get(null);
-
-            firstNameColumn  = (String) userPeerClass.getField(
-                conf.getString(USER_FIRST_NAME_COLUMN_KEY,
-                               USER_FIRST_NAME_COLUMN_DEFAULT)
-                ).get(null);
-
-            lastNameColumn = (String) userPeerClass.getField(
-                conf.getString(USER_LAST_NAME_COLUMN_KEY,
-                               USER_LAST_NAME_COLUMN_DEFAULT)
-                ).get(null);
-
-            emailColumn = (String) userPeerClass.getField(
-                conf.getString(USER_EMAIL_COLUMN_KEY,
-                               USER_EMAIL_COLUMN_DEFAULT)
-                ).get(null);
-
-            confirmColumn    = (String) userPeerClass.getField(
-                conf.getString(USER_CONFIRM_COLUMN_KEY,
-                               USER_CONFIRM_COLUMN_DEFAULT)
-                ).get(null);
-
-            createDateColumn = (String) userPeerClass.getField(
-                conf.getString(USER_CREATE_COLUMN_KEY,
-                               USER_CREATE_COLUMN_DEFAULT)
-                ).get(null);
-
-            lastLoginColumn = (String) userPeerClass.getField(
-                conf.getString(USER_LAST_LOGIN_COLUMN_KEY,
-                               USER_LAST_LOGIN_COLUMN_DEFAULT)
-                ).get(null);
-
-            objectdataColumn = (String) userPeerClass.getField(
-                conf.getString(USER_OBJECTDATA_COLUMN_KEY,
-                               USER_OBJECTDATA_COLUMN_DEFAULT)
-                ).get(null);
-
-            namePropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_NAME_PROPERTY_KEY,
-                                           USER_NAME_PROPERTY_DEFAULT),
-                                       userObject);
-
-            idPropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_ID_PROPERTY_KEY,
-                                           USER_ID_PROPERTY_DEFAULT),
-                                       userObject);
-
-            passwordPropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_PASSWORD_PROPERTY_KEY,
-                                           USER_PASSWORD_PROPERTY_DEFAULT),
-                                       userObject);
-
-            firstNamePropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_FIRST_NAME_PROPERTY_KEY,
-                                           USER_FIRST_NAME_PROPERTY_DEFAULT),
-                                       userObject);
-
-            lastNamePropDesc   =
-                new PropertyDescriptor(conf.getString(
-                                           USER_LAST_NAME_PROPERTY_KEY,
-                                           USER_LAST_NAME_PROPERTY_DEFAULT),
-                                       userObject);
-
-            emailPropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_EMAIL_PROPERTY_KEY,
-                                           USER_EMAIL_PROPERTY_DEFAULT),
-                                       userObject);
-
-            confirmPropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_CONFIRM_PROPERTY_KEY,
-                                           USER_CONFIRM_PROPERTY_DEFAULT),
-                                       userObject);
-
-            createDatePropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_CREATE_PROPERTY_KEY,
-                                           USER_CREATE_PROPERTY_DEFAULT),
-                                       userObject);
-
-            lastLoginPropDesc  =
-                new PropertyDescriptor(conf.getString(
-                                           USER_LAST_LOGIN_PROPERTY_KEY,
-                                           USER_LAST_LOGIN_PROPERTY_DEFAULT),
-                                       userObject);
-
-            objectdataPropDesc =
-                new PropertyDescriptor(conf.getString(
-                                           USER_OBJECTDATA_PROPERTY_KEY,
-                                           USER_OBJECTDATA_PROPERTY_DEFAULT),
-                                       userObject);
-        }
-        catch (Exception e)
-        {
-            if (userPeerClassName == null || userPeerClass == null)
-            {
-                throw new InitializationException(
-                    "Could not find UserPeer class ("
-                    + userPeerClassName + ")", e);
-            }
-            if (tableName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the table name from the Peer object", e);
-            }
-
-            if (userObject == null || userObjectName == null)
-            {
-                throw new InitializationException(
-                    "Failed to get the object type from the Peer object", e);
-            }
-
-
-            if (nameColumn == null || namePropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no name column information!", e);
-            }
-            if (idColumn == null || idPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no id column information!", e);
-            }
-            if (passwordColumn == null || passwordPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no password column information!", e);
-            }
-            if (firstNameColumn == null || firstNamePropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no firstName column information!", e);
-            }
-            if (lastNameColumn == null || lastNamePropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no lastName column information!", e);
-            }
-            if (emailColumn == null || emailPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no email column information!", e);
-            }
-            if (confirmColumn == null || confirmPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no confirm column information!", e);
-            }
-            if (createDateColumn == null || createDatePropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no createDate column information!", e);
-            }
-            if (lastLoginColumn == null || lastLoginPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no lastLogin column information!", e);
-            }
-            if (objectdataColumn == null || objectdataPropDesc == null)
-            {
-                throw new InitializationException(
-                    "UserPeer " + userPeerClassName
-                    + " has no objectdata column information!", e);
-            }
-        }
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return tableName;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Name Column for a group
-     *
-     * @return A String containing the column name
-     */
-    public static String getNameColumn()
-    {
-        return nameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Id Column for a group
-     *
-     * @return A String containing the column id
-     */
-    public static String getIdColumn()
-    {
-        return idColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Password Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getPasswordColumn()
-    {
-        return passwordColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the FirstName Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getFirstNameColumn()
-    {
-        return firstNameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the LastName Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getLastNameColumn()
-    {
-        return lastNameColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Email Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getEmailColumn()
-    {
-        return emailColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the Confirm Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getConfirmColumn()
-    {
-        return confirmColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the CreateDate Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getCreateDateColumn()
-    {
-        return createDateColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the LastLogin Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getLastLoginColumn()
-    {
-        return lastLoginColumn;
-    }
-
-    /**
-     * Returns the fully qualified name of the Column to
-     * use as the objectdata Column for a role
-     *
-     * @return A String containing the column name
-     */
-    public static String getObjectdataColumn()
-    {
-        return objectdataColumn;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name The column to fully qualify
-     *
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(getTableName());
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name The column to fully qualify
-     *
-     * @return A String with the full name of the column.
-     * @deprecated use getColumnName(String name)
-     */
-    public String getFullColumnName(String name)
-    {
-        return getColumnName(name);
-    }
-
-
-    /**
-     * Returns a new, empty object for the underlying peer.
-     * Used to create a new underlying object
-     *
-     * @return A new object which is compatible to the Peer
-     *         and can be used as a User object
-     *
-     */
-
-    public static Persistent newPersistentInstance()
-    {
-        Persistent obj = null;
-
-        if(userObject == null)
-        {
-            // This can happen if the Turbine wants to determine the
-            // name of the anonymous user before the security service
-            // has been initialized. In this case, the Peer Manager
-            // has not yet been inited and the userObject is still
-            // null. Return null in this case.
-            //
-            return obj;
-        }
-
-        try
-        {
-            obj = (Persistent) userObject.newInstance();
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a user object", e);
-            obj = null;
-        }
-        return obj;
-    }
-
-    /**
-     * Checks if a User is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param user The User to be checked.
-     * @return <code>true</code> if given User exists in the system.
-     * @throws DataBackendException when more than one User with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    public static boolean checkExists(User user)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.addSelectColumn(getIdColumn());
-
-        criteria.add(getNameColumn(), user.getName());
-
-        List results = BasePeer.doSelect(criteria);
-
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple users named '" +
-                                           user.getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Returns a List of all User objects.
-     *
-     * @return A List with all users in the system.
-     * @exception Exception A generic exception.
-     */
-    public static List selectAllUsers()
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(getLastNameColumn());
-        criteria.addAscendingOrderByColumn(getFirstNameColumn());
-        criteria.setIgnoreCase(true);
-        return doSelect(criteria);
-    }
-
-    /**
-     * Returns a List of all confirmed User objects.
-     *
-     * @return A List with all confirmed users in the system.
-     * @exception Exception A generic exception.
-     */
-    public static List selectAllConfirmedUsers()
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-
-        criteria.add (getConfirmColumn(), User.CONFIRM_DATA);
-        criteria.addAscendingOrderByColumn(getLastNameColumn());
-        criteria.addAscendingOrderByColumn(getFirstNameColumn());
-        criteria.setIgnoreCase(true);
-        return doSelect(criteria);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * WARNING! Do not read on if you have a weak stomach. What follows here
-     * are some abominations thanks to the braindead static peers of Torque
-     * and the rigidity of Java....
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Calls buildCriteria(User user) in the configured UserPeer. If you get
-     * a ClassCastException in this routine, you put a User object into this
-     * method which can't be cast into an object for the TorqueSecurityService. This is a
-     * configuration error most of the time.
-     *
-     * @param user An object which implements the User interface
-     *
-     * @return A criteria for the supplied user object
-     */
-
-    public static Criteria buildCriteria(User user)
-    {
-        Criteria crit;
-
-        try
-        {
-            Class[] clazz = new Class[] { userObject };
-            Object[] params =
-                new Object[] { ((TorqueUser) user).getPersistentObj() };
-
-            crit =  (Criteria) userPeerClass
-                .getMethod("buildCriteria", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            crit = null;
-        }
-
-        return crit;
-    }
-
-    /**
-     * Invokes doUpdate(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            userPeerClass
-                .getMethod("doUpdate", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doUpdate failed", e);
-        }
-    }
-
-    /**
-     * Invokes doInsert(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-
-    public static void doInsert(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            userPeerClass
-                .getMethod("doInsert", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doInsert failed", e);
-        }
-    }
-
-    /**
-     * Invokes doSelect(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @return A List of User Objects selected by the Criteria
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static List doSelect(Criteria criteria)
-        throws TorqueException
-    {
-        List list;
-
-        try
-        {
-            Class[] clazz =
-                new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            list = (List) userPeerClass
-                .getMethod("doSelect", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doSelect failed", e);
-        }
-        List newList = new ArrayList(list.size());
-
-        //
-        // Wrap the returned Objects into TorqueUsers.
-        //
-        for (Iterator it = list.iterator(); it.hasNext(); )
-        {
-            User u = getNewUser((Persistent) it.next());
-            newList.add(u);
-        }
-
-        return newList;
-    }
-
-    /**
-     * Invokes doDelete(Criteria c) on the configured Peer Object
-     *
-     * @param criteria  A Criteria Object
-     *
-     * @exception TorqueException A problem occured.
-     */
-    public static void doDelete(Criteria criteria)
-        throws TorqueException
-    {
-        try
-        {
-            Class[] clazz = new Class[] { Criteria.class };
-            Object[] params = new Object[] { criteria };
-
-            userPeerClass
-                .getMethod("doDelete", clazz)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            throw new TorqueException("doDelete failed", e);
-        }
-    }
-
-    /**
-     * Invokes setName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param name The Name to set
-     */
-    public static void setUserName(Persistent obj, String name)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { name };
-            namePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getName() on the supplied base object
-     *
-     * @param obj The object to use for getting the name
-     *
-     * @return A string containing the name
-     *
-     * @deprecated use getName(obj)
-     */
-    public static String getUserName(Persistent obj)
-    {
-        return getName(obj);
-    }
-
-    /**
-     * Invokes getName() on the supplied base object
-     *
-     * @param obj The object to use for getting the name
-     *
-     * @return A string containing the name
-     */
-    public static String getName(Persistent obj)
-    {
-        String name = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            name = (String) namePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return name;
-    }
-
-    /**
-     * Invokes setPassword(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the password
-     * @param password The Password to set
-     */
-    public static void setUserPassword(Persistent obj, String password)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { password };
-            passwordPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getPassword() on the supplied base object
-     *
-     * @param obj The object to use for getting the password
-     *
-     * @return A string containing the password
-     */
-    public static String getUserPassword(Persistent obj)
-    {
-        String password = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            password = (String) passwordPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return password;
-    }
-
-    /**
-     * Invokes setFirstName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the first name
-     * @param firstName The first name to set
-     */
-    public static void setUserFirstName(Persistent obj, String firstName)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { firstName };
-            firstNamePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getFirstName() on the supplied base object
-     *
-     * @param obj The object to use for getting the first name
-     *
-     * @return A string containing the first name
-     */
-    public static String getUserFirstName(Persistent obj)
-    {
-        String firstName = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            firstName = (String) firstNamePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return firstName;
-    }
-
-    /**
-     * Invokes setLastName(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the last name
-     * @param lastName The Last Name to set
-     */
-    public static void setUserLastName(Persistent obj, String lastName)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { lastName };
-            lastNamePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getLastName() on the supplied base object
-     *
-     * @param obj The object to use for getting the last name
-     *
-     * @return A string containing the last name
-     */
-    public static String getUserLastName(Persistent obj)
-    {
-        String lastName = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            lastName = (String) lastNamePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return lastName;
-    }
-
-    /**
-     * Invokes setEmail(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the email
-     * @param email The Email to set
-     */
-    public static void setUserEmail(Persistent obj, String email)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { email };
-            emailPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getEmail() on the supplied base object
-     *
-     * @param obj The object to use for getting the email
-     *
-     * @return A string containing the email
-     */
-    public static String getUserEmail(Persistent obj)
-    {
-        String email = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            email = (String) emailPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return email;
-    }
-
-    /**
-     * Invokes setConfirmed(String s) on the supplied base object
-     *
-     * @param obj The object to use for setting the confirm value
-     * @param confirm The confirm value to set
-     */
-    public static void setUserConfirmed(Persistent obj, String confirm)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { confirm };
-            confirmPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getConfirmed() on the supplied base object
-     *
-     * @param obj The object to use for getting the confirm value
-     *
-     * @return A string containing the confirm value
-     */
-    public static String getUserConfirmed(Persistent obj)
-    {
-        String confirm = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            confirm = (String) confirmPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return confirm;
-    }
-
-    /**
-     * Invokes setCreateDate(java.util.Date date) on the supplied base object
-     *
-     * @param obj The object to use for setting the create date
-     * @param createDate The create date to set
-     */
-    public static void setUserCreateDate(Persistent obj, java.util.Date createDate)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { createDate };
-            createDatePropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getCreateDate() on the supplied base object
-     *
-     * @param obj The object to use for getting the create date
-     *
-     * @return A string containing the create date
-     */
-    public static java.util.Date getUserCreateDate(Persistent obj)
-    {
-        java.util.Date createDate = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            createDate = (java.util.Date) createDatePropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return createDate;
-    }
-
-    /**
-     * Invokes setLastLogin(java.util.Date date) on the supplied base object
-     *
-     * @param obj The object to use for setting the last login daet
-     * @param lastLogin The last login date to set
-     */
-    public static void setUserLastLogin(Persistent obj, java.util.Date lastLogin)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { lastLogin };
-            lastLoginPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getLastLogin() on the supplied base object
-     *
-     * @param obj The object to use for getting the last login date
-     *
-     * @return A string containing the last login date
-     */
-    public static java.util.Date getUserLastLogin(Persistent obj)
-    {
-        java.util.Date lastLogin = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            lastLogin = (java.util.Date) lastLoginPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return lastLogin;
-    }
-
-    /**
-     * Invokes setObjectdata(byte [] date) on the supplied base object
-     *
-     * @param obj The object to use for setting the last login daet
-     * @param objectdata The objectdata to use
-     */
-    public static void setUserObjectdata(Persistent obj, byte [] objectdata)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { objectdata };
-            objectdataPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getObjectdata() on the supplied base object
-     *
-     * @param obj The object to use for getting the last login date
-     *
-     * @return A string containing the last login date
-     */
-    public static byte [] getUserObjectdata(Persistent obj)
-    {
-        byte [] objectdata = null;
-
-        if(obj == null)
-        {
-            return null;
-        }
-
-        try
-        {
-            objectdata = (byte []) objectdataPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return objectdata;
-    }
-
-    /**
-     * Invokes setId(int n) on the supplied base object
-     *
-     * @param obj The object to use for setting the name
-     * @param id The new Id
-     */
-    public static void setId(Persistent obj, int id)
-    {
-        if(obj == null)
-        {
-            return;
-        }
-
-        try
-        {
-            Object[] params = new Object[] { Integer.TYPE };
-            idPropDesc.getWriteMethod().invoke(obj, params);
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-    }
-
-    /**
-     * Invokes getId() on the supplied base object
-     *
-     * @param obj The object to use for getting the id
-     *
-     * @return The Id of this object
-     */
-    public static Integer getIdAsObj(Persistent obj)
-    {
-        Integer id = null;
-
-        if(obj == null)
-        {
-            return new Integer(0);
-        }
-
-        try
-        {
-            id = (Integer) idPropDesc
-                .getReadMethod()
-                .invoke(obj, new Object[] {});
-        }
-        catch (ClassCastException cce)
-        {
-            String msg = obj.getClass().getName() + " does not seem to be an User Object!";
-            log.error(msg);
-            throw new RuntimeException(msg);
-        }
-        catch (Exception e)
-        {
-            log.error(e, e);
-        }
-        return id;
-    }
-
-    /**
-     * Returns the Class of the configured Object class
-     * from the peer
-     *
-     * @return The class of the objects returned by the configured peer
-     *
-     */
-
-    private static Class getPersistenceClass()
-    {
-        Class persistenceClass = null;
-
-        try
-        {
-            Object[] params = new Object[0];
-
-            persistenceClass =  (Class) userPeerClass
-                .getMethod("getOMClass", null)
-                .invoke(null, params);
-        }
-        catch (Exception e)
-        {
-            persistenceClass = null;
-        }
-
-        return persistenceClass;
-    }
-
-    /**
-     * Returns a new, configured User Object with
-     * a supplied Persistent object at its core
-     *
-     * @param p The persistent object
-     *
-     * @return a new, configured User Object
-     *
-     * @exception Exception Could not create a new Object
-     *
-     */
-
-    public static User getNewUser(Persistent p)
-    {
-        User u = null;
-        try
-        {
-            Class userWrapperClass = TurbineSecurity.getUserClass();
-
-            Class [] clazz = new Class [] { Persistent.class };
-            Object [] params = new Object [] { p };
-
-            u = (User) userWrapperClass
-                .getConstructor(clazz)
-                .newInstance(params);
-        }
-        catch (Exception e)
-        {
-            log.error("Could not instantiate a new user from supplied persistent: ", e);
-        }
-
-        return u;
-    }
-}
-
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManagerConstants.java b/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManagerConstants.java
deleted file mode 100644
index 094b012..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/UserPeerManagerConstants.java
+++ /dev/null
@@ -1,277 +0,0 @@
-package org.apache.turbine.services.security.torque;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import org.apache.turbine.services.security.torque.om.TurbineUserPeer;
-
-/**
- * Constants for configuring the various columns and bean properties
- * for the used peer.
- *
- * <pre>
- * Default is:
- *
- * security.torque.userPeer.class = org.apache.turbine.services.security.torque.om.TurbineUserPeer
- * security.torque.userPeer.column.name       = LOGIN_NAME
- * security.torque.userPeer.column.id         = USER_ID
- * security.torque.userPeer.column.password   = PASSWORD_VALUE
- * security.torque.userPeer.column.firstname  = FIRST_NAME
- * security.torque.userPeer.column.lastname   = LAST_NAME
- * security.torque.userPeer.column.email      = EMAIL
- * security.torque.userPeer.column.confirm    = CONFIRM_VALUE
- * security.torque.userPeer.column.createdate = CREATED
- * security.torque.userPeer.column.lastlogin  = LAST_LOGIN
- * security.torque.userPeer.column.objectdata = OBJECTDATA
- *
- * security.torque.user.class = org.apache.turbine.services.security.torque.om.TurbineUser
- * security.torque.user.property.name       = UserName
- * security.torque.user.property.id         = UserId
- * security.torque.user.property.password   = Password
- * security.torque.user.property.firstname  = FirstName
- * security.torque.user.property.lastname   = LastName
- * security.torque.user.property.email      = Email
- * security.torque.user.property.confirm    = Confirmed
- * security.torque.user.property.createdate = CreateDate
- * security.torque.user.property.lastlogin  = LastLogin
- * security.torque.user.property.objectdata = Objectdata
- *
- * </pre>
- * If security.torque.user.class is unset, then the value of the constant CLASSNAME_DEFAULT
- * from the configured Peer is used.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface UserPeerManagerConstants
-    extends Serializable
-{
-    /** The key within the security service properties for the user class implementation */
-    public static final String USER_CLASS_KEY =
-        "torque.user.class";
-
-    /** The key within the security service properties for the user peer class implementation */
-    public static final String USER_PEER_CLASS_KEY =
-        "torque.userPeer.class";
-
-    /** User peer default class */
-    public static final String USER_PEER_CLASS_DEFAULT =
-        TurbineUserPeer.class.getName();
-
-    /** The column name for the login name field. */
-    public static final String USER_NAME_COLUMN_KEY =
-        "torque.userPeer.column.name";
-
-    /** The column name for the id field. */
-    public static final String USER_ID_COLUMN_KEY =
-        "torque.userPeer.column.id";
-
-    /** The column name for the password field. */
-    public static final String USER_PASSWORD_COLUMN_KEY =
-        "torque.userPeer.column.password";
-
-    /** The column name for the first name field. */
-    public static final String USER_FIRST_NAME_COLUMN_KEY =
-        "torque.userPeer.column.firstname";
-
-    /** The column name for the last name field. */
-    public static final String USER_LAST_NAME_COLUMN_KEY =
-        "torque.userPeer.column.lastname";
-
-    /** The column name for the email field. */
-    public static final String USER_EMAIL_COLUMN_KEY =
-        "torque.userPeer.column.email";
-
-    /** The column name for the confirm field. */
-    public static final String USER_CONFIRM_COLUMN_KEY =
-        "torque.userPeer.column.confirm";
-
-    /** The column name for the create date field. */
-    public static final String USER_CREATE_COLUMN_KEY =
-        "torque.userPeer.column.createdate";
-
-    /** The column name for the last login field. */
-    public static final String USER_LAST_LOGIN_COLUMN_KEY =
-        "torque.userPeer.column.lastlogin";
-
-    /** The column name for the objectdata field. */
-    public static final String USER_OBJECTDATA_COLUMN_KEY =
-        "torque.userPeer.column.objectdata";
-
-
-    /** The default value for the column name constant for the login name field. */
-    public static final String USER_NAME_COLUMN_DEFAULT =
-        "LOGIN_NAME";
-
-    /** The default value for the column name constant for the id field. */
-    public static final String USER_ID_COLUMN_DEFAULT =
-        "USER_ID";
-
-    /** The default value for the column name constant for the password field. */
-    public static final String USER_PASSWORD_COLUMN_DEFAULT =
-        "PASSWORD_VALUE";
-
-    /** The default value for the column name constant for the first name field. */
-    public static final String USER_FIRST_NAME_COLUMN_DEFAULT =
-        "FIRST_NAME";
-
-    /** The default value for the column name constant for the last name field. */
-    public static final String USER_LAST_NAME_COLUMN_DEFAULT =
-        "LAST_NAME";
-
-    /** The default value for the column name constant for the email field. */
-    public static final String USER_EMAIL_COLUMN_DEFAULT =
-        "EMAIL";
-
-    /** The default value for the column name constant for the confirm field. */
-    public static final String USER_CONFIRM_COLUMN_DEFAULT =
-        "CONFIRM_VALUE";
-
-    /** The default value for the column name constant for the create date field. */
-    public static final String USER_CREATE_COLUMN_DEFAULT =
-        "CREATED";
-
-    /** The default value for the column name constant for the last login field. */
-    public static final String USER_LAST_LOGIN_COLUMN_DEFAULT =
-        "LAST_LOGIN";
-
-    /** The default value for the column name constant for the objectdata field. */
-    public static final String USER_OBJECTDATA_COLUMN_DEFAULT =
-        "OBJECTDATA";
-
-    /** The property name of the bean property for the login name field. */
-    public static final String USER_NAME_PROPERTY_KEY =
-        "torque.user.property.name";
-
-    /** The property name of the bean property for the id field. */
-    public static final String USER_ID_PROPERTY_KEY =
-        "torque.user.property.id";
-
-    /** The property name of the bean property for the password field. */
-    public static final String USER_PASSWORD_PROPERTY_KEY =
-        "torque.user.property.password";
-
-    /** The property name of the bean property for the first name field. */
-    public static final String USER_FIRST_NAME_PROPERTY_KEY =
-        "torque.user.property.firstname";
-
-    /** The property name of the bean property for the last name field. */
-    public static final String USER_LAST_NAME_PROPERTY_KEY =
-        "torque.user.property.lastname";
-
-    /** The property name of the bean property for the email field. */
-    public static final String USER_EMAIL_PROPERTY_KEY =
-        "torque.user.property.email";
-
-    /** The property name of the bean property for the confirm field. */
-    public static final String USER_CONFIRM_PROPERTY_KEY =
-        "torque.user.property.confirm";
-
-    /** The property name of the bean property for the create date field. */
-    public static final String USER_CREATE_PROPERTY_KEY =
-        "torque.user.property.createdate";
-
-    /** The property name of the bean property for the last login field. */
-    public static final String USER_LAST_LOGIN_PROPERTY_KEY =
-        "torque.user.property.lastlogin";
-
-    /** The property name of the bean property for the last login field. */
-    public static final String USER_OBJECTDATA_PROPERTY_KEY =
-        "torque.user.property.objectdata";
-
-    /** The default value of the bean property for the login name field. */
-    public static final String USER_NAME_PROPERTY_DEFAULT =
-        "UserName";
-
-    /** The default value of the bean property for the id field. */
-    public static final String USER_ID_PROPERTY_DEFAULT =
-        "UserId";
-
-    /** The default value of the bean property for the password field. */
-    public static final String USER_PASSWORD_PROPERTY_DEFAULT =
-        "Password";
-
-    /** The default value of the bean property for the first name field. */
-    public static final String USER_FIRST_NAME_PROPERTY_DEFAULT =
-        "FirstName";
-
-    /** The default value of the bean property for the last name field. */
-    public static final String USER_LAST_NAME_PROPERTY_DEFAULT =
-        "LastName";
-
-    /** The default value of the bean property for the email field. */
-    public static final String USER_EMAIL_PROPERTY_DEFAULT =
-        "Email";
-
-    /** The default value of the bean property for the confirm field. */
-    public static final String USER_CONFIRM_PROPERTY_DEFAULT =
-        "Confirmed";
-
-    /** The default value of the bean property for the create date field. */
-    public static final String USER_CREATE_PROPERTY_DEFAULT =
-        "CreateDate";
-
-    /** The default value of the bean property for the last login field. */
-    public static final String USER_LAST_LOGIN_PROPERTY_DEFAULT =
-        "LastLogin";
-
-    /** The default value of the bean property for the objectdata field. */
-    public static final String USER_OBJECTDATA_PROPERTY_DEFAULT =
-        "Objectdata";
-};
-
-
diff --git a/extensions/torque/src/java/org/apache/turbine/services/security/torque/package.html b/extensions/torque/src/java/org/apache/turbine/services/security/torque/package.html
deleted file mode 100644
index 41ede8f..0000000
--- a/extensions/torque/src/java/org/apache/turbine/services/security/torque/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-A security service implementation based on Torque generated peer classes.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/extensions/torque/src/macros/TurbineMacros.vm b/extensions/torque/src/macros/TurbineMacros.vm
deleted file mode 100644
index 07f6073..0000000
--- a/extensions/torque/src/macros/TurbineMacros.vm
+++ /dev/null
@@ -1,2 +0,0 @@
-For some reason the build for Maven wants this.  Something in how the

-project inheritance sorts out postGoals.
\ No newline at end of file
diff --git a/extensions/torque/src/schema/id-table-schema.xml b/extensions/torque/src/schema/id-table-schema.xml
deleted file mode 100644
index 1537a5f..0000000
--- a/extensions/torque/src/schema/id-table-schema.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_1.dtd">
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<!-- ==================================================================== -->
-<!--                                                                      -->
-<!-- I D  B R O K E R  S C H E M A                                        -->
-<!--                                                                      -->
-<!-- ==================================================================== -->
-<!-- This is the XML schema use by Torque to generate the SQL for         -->
-<!-- ID_TABLE table used by the id broker mechanism in Torque.            -->
-<!-- ==================================================================== -->
-<!-- @author: <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>       -->
-<!-- @version $Id$ -->
-<!-- ==================================================================== -->
-
-<database name="@DATABASE_DEFAULT@">
-  <table name="ID_TABLE" idMethod="idbroker">
-    <column name="ID_TABLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="TABLE_NAME" required="true" size="255" type="VARCHAR"/>
-    <column name="NEXT_ID" type="INTEGER"/>
-    <column name="QUANTITY" type="INTEGER"/>
-
-    <unique>
-      <unique-column name="TABLE_NAME"/>
-    </unique>
-
-  </table>
-</database>
diff --git a/extensions/torque/src/schema/scheduler-schema.xml b/extensions/torque/src/schema/scheduler-schema.xml
deleted file mode 100644
index 6e58bfe..0000000
--- a/extensions/torque/src/schema/scheduler-schema.xml
+++ /dev/null
@@ -1,52 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_1.dtd">
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<!-- ==================================================================== -->
-<!--                                                                      -->
-<!-- S C H E D U L E R   T U R B I N E   S C H E M A                      -->
-<!--                                                                      -->
-<!-- ==================================================================== -->
-<!-- This is the the XML schema used by Torque to generate the necessary  -->
-<!-- sources used to create/initialize the Turbine scheduler service.     -->
-<!-- Torque will create the SQL for the database, and the Peer-based      -->
-<!-- Object Model.                                                        -->
-<!-- ==================================================================== -->
-<!-- @author: <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>       -->
-<!-- @version $Id$ -->
-<!-- ==================================================================== -->
-
-<database name="@DATABASE_DEFAULT@">
-  
-  <table name="TURBINE_SCHEDULED_JOB" idMethod="idbroker" javaName="JobEntryTorque">
-    <column name="JOB_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="SECOND" javaName="Second" default="-1" 
-            required="true" type="INTEGER"/>
-    <column name="MINUTE" javaName="Minute" default="-1" 
-            required="true" type="INTEGER"/>
-    <column name="HOUR" javaName="Hour" default="-1" 
-            required="true" type="INTEGER"/>
-    <column name="WEEK_DAY" default="-1" required="true" type="INTEGER"/>
-    <column name="DAY_OF_MONTH" default="-1" required="true" type="INTEGER"/>
-    <column name="TASK" required="true" size="99" type="VARCHAR"/>
-    <column name="EMAIL" size="99" type="VARCHAR"/>
-    <column name="PROPERTY" javaName="Property" type="VARBINARY"/>
-  </table>
-
-</database>
diff --git a/extensions/torque/src/schema/torque-security-schema.xml b/extensions/torque/src/schema/torque-security-schema.xml
deleted file mode 100644
index 354aa14..0000000
--- a/extensions/torque/src/schema/torque-security-schema.xml
+++ /dev/null
@@ -1,118 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_1.dtd">
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<!-- ====================================================================     -->
-<!--                                                                          -->
-<!-- B A S E  T U R B I N E  S C H E M A                                      -->
-<!--                                                                          -->
-<!-- ====================================================================     -->
-<!-- This is the the XML schema used by Torque to generate the necessary      -->
-<!-- sources used to create/initialize the base Turbine system. Torque        -->
-<!-- will create the SQL for the database required by Turbine, and the        -->
-<!-- Peer-based Object Model used by Turbine internally to manage             -->
-<!-- users and security.                                                      -->
-<!-- ====================================================================     -->
-<!-- @author: <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> -->
-<!-- @version $Id$ -->
-<!-- ====================================================================     -->
-
-<database name="@DATABASE_DEFAULT@">
-  
-  <table name="TURBINE_PERMISSION" idMethod="idbroker">
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-  
-    <unique>
-      <unique-column name="PERMISSION_NAME"/>
-    </unique>        
-    
-  </table>
-
-  <table name="TURBINE_ROLE" idMethod="idbroker">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_NAME" required="true" size="64" type="VARCHAR" javaName="Name"/>
-  
-    <unique>
-        <unique-column name="ROLE_NAME"/>
-    </unique>
-    
-  </table>
-
-  <table name="TURBINE_GROUP" idMethod="idbroker">
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_NAME" required="true" type="VARCHAR" size="64" javaName="Name"/>
-    
-    <unique>
-        <unique-column name="GROUP_NAME"/>
-    </unique>
-  
-  </table>
-    
-  <table name="TURBINE_ROLE_PERMISSION">
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="PERMISSION_ID" required="true" primaryKey="true" type="INTEGER"/>
-    
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-    
-    <foreign-key foreignTable="TURBINE_PERMISSION">
-      <reference local="PERMISSION_ID" foreign="PERMISSION_ID"/>
-    </foreign-key>
-  </table>
-    
-  <table name="TURBINE_USER" idMethod="idbroker">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="UserName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED" type="TIMESTAMP"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>        
-  
-  </table>
-
-  <table name="TURBINE_USER_GROUP_ROLE">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="GROUP_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="ROLE_ID" required="true" primaryKey="true" type="INTEGER"/>
-  
-    <foreign-key foreignTable="TURBINE_USER">
-      <reference local="USER_ID" foreign="USER_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_GROUP">
-      <reference local="GROUP_ID" foreign="GROUP_ID"/>
-    </foreign-key>
-
-    <foreign-key foreignTable="TURBINE_ROLE">
-      <reference local="ROLE_ID" foreign="ROLE_ID"/>
-    </foreign-key>
-  </table>
-
-</database>
diff --git a/extensions/torque/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java b/extensions/torque/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java
deleted file mode 100644
index 10061fa..0000000
--- a/extensions/torque/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.apache.turbine.modules.scheduledjob;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.ScheduledJob;
-import org.apache.turbine.services.schedule.JobEntry;
-
-/**
- * Simple job for use with unit testing of the scheduler service.  This
- * job merely increments a static counter variable when it is run.  You 
- * can check the counter to verify the job has run.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class SimpleJob
-        extends ScheduledJob
-{
-    /** The test counter */
-    private static int counter = 0;
-
-    /**
-     * Run the Jobentry from the scheduler queue.
-     *
-     * @param job The job to run.
-     * @throws java.lang.Exception generic exception
-     */
-    public void run(JobEntry job)
-            throws Exception
-    {
-        counter++;
-        System.out.println("\n\nI AM RUNNING!\n\n");
-        
-    }
-    /**
-     * Returns the counter value.
-     *
-     * @return The counter value
-     */
-    public static int getCounter()
-    {
-        return counter;
-    }
-
-    /**
-     * Sets the counter.
-     *
-     * @param i The new counter value
-     */
-    public static void setCounter(int i)
-    {
-        counter = i;
-    }
-}
diff --git a/extensions/torque/src/test/org/apache/turbine/services/schedule/JobEntryTest.java b/extensions/torque/src/test/org/apache/turbine/services/schedule/JobEntryTest.java
deleted file mode 100644
index b70a8eb..0000000
--- a/extensions/torque/src/test/org/apache/turbine/services/schedule/JobEntryTest.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-//import org.apache.turbine.test.BaseTestCase;
-
-/**
- * Unit testing for Job Entries.  Ensure that removing NumberKey from TurbineNonPersistentScheduler 
- * still works.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class JobEntryTest extends TestCase
-{
-
-    private JobEntryTorque je1;
-    private JobEntryTorque je2;
-
-    public JobEntryTest(String name)
-            throws Exception
-    {
-        super(name);
-
-        // Add a new job entry
-        je1 = new JobEntryTorque();
-        je1.setJobId(1);
-        je1.setSecond(0);
-        je1.setMinute(1);
-        je1.setHour(-1);
-        je1.setDayOfMonth(-1);
-        je1.setWeekDay(-1);
-        je1.setTask("SimpleJob");
-
-        je2 = new JobEntryTorque();
-        je2.setJobId(2);
-        je2.setSecond(0);
-        je2.setMinute(1);
-        je2.setHour(-1);
-        je2.setDayOfMonth(-1);
-        je2.setWeekDay(-1);
-        je2.setTask("SimpleJob");
-    }
-
-    public static Test suite()
-    {
-        return new TestSuite(JobEntryTest.class);
-    }
-
-    /**
-     * Tests the ability to enable and disable the service.
-     */
-    public void testCompareTo()
-    {
-        assertFalse(je1.equals(je2));
-        je2.setJobId(je1.getJobId());
-        assertTrue(je1.equals(je2));
-        
-    }
-
-}
diff --git a/extensions/torque/src/test/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerServiceTest.java b/extensions/torque/src/test/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerServiceTest.java
deleted file mode 100644
index ca7726f..0000000
--- a/extensions/torque/src/test/org/apache/turbine/services/schedule/TurbineNonPersistentSchedulerServiceTest.java
+++ /dev/null
@@ -1,216 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.modules.scheduledjob.SimpleJob;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-//import org.apache.turbine.test.BaseTestCase;
-
-/**
- * Unit testing for the non-persistent implementation of the scheduler service.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineNonPersistentSchedulerServiceTest extends TestCase
-{
-    private static final String PREFIX = "services." + ScheduleService.SERVICE_NAME + '.';
-
-    public TurbineNonPersistentSchedulerServiceTest(String name)
-            throws Exception
-    {
-        super(name);
-
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.setApplicationRoot(".");
-
-        Configuration cfg = new BaseConfiguration();
-        cfg.setProperty(PREFIX + "classname", TurbineNonPersistentSchedulerService.class.getName());
-
-        cfg.setProperty(PREFIX + "scheduler.jobs", "SimpleJob");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.ID", "1");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.SECOND", "10");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.MINUTE", "-1");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.HOUR", "-1");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.WEEK_DAY", "-1");
-        cfg.setProperty(PREFIX + "scheduler.job.SimpleJob.DAY_OF_MONTH", "-1");
-        cfg.setProperty(PREFIX + "enabled", "true");
-
-        serviceManager.setConfiguration(cfg);
-
-        try
-        {
-            serviceManager.init();
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public static Test suite()
-    {
-        return new TestSuite(TurbineNonPersistentSchedulerServiceTest.class);
-    }
-
-    /**
-     * Tests the ability to enable and disable the service.
-     */
-    public void testEnableDisable()
-    {
-        try
-        {
-            TurbineScheduler.startScheduler();
-            assertEquals(true, TurbineScheduler.isEnabled());
-
-            TurbineScheduler.stopScheduler();
-            assertEquals(false, TurbineScheduler.isEnabled());
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Tests the ability to add and remove a job.  A list of jobs will be obtained from
-     * the service to determine if the operation were successful.
-     */
-    public void testAddRemoveJob()
-    {
-        try
-        {
-            // get the current job count for later comparison
-            int jobCount = TurbineScheduler.listJobs().size();
-
-            // Add a new job entry
-			JobEntryTorque je = new JobEntryTorque();
-            je.setJobId(jobCount + 1);
-            je.setSecond(0);
-            je.setMinute(1);
-            je.setHour(-1);
-            je.setDayOfMonth(-1);
-            je.setWeekDay(-1);
-            je.setTask("SimpleJob");
-
-            TurbineScheduler.addJob(je);
-            assertEquals(jobCount + 1, TurbineScheduler.listJobs().size());
-
-            TurbineScheduler.removeJob(je);
-            assertEquals(jobCount, TurbineScheduler.listJobs().size());
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Tests the ability to retrieve the job added during initialization.
-     */
-    public void testGetJob()
-    {
-        try
-        {
-			JobEntryTorque je = (JobEntryTorque)TurbineScheduler.getJob(1);
-            assertEquals(je.getJobId(), 1);
-            assertEquals(je.getSecond(), 10);
-            assertEquals(je.getMinute(), -1);
-            assertEquals(je.getHour(), -1);
-            assertEquals(je.getDayOfMonth(), -1);
-            assertEquals(je.getWeekDay(), -1);
-            assertEquals(je.getTask(), "SimpleJob");
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /** Test to make sure a job actually runs.  Currently not work.
-     * @TODO Must get testRunningJob to work.
-     *
-     */
-    public void OFFtestRunningJob()
-    {
-        try
-        {
-           int beforeCount = SimpleJob.getCounter();
-           Thread.sleep(120000);
-           int afterCount = SimpleJob.getCounter();
-           assertTrue(beforeCount < afterCount);
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-}
diff --git a/extensions/torque/xdocs/changes.xml b/extensions/torque/xdocs/changes.xml
deleted file mode 100644
index d33e749..0000000
--- a/extensions/torque/xdocs/changes.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Changes</title>
-  </properties>
-
-  <body>
-
-    <release version="2.4-dev" date="in CVS">
-      <action dev="epugh" type="add">
-        Initial creation of project with Torque backed implementations for Turbine
-        Schedule and Security services.
-      </action>     	
-    </release>
-
-  </body>
-</document>
-
diff --git a/maven.xml b/maven.xml
deleted file mode 100644
index c6e53b5..0000000
--- a/maven.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<!-- ======================================================================== -->
-<!--                                                                          -->
-<!--  maven Buildfile                                                         -->
-<!--                                                                          -->
-<!-- $Id$ -->
-<!--                                                                          -->
-<!-- ======================================================================== -->
-
-<project
-  xmlns:j="jelly:core"
-  xmlns:m="maven"
-  xmlns:u="jelly:util"
-  xmlns:maven="jelly:maven"
-  default="turbine:build">
-
-  
-  <!-- ================================================================== -->
-  <!-- C O M P I L E   P O S T - G O A L                                  -->
-  <!-- ================================================================== -->
-  <!-- executed before the building of the jar, it copies all the various -->
-  <!-- resource files into the jar build directory                        -->
-  <!-- ================================================================== -->
-  <postGoal name="java:compile">
-    <copy
-      file="${maven.src.dir}/dtd/intake.dtd"
-      todir="${maven.build.dest}/org/apache/turbine/services/intake/transform"
-    />
-    <copy
-      file="${maven.src.dir}/macros/TurbineMacros.vm"
-      todir="${maven.build.dest}/macros"
-    />
-  </postGoal>
-
-
-  <!-- ================================================== -->
-  <!-- Perform the nightly build process                  -->
-  <!-- ================================================== -->
-  <goal name="nightly:build"
-      description="Build distribution snapshots">
-
-    <cvs command="-q update -Pd"/>
-    <attainGoal name="clean"/>
-    <maven:snapshot project="${pom}"/>
-
-    <j:set var="maven.final.name" value="${snapshotSignature}-${pom.currentVersion}"/>
-    <attainGoal name="dist:build"/>
-
-  </goal>
-
-  <!-- ================================================== -->
-  <!-- Deploy the nightly builds                          -->
-  <!-- ================================================== -->
-  <goal name="nightly:deploy"
-     prereqs="nightly:build"
-     description="Deploy the nightly builds">
-
-    <m:user-check user="${maven.username}"/>
-
-    <echo>
-       deploymentAddress = ${pom.siteAddress}
-       deploymentDirectory = ${turbine.nightly.dist.dir}
-    </echo>
-
-    <j:set var="dist.dir" value="${maven.build.dir}/distributions" />
-
-    <!-- Make sure the destination directory exists before trying to copy -->
-    <exec dir="." executable="${maven.ssh.executable}">
-       <arg line="${pom.siteAddress} -l ${maven.username} 'mkdir -p ${turbine.nightly.dist.dir}'"/>
-    </exec>
-
-    <fileScanner var="distFiles">
-      <fileset dir="${dist.dir}">
-      </fileset>
-    </fileScanner>
-
-    <j:forEach var="file" items="${distFiles.iterator()}">
-      <echo>Processing ${file}</echo>
-
-      <exec dir="${dist.dir}" executable="${maven.scp.executable}">
-        <arg value="${file}"/>
-        <arg value="${maven.username}@${pom.siteAddress}:${turbine.nightly.dist.dir}"/>
-      </exec>
-    </j:forEach>
-
-  </goal>
-
-  <!-- ================================================== -->
-  <!-- Generate the Maven Turbine Plugin Site             -->
-  <!-- ================================================== -->
-  <!-- postGoal name="site">
-     <maven:reactor
-      basedir="${basedir}/src/maven-plugin"
-      includes="project.xml"
-      excludes="examples/*"
-      goals="clean,site"
-      banner="Building"
-      ignoreFailures="false"
-    />
-    <copy todir="${maven.build.dir}/docs/maven-turbine-plugin">
-      <fileset dir="${basedir}/src/maven-plugin/target/docs"/>
-    </copy>
-  </postGoal -->
-  
-  <!-- ================================================== -->
-  <!-- Generate the Torque Implementations for Schedule   -->
-  <!-- and Security Site                                  -->
-  <!-- ================================================== -->
-  <!--postGoal name="site">
-     <maven:reactor
-      basedir="${basedir}/src/torque"
-      includes="project.xml"
-      excludes="examples/*"
-      goals="clean,site"
-      banner="Building"
-      ignoreFailures="false"
-    />
-    <copy todir="${maven.build.dir}/docs/turbine-torque-impl">
-      <fileset dir="${basedir}/src/torque/target/docs"/>
-    </copy>
-  </postGoal-->  
-  
-  <goal name="turbine:build" description="Build all Turbine components">
-  	<attainGoal name="jar"/>
-  	<attainGoal name="multiproject:artifact"/>  	
-  </goal>
-  <goal name="turbine:clean" description="Clean all Turbine components" prereqs="clean">
-  	<attainGoal name="multiproject:clean"/>  	
-  </goal>  
-</project>
diff --git a/project.properties b/project.properties
deleted file mode 100644
index bb595b4..0000000
--- a/project.properties
+++ /dev/null
@@ -1,75 +0,0 @@
-# -------------------------------------------------------------------
-# Copyright 2001-2004 The Apache Software Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-# 
-#     http://www.apache.org/licenses/LICENSE-2.0
-# 
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-# P R O J E C T  P R O P E R T I E S
-#
-# $Id$
-#
-# Do not change this file. Please use build.properties in this directory
-# to do site or installation specific changes to the project build.
-# -------------------------------------------------------------------
-
-#========================================================================
-# You can uncomment this if you're willing to use the unofficial
-# Turbine-specific jar repository at the Turbine site. This will
-# contain all the jars needed to build Turbine, even if a jar
-# is missing on ibiblio
-#========================================================================
-maven.repo.remote=http://www.ibiblio.org/maven/,http://jakarta.apache.org/turbine/repo
-
-maven.checkstyle.format = turbine
-#maven.home = ${user.home}/maven
-
-# display the date on the site
-maven.xdoc.date = left
-# Display the version the web site is documenting
-maven.xdoc.version = ${pom.currentVersion}
-
-compile.debug = on
-compile.optimize = off
-compile.deprecation = off
-maven.compile.deprecation = off
-maven.test.ignore.failures=false
-maven.junit.fork=true
-
-# -------------------------------------------------------------------
-#  M U L T I P R O J E C T   S E T T I N G S
-# -------------------------------------------------------------------
-maven.multiproject.ignoreFailures=true
-maven.multiproject.navigation=aggregate
-maven.multiproject.aggregateDir=
-maven.multiproject.type=jar
-maven.multiproject.includes=extensions/*/project.xml
-#maven.multiproject.excludes=
-
-# -------------------------------------------------------------------
-# C A C T U S  T E S T  P R O P E R T I E S
-# -------------------------------------------------------------------
-
-maven.war.src=src/test-cactus/testapp
-cactus.home.tomcat4x = c:/java/tomcat
-# The below tests don't seem to work at all
-cactus.test.fileset.exclude=org.apache.turbine.services.xmlrpc.util.FileHandlerTest,org.apache.turbine.util.velocity.TestVelocityEmail
-
-# -------------------------------------------------------------------
-# N I G H T L Y   B U I L D   P R O P E R T I E S
-# -------------------------------------------------------------------
-
-turbine.nightly.dist.dir = \
-    /www/jakarta.apache.org/builds/jakarta-turbine/turbine-2/nightly
-
-
diff --git a/project.xml b/project.xml
deleted file mode 100644
index f35c083..0000000
--- a/project.xml
+++ /dev/null
@@ -1,802 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<project>
-  <pomVersion>3</pomVersion>
-  <name>jakarta-turbine-2</name>
-  <groupId>turbine</groupId>
-  <id>turbine</id>
-  <currentVersion>2.4-SNAPSHOT</currentVersion>
-  <organization>
-    <name>Apache Software Foundation</name>
-    <url>http://jakarta.apache.org/</url>
-    <logo>/images/jakarta.png</logo>
-  </organization>
-  <logo>/images/blue-logo.gif</logo>
-  <inceptionYear>2000</inceptionYear>
-  <package>org.apache.turbine</package>
-
-  <gumpRepositoryId>jakarta</gumpRepositoryId>
-
-  <shortDescription>A servlet based framework.</shortDescription>
-  <description>Turbine is a servlet based framework that allows experienced Java developers to quickly build secure web applications. Parts of Turbine can also be used independently of the web portion of Turbine as well. In other words, we strive to make portions of Turbine easily available for use in other applications.</description>
-  <url>http://jakarta.apache.org/turbine/turbine/development/turbine-2.4/</url>
-  <issueTrackingUrl>http://issues.apache.org/scarab/issues</issueTrackingUrl>
-  <siteAddress>jakarta.apache.org</siteAddress>
-  <siteDirectory>/www/jakarta.apache.org/turbine/turbine/development/turbine-2.4/</siteDirectory>
-  <distributionDirectory>/www/www.apache.org/dist/jakarta/turbine</distributionDirectory>
-
-  <repository>
-    <connection>scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:jakarta-turbine-2</connection>
-    <developerConnection>scm:cvs:ext:${maven.username}@cvs.apache.org:/home/cvs:jakarta-turbine-2</developerConnection>
-    <url>http://cvs.apache.org/viewcvs/jakarta-turbine-2/</url>
-  </repository>
-
-<releases>
-    <release>
-      <version>2.1</version>
-      <tag>TURBINE_2_1</tag>
-    </release>
-    <release>
-      <version>2.2</version>
-      <tag>TURBINE_2_2_0</tag>
-    </release>
-    <release>
-      <version>2.3-rc1</version>
-      <tag>TURBINE_2_3_RC1</tag>
-    </release>
-    <release>
-      <version>2.3-rc2</version>
-      <tag>TURBINE_2_3_RC2</tag>
-    </release>
-    <release>
-      <version>2.3</version>
-      <tag>TURBINE_2_3</tag>
-    </release>
-  </releases>
-
-  <mailingLists>
-    <mailingList>
-      <name>Turbine User List</name>
-      <subscribe>turbine-user-subscribe@jakarta.apache.org</subscribe>
-      <unsubscribe>turbine-user-unsubscribe@jakarta.apache.org</unsubscribe>
-      <archive>http://nagoya.apache.org/eyebrowse/SummarizeList?listName=turbine-user@jakarta.apache.org</archive>
-    </mailingList>
-    <mailingList>
-      <name>Turbine Developer List</name>
-      <subscribe>turbine-dev-subscribe@jakarta.apache.org</subscribe>
-      <unsubscribe>turbine-dev-unsubscribe@jakarta.apache.org</unsubscribe>
-      <archive>http://nagoya.apache.org/eyebrowse/SummarizeList?listName=turbine-dev@jakarta.apache.org</archive>
-    </mailingList>
-  </mailingLists>
-
-  <developers>
-    <developer>
-      <name>Jeff Brekke</name>
-      <id>brekke</id>
-      <email>ekkerbj@yahoo.com</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>Dave Bryson</name>
-      <id>daveb</id>
-      <email>mbryson@mont.mindspring.com</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>Kevin A. Burton</name>
-      <id>burton</id>
-      <email>burton@relativity.yi.org</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>Eric Dobbs</name>
-      <id>dobbs</id>
-      <email>dobbs@apache.org</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>Scott Eade</name>
-      <id>seade</id>
-      <email>seade@backstagetech.com.au</email>
-      <organization>Backstage Technologies Pty. Ltd.</organization>
-    </developer>
-    <developer>
-      <name>Fedor Karpelevitch</name>
-      <id>fedor</id>
-      <email>fedor@karpelevitch.net</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>Sean Legassick</name>
-      <id>legassick</id>
-      <email>sean@informage.net</email>
-      <organization/>
-    </developer>
-    <developer>
-      <name>John McNally</name>
-      <id>jmcnally</id>
-      <email>jmcnally@collab.net</email>
-      <organization>CollabNet, Inc.</organization>
-    </developer>
-    <developer>
-      <name>Quinton McCombs</name>
-      <id>quintonm</id>
-      <email>quintonm@bellsouth.net</email>
-      <organization>NEqualsOne</organization>
-      <roles>
-        <role>Java Developer</role>
-      </roles>
-    </developer>
-    <developer>
-      <name>Martin Poeschl</name>
-      <id>mpoeschl</id>
-      <email>mpoeschl@marmot.at</email>
-      <organization>tucana.at</organization>
-    </developer>
-    <developer>
-      <name>Eric Pugh</name>
-      <id>epugh</id>
-      <email>epugh@opensourceconnections.com</email>
-      <organization>OpenSource Connections</organization>
-    </developer>
-    <developer>
-      <name>Daniel Rall</name>
-      <id>dlr</id>
-      <email>dlr@finemaltcoding.com</email>
-      <organization>CollabNet, Inc.</organization>
-    </developer>
-    <developer>
-      <name>Henning P. Schmiedehausen</name>
-      <id>henning</id>
-      <email>hps@intermeta.de</email>
-      <organization>INTERMETA - Gesellschaft fuer Mehrwertdienste mbH</organization>
-    </developer>
-    <developer>
-      <name>Kurt Schrader</name>
-      <id>kschrader</id>
-      <email>kschrader@karmalab.org</email>
-      <organization>University of Michigan</organization>
-    </developer>
-    <developer>
-      <name>Jon Scott Stevens</name>
-      <id>jon</id>
-      <email>jon@latchkey.com</email>
-      <organization>CollabNet, Inc.</organization>
-    </developer>
-  </developers>
-
-  <contributors>
-    <contributor>
-      <name>Gary Bartlett</name>
-      <email>gary_a_bartlett@yahoo.com</email>
-    </contributor>
-    <contributor>
-      <name>Youngho Cho</name>
-      <email>youngho@nannet.co.kr</email>
-    </contributor>
-    <contributor>
-      <name>Frank Conradie</name>
-      <email>frank@opticode.co.za</email>
-    </contributor>
-    <contributor>
-      <name>Gonzalo A. Diethelm</name>
-      <email>gonzalo.diethelm@iname.com</email>
-    </contributor>
-    <contributor>
-      <name>David Duddleston</name>
-      <email>david@i2a.com</email>
-    </contributor>
-    <contributor>
-      <name>Christopher Elkins</name>
-      <email>celkins@scardini.com</email>
-    </contributor>
-    <contributor>
-      <name>Brad Folkens</name>
-      <email>bfolkens@downers.us</email>
-    </contributor>    
-    <contributor>
-      <name>Jian He</name>
-      <email>hjnet@163.net</email>
-    </contributor>
-    <contributor>
-      <name>Humberto Hernandez</name>
-      <email>hhernandez@itweb.com.mx</email>
-    </contributor>
-    <contributor>
-      <name>Nissim Karpenstein</name>
-      <email>nissim@nksystems.com</email>
-    </contributor>
-    <contributor>
-      <name>Rafal Krzewski</name>
-      <email>krzewski@e-point.pl</email>
-    </contributor>
-    <contributor>
-      <name>Chris Kimpton</name>
-      <email>kimptoc.mail@bigfoot.com</email>
-    </contributor>
-    <contributor>
-      <name>Josh Lucas</name>
-      <email>josh@stonecottage.com</email>
-    </contributor>
-    <contributor>
-      <name>Carl Ludwig</name>
-      <email>carl@destinymusic.com</email>
-    </contributor>
-    <contributor>
-      <name>Jonas Mauras</name>
-      <email>jm@mediaphil.de</email>
-    </contributor>
-    <contributor>
-      <name>Brett McLaughlin</name>
-      <email>bmclaugh@algx.net</email>
-    </contributor>
-    <contributor>
-      <name>Leon Messerschmidt</name>
-      <email>leon@opticode.co.za</email>
-    </contributor>
-    <contributor>
-      <name>Chris Meyer</name>
-      <email>cmeyer@gatan.com</email>
-    </contributor>
-    <contributor>
-      <name>Steven Nagy</name>
-      <email>snagy@web-publicity.com</email>
-    </contributor>
-    <contributor>
-      <name>Kasper Nielsen</name>
-      <email>kav@kav.dk</email>
-    </contributor>
-    <contributor>
-      <name>Paul O'Leary</name>
-      <email>paul@evolventtech.com</email>
-    </contributor>
-    <contributor>
-      <name>Giacomo Pati</name>
-      <email>Giacomo.Pati@pwr.ch</email>
-    </contributor>
-    <contributor>
-      <name>Mark Porter</name>
-      <email>mark.porter@canlink.com</email>
-    </contributor>
-    <contributor>
-      <name>Jeff Prickett</name>
-      <email>jeffprickett@mindspring.com</email>
-    </contributor>
-    <contributor>
-      <name>Ilkka Priha</name>
-      <email>ilkka.priha@simsoft.fi</email>
-    </contributor>
-    <contributor>
-      <name>Cameron Riley</name>
-      <email>criley@ekmail.com</email>
-    </contributor>
-    <contributor>
-      <name>Greg Ritter</name>
-      <email>greg@shwoop.com</email>
-    </contributor>
-    <contributor>
-      <name>Ingo Schuster</name>
-      <email>ingo@raleigh.ibm.com</email>
-    </contributor>
-    <contributor>
-      <name>Sam Solon</name>
-      <email>ssolon@usa.net</email>
-    </contributor>    
-    <contributor>
-      <name>Costas Stergiou</name>
-      <email>csterg@aias.gr</email>
-    </contributor>
-    <contributor>
-      <name>George Stewart</name>
-      <email>georgestewart@yahoo.com</email>
-    </contributor>
-    <contributor>
-      <name>Ralf Stranzenbach</name>
-      <email>ralf@reswi.ruhr.de</email>
-    </contributor>
-    <contributor>
-      <name>Hakan Tandogan</name>
-      <email>hakan42@gmx.de</email>
-    </contributor>
-    <contributor>
-      <name>Scott C. Tavares</name>
-      <email>stavares@home.com</email>
-    </contributor>
-    <contributor>
-      <name>John Thorhauer</name>
-      <email>john@zenplex.com</email>
-    </contributor>
-    <contributor>
-      <name>Magn&#250;s &#254;&#243;r Torfason</name>
-      <email>magnus@handpoint.com</email>
-    </contributor>
-    <contributor>
-      <name>Scott Weaver</name>
-      <email>sweaver@rippe.com</email>
-    </contributor>
-  </contributors>
-
-  <dependencies>
-  <!-- t3 -->
-    <dependency>
-      <groupId>mx4j</groupId>
-      <artifactId>mx4j-jmx</artifactId>
-      <version>1.1.1</version>
-    </dependency>
-    <dependency>
-      <groupId>mx4j</groupId>
-      <artifactId>mx4j-tools</artifactId>
-      <version>1.1.1</version>
-    </dependency>  	
-    <dependency>
-      <groupId>avalon-framework</groupId>
-      <artifactId>avalon-framework-api</artifactId>
-      <version>4.1.5</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-framework</groupId>
-      <artifactId>avalon-framework-impl</artifactId>
-      <version>4.1.5</version>
-    </dependency>
-	<dependency>
-      <groupId>merlin</groupId>
-      <artifactId>merlin-kernel-spi</artifactId>
-      <version>3.2-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>merlin</groupId>
-      <artifactId>merlin-kernel-impl</artifactId>
-      <version>3.2-dev</version>
-    </dependency>
-
-    <dependency>
-      <groupId>avalon-activation</groupId>
-      <artifactId>avalon-activation-api</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-activation</groupId>
-      <artifactId>avalon-activation-spi</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-activation</groupId>
-      <artifactId>avalon-activation-impl</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-
-    <dependency>
-      <groupId>avalon-composition</groupId>
-      <artifactId>avalon-composition-api</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-composition</groupId>
-      <artifactId>avalon-composition-spi</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-composition</groupId>
-      <artifactId>avalon-composition-impl</artifactId>
-      <version>1.2-dev</version>
-    </dependency>
-
-    <dependency>
-      <groupId>avalon-extension</groupId>
-      <artifactId>avalon-extension-spi</artifactId>
-      <version>1.0</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-extension</groupId>
-      <artifactId>avalon-extension-impl</artifactId>
-      <version>1.0</version>
-    </dependency>
-
-    <dependency>
-      <groupId>avalon-meta</groupId>
-      <artifactId>avalon-meta-api</artifactId>
-      <version>1.2.1-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-meta</groupId>
-      <artifactId>avalon-meta-spi</artifactId>
-      <version>1.2.1-dev</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-meta</groupId>
-      <artifactId>avalon-meta-impl</artifactId>
-      <version>1.2.1-dev</version>
-    </dependency>
-
-    <dependency>
-      <groupId>avalon-repository</groupId>
-      <artifactId>avalon-repository-spi</artifactId>
-      <version>1.0b1</version>
-    </dependency>
-    <dependency>
-      <groupId>avalon-repository</groupId>
-      <artifactId>avalon-repository-impl</artifactId>
-      <version>1.0b1</version>
-    </dependency>    
-	 <dependency>
-      <id>logkit</id>
-      <version>1.2</version>
-      <url>http://jakarta.apache.org/avalon/logkit/</url>
-    </dependency>
-
-    <dependency>
-      <groupId>excalibur-lifecycle</groupId>
-      <artifactId>excalibur-lifecycle-api</artifactId>
-      <version>1.0</version>
-    </dependency>
-
-    <dependency>
-      <id>excalibur-i18n</id>
-      <version>1.1</version>
-    </dependency>
-
-    <dependency>
-      <id>excalibur-thread</id>
-      <version>1.1.1</version>
-    </dependency>
-    
-    <dependency>
-      <id>excalibur-event</id>
-      <version>1.0.3</version>
-    </dependency>
-    
-    <dependency>
-      <groupId>excalibur</groupId>
-      <artifactId>excalibur-util-concurrent</artifactId>
-      <version>1.3.1</version>
-    </dependency>
-
-    <dependency>
-      <id>excalibur-configuration</id>
-      <version>1.1</version>
-    </dependency>
-        
-    <dependency>
-      <id>commons-beanutils</id>
-      <version>1.6.1</version>
-      <url>http://jakarta.apache.org/commons/beanutils.html</url>
-    </dependency>
-    <dependency>
-      <id>commons-codec</id>
-      <version>1.1</version>
-    </dependency>
-    <dependency>
-      <id>commons-collections</id>
-      <version>3.1</version>
-      <url>http://jakarta.apache.org/commons/collections/</url>
-    </dependency>
-    <dependency>
-      <id>commons-configuration</id>
-      <version>1.0</version>
-      <url>http://jakarta.apache.org/commons/configuration/</url>
-    </dependency>
-    <dependency>
-      <id>commons-digester</id>
-      <version>1.5</version>
-      <url>http://jakarta.apache.org/commons/digester/</url>
-    </dependency>
-    <dependency>
-      <id>commons-email</id>
-      <version>20030310.165926</version>
-      <url>http://jakarta.apache.org/commons/sandbox/email/</url>
-    </dependency>
-    <dependency>
-      <id>commons-fileupload</id>
-      <version>1.0</version>
-      <url>http://jakarta.apache.org/commons/fileupload/</url>
-    </dependency> 
-    <dependency>
-      <id>commons-lang</id>
-      <version>2.0</version>
-      <url>http://jakarta.apache.org/commons/lang/</url>
-    </dependency>
-    <dependency>
-      <id>commons-logging</id>
-      <version>1.0.4</version>
-      <url>http://jakarta.apache.org/commons/logging.html</url>
-    </dependency>
-    <dependency>
-      <id>commons-pool</id>
-      <version>1.1</version>
-      <url>http://jakarta.apache.org/commons/pool/</url>
-    </dependency>
-    <dependency>
-      <id>cryptix</id>
-      <version>3.2.0</version>
-      <url>http://www.cryptix.org/</url>
-    </dependency>
-    <dependency>
-      <id>dom4j</id>
-      <version>1.4</version>
-      <url>http://www.dom4j.org/</url>
-    </dependency>
-    <dependency>
-      <id>ecs</id>
-      <version>1.4.2</version>
-      <url>http://jakarta.apache.org/ecs/</url>
-    </dependency>
-    <dependency>
-      <id>excalibur-component</id>
-      <version>1.1</version>
-      <url>http://jakarta.apache.org/avalon/</url>
-    </dependency>
-    <dependency>
-      <id>excalibur-instrument</id>
-      <version>1.0</version>
-      <url>http://jakarta.apache.org/avalon/</url>
-    </dependency>
-    <dependency>
-      <id>excalibur-logger</id>
-      <version>1.0.1</version>
-      <url>http://jakarta.apache.org/avalon/</url>
-    </dependency>
-    <dependency>
-      <id>excalibur-pool</id>
-      <version>1.2</version>
-      <url>http://jakarta.apache.org/avalon/</url>
-    </dependency>
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-cache</artifactId>
-      <version>1.0-alpha-3</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/fulcrum-cache</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>    
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-crypto-api</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/fulcrum-crypto</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-crypto-impl</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/fulcrum-crypto</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>    
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-localization-api</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/localization</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>    
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-localization-impl</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/localization</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>      
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-intake</artifactId>
-      <version>1.0-alpha-2</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/intake</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>    
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-factory-api</artifactId>
-      <version>1.0-alpha-2</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/factory</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency> 
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-factory-impl</artifactId>
-      <version>1.0-alpha-2</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/factory</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>          
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-mimetype-api</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/fulcrum-mimetype</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>  
-    <dependency>
-      <groupId>fulcrum</groupId>
-      <artifactId>fulcrum-mimetype-impl</artifactId>
-      <version>1.0-alpha-4</version>
-      <url>http://jakarta.apache.org/turbine/fulcrum/fulcrum-mimetype</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>       
-    <dependency>
-      <groupId>activation</groupId>
-      <artifactId>activation</artifactId>
-      <version>1.0.2</version>
-      <url>http://java.sun.com/products/javabeans/glasgow/jaf.html</url>
-    </dependency>
-    <dependency>
-      <id>javamail</id>
-      <version>1.3.1</version>
-      <url>http://java.sun.com/products/javamail/</url>
-    </dependency>
-    <dependency>
-      <id>jdbc</id>
-      <version>2.0</version>
-      <url>http://java.sun.com/products/jdbc/</url>
-    </dependency>
-    <dependency>
-      <id>jndi</id>
-      <version>1.2.1</version>
-      <url>http://java.sun.com/products/jndi/</url>
-    </dependency>
-    <dependency>
-      <id>junit</id>
-      <version>3.8.1</version>
-      <url>http://www.junit.org/</url>
-    </dependency>
-    <!-- ORO must be loaded before Jython, as Jython includes some ORO -->
-    <!-- classes which cause the Maven JXR plug-in to fail. -->
-    <dependency>
-      <id>oro</id>
-      <version>2.0.7</version>
-      <url>http://jakarta.apache.org/oro/</url>
-    </dependency>
-    <dependency>
-      <id>jython</id>
-      <version>2.1</version>
-      <url>http://www.jython.org/</url>
-    </dependency>
-    <dependency>
-      <id>log4j</id>
-      <version>1.2.8</version>
-      <url>http://jakarta.apache.org/log4j/</url>
-    </dependency>
-    <dependency>
-      <id>servletapi</id>
-      <version>2.3</version>
-      <url>http://java.sun.com/products/servlet/</url>
-    </dependency>
-    <dependency>
-      <id>stratum</id>
-      <version>1.0-b5-dev</version>
-      <url>http://jakarta.apache.org/turbine/stratum/</url>
-    </dependency>
-    <dependency>
-      <id>torque</id>
-      <version>3.1</version>
-      <url>http://db.apache.org/torque/</url>
-    </dependency>
-    <!--
-    <dependency>
-    <groupId>turbine</groupId>
-    <artifactId>turbine-torque-impl</artifactId>
-    <version>2.4-dev</version>
-      <url>http://jakarta.apache.org/turbine/</url>
-    </dependency>
-    -->
-    <dependency>
-      <id>velocity</id>
-      <version>1.3.1</version>
-      <url>http://jakarta.apache.org/velocity/</url>
-    </dependency>
-    <dependency>
-      <id>village</id>
-      <version>2.0-dev-20030825</version>
-      <url>http://share.whichever.com/index.php?SCREEN=village</url>
-    </dependency>
-    <dependency>
-      <id>xalan</id>
-      <version>2.5.1</version>
-      <url>http://xml.apache.org/xalan-j/</url>
-    </dependency>
-    <dependency>
-      <id>xerces:xercesImpl</id>
-      <version>2.4.0</version>
-      <url>http://xml.apache.org/xerces2-j/</url>
-    </dependency>
-    <dependency>
-      <id>xml-apis</id>
-      <version>1.0.b2</version>
-      <url>http://xml.apache.org/commons/</url>
-    </dependency>
-    <dependency>
-      <id>xmlrpc</id>
-      <version>1.2-b1</version>
-      <url>http://xml.apache.org/xmlrpc/</url>
-    </dependency>
-    <dependency>
-      <groupId>xstream</groupId>
-      <artifactId>xstream</artifactId>
-      <version>1.0.2</version>
-      <url>http://xstream.codehaus.org/</url>
-    </dependency>    
-    
-    <dependency>
-      <groupId>mockobjects</groupId>
-      <artifactId>mockobjects-jdk1.4-j2ee1.3</artifactId>
-      <version>0.09</version>
-    </dependency> 
-    <dependency>
-      <groupId>mockobjects</groupId>
-      <artifactId>mockobjects-core</artifactId>
-      <version>0.09</version>
-    </dependency>  
-  </dependencies>
-
-  <build>
-    <sourceDirectory>src/java</sourceDirectory>
-    <unitTestSourceDirectory>src/test</unitTestSourceDirectory>
-    <unitTest>
-      <includes>
-        <include>**/*Test.java</include>
-      </includes>
-      <excludes>
-      </excludes>
-    </unitTest>
-    <integrationUnitTestSourceDirectory/>
-    <integrationUnitTest/>
-    <aspectSourceDirectory/>
-  </build>
-
-  <reports>    
-    <report>maven-jdepend-plugin</report>    
-    <report>maven-checkstyle-plugin</report>
-    <report>maven-changes-plugin</report>
-    <report>maven-changelog-plugin</report>
-    <report>maven-developer-activity-plugin</report>
-    <report>maven-file-activity-plugin</report>
-    <report>maven-javadoc-plugin</report>
-    <report>maven-jxr-plugin</report>
-	<report>maven-pmd-plugin</report>
-	<report>maven-jcoverage-plugin</report>
-	<report>maven-simian-plugin</report>
-	<report>maven-multiproject-plugin</report>
-	<report>maven-junit-report-plugin</report>
-    <!--
-    <report>maven-linkcheck-plugin</report>
-    -->
-    <report>maven-tasklist-plugin</report>
-    
-
-  </reports>
-
-</project>
diff --git a/proposals/admin-app b/proposals/admin-app
deleted file mode 100644
index 032e28d..0000000
--- a/proposals/admin-app
+++ /dev/null
@@ -1,192 +0,0 @@
-Work in progress
-
-This proposal outlines an implementation for a standard
-Turbine admin app that could easily be extended so that
-there would be a usable base for an admin app for all
-Turbine applications.
-
---------------------------------------------------------------------------
-N O T E S
---------------------------------------------------------------------------
-
-The Security Service manages Users, Groups Roles and Permissions
-in the system.
- 
-The task performed by the security service include creation and removal of 
-accounts, groups, roles, and permissions; assigning users roles in groups; 
-assigning roles specific permissions and construction of objects 
-representing these logical entities.
-
-Because of pluggable nature of the Services, it is possible to create 
-multiple implementations of SecurityService, for example employing database 
-and directory server as the data backend.
-
-The SecurityService delegates to the specified pluggable components.
-The pluggable components include User and UserManager implementations. 
-These classes are specified in the TR.props.
-
-services.TurbineSecurityService.user.class
-services.TurbineSecurityService.user.manager
-
-Do not use user.setPassword(password), use the following method
-to add a user: TurbineSecurity.addUser(user, password)
-
---------------------------------------------------------------------------
-U S E R  A D M I N  F O R M
---------------------------------------------------------------------------
-
-This will be the form used to insert/update/delete user accounts
-in the Turbine application.
-
-Fields:
-
-USERNAME
-FIRST_NAME
-LAST_NAME
-EMAIL
-
-NOTE:
-
-Roles are universal, Roles are global and apply to all Groups.
-A Group is not a Group of Roles! A Group is not a Group of Users either!
-A Group is more akin to a project.
-
-A Role is a single set of permissions.
-
-Each Group will be displayed with the same set of Roles beneath
-it in a selector box. We'll use Scarab as an example here.
-
-In Scarab we may have the following Groups (or projects):
-
-Turbine, Velocity, and ECS
-
-We may have the following Roles:
-
-Admin, Developer, Tester, and Guest
-
-So what we would display for each Group is a list
-of the Roles in a multi-select SelectorBox. So it might look
-something like the following:
-
-Turbine    Velocity    ECS
--------    --------    ---
-Admin      Admin       Admin
-Developer  Developer   Developer
-Tester     Tester      Tester
-Guest      Guest       Guest
-
-So you may choose to assign Jon the role of Admin for Turbine,
-and assign Jason the role of Developer in Velocity.
-
-You would then use the following method to have these choices
-take affect:
-
-TurbineSecurity.grant(Jon, Turbine, Admin)
-TurbineSecurity.grant(Jason, Velocity, Developer)
-
---------------------------------------------------------------------------
-P R O J E C T / G R O U P  A D M I N  F O R M
---------------------------------------------------------------------------
-
-This will be the form used to insert/update/delete projects/groups
-in the Turbine application.
-
-Fields:
-
-GROUP_NAME
-
---------------------------------------------------------------------------
-R O L E  A D M I N  F O R M
---------------------------------------------------------------------------
-
-This will be the form used to insert/update/delete roles in
-a project/group in a Turbine application.
-
-!!
-Is this form even intended because I don't see any way to save
-the association between a role and a group currently.
-
-Fields:
-
-GROUP/PROJECT ID (I thought that roles were associated with projects/groups)
-ROLE_NAME
-
---------------------------------------------------------------------------
-P E R M I S S I O N   A D M I N  F O R M
---------------------------------------------------------------------------
-
-This will be the form used to insert/update/delete permission in
-a Turbine application. Fedor mentioned that permissions were
-global. I'm not exactly sure how that works right now.
-
-Fields:
-
-?
-
---------------------------------------------------------------------------
-E X T E N D I N G  T H E  A D M I N  A P P
---------------------------------------------------------------------------
-
-Is there any easy way to allow Torque to generate the peers used
-by the security system. This way if any changes were required to
-the user class then it would be a matter of changing the XML schema.
-
-Now these are special peers with convenience methods, and methods
-specific to security. But a special set of templates could probably
-be made to accomodate this.
-
-Just trying to think of the best way to make a security app
-resuable WRT any customizations that might want to be made
-to the user schema.
-
-In most cases would it simply be the user schema that
-will want to be changed?
-
-Is there already a recommended way to extend the existing
-classes to make a different security system and accompanying
-admin app?
-
----
-
-These are notes from Rafal that I will integrate
-
-From Rafal.Krzewski@e-point.pl Tue Jan  2 13:32:59 2001
-Date: Tue, 02 Jan 2001 20:08:45 +0100
-From: Rafal Krzewski <Rafal.Krzewski@e-point.pl>
-To: jvanzyl@periapt.com
-Subject: admin app
-
-    [ The following text is in the "iso-8859-2" character set. ]
-    [ Your display is set for the "US-ASCII" character set.  ]
-    [ Some characters may be displayed incorrectly. ]
-
-user list has filtering control on top of the page.
-You can chose login/first name/last name, etc and the pattern
-(* will be changed into % before going into the LIKE query)
-
-the links on the right should be:
-
-'edit' or 'details' - takes you to the edit user screen
-'roles' - take you to user-group-role edit screen
-'remove' - ask for confirmation, and...
-
-the second screenshot shows user-group association from OW
-which would be user-group-role in Turbine.
-
-we need a pulldown list for selecting a group at the to.
-it should have 'global' group preselected.
-
-The role-permission screen should look in a similar way.
-
-Roles screen will be like users, it will have
-
-<role name> [details] [permissions] [remove]
-
-Groups will have
-
-<group name> [details] [remove]
-
-and permissions exactly as above...
-
-Oh, there should also be 'add new' buttons (or better links)
-in all list screens.
diff --git a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateFilter.java b/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateFilter.java
deleted file mode 100644
index c9e7c4c..0000000
--- a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateFilter.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.apache.turbine.util.hibernate;
-
-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 javax.servlet.http.HttpSession;
-
-import net.sf.hibernate.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-
-
-public class HibernateFilter implements Filter
-{
-    //~ Static fields/initializers =============================================
-
-    //~ Instance fields ========================================================
-
-    /**
-     * The <code>Log</code> instance for this class
-     */
-    private Log log = LogFactory.getLog(HibernateFilter.class);
-    private FilterConfig filterConfig = null;
-
-    //~ Methods ================================================================
-
-    public void init(FilterConfig filterConfig) throws ServletException
-    {
-        this.filterConfig = filterConfig;
-
-    }
-
-    /**
-     * Destroys the filter.
-     */
-    public void destroy()
-    {
-        filterConfig = null;
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
-    {
-        // cast to the types I want to use
-        HttpServletRequest request = (HttpServletRequest) req;
-        HttpServletResponse response = (HttpServletResponse) resp;
-        HttpSession session = request.getSession(true);
-
-        Session ses = null;
-        boolean sessionCreated = false;
-
-        try
-        {
-            chain.doFilter(request, response);
-        }
-        finally
-        {
-            try
-            {
-                HibernateUtils.closeSession();
-            }
-            catch (Exception exc)
-            {
-                log.error("Error closing hibernate session.", exc);
-                exc.printStackTrace();
-            }
-        }
-    }
-
-    public static Session getSession() throws PersistenceException
-    {
-        try
-        {
-
-            return HibernateUtils.currentSession();
-        }
-        catch (Exception e)
-        {
-            throw new PersistenceException("Could not find current Hibernate session.", e);
-        }
-
-    }
-}
diff --git a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateUtils.java b/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateUtils.java
deleted file mode 100644
index a9d4653..0000000
--- a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/HibernateUtils.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.turbine.util.hibernate;
-
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.JDBCException;
-import net.sf.hibernate.Session;
-import net.sf.hibernate.SessionFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * This class is used to get Hibernate Sessions and may
- * also contain methods (in the future) to get DBConnections
- * or Transactions from JNDI.
- */
-public class HibernateUtils
-{
-    //~ Static fields/initializers =============================================
-    public final static String SESSION_FACTORY = "hibernate/sessionFactory";
-    public static final ThreadLocal session = new ThreadLocal();
-    private static SessionFactory sf = null;
-    private static HibernateUtils me;
-    private static Log log = LogFactory.getLog(HibernateUtils.class);
-
-    static {
-        try
-        {
-            me = new HibernateUtils();
-        }
-        catch (Exception e)
-        {
-            log.fatal("Error occurred initializing HibernateUtils");
-            e.printStackTrace();
-        }
-    }
-
-    //~ Constructors ===========================================================
-
-    private HibernateUtils() throws HibernateException, JDBCException
-    {}
-
-    //~ Methods ================================================================
-
-    public static Session currentSession() throws PersistenceException
-    {
-        Session s = (Session) session.get();
-
-        if (s == null)
-        {
-            s = PersistenceManager.openSession();
-            if (log.isDebugEnabled())
-            {
-                log.debug("Opened hibernate session.");
-            }
-
-            session.set(s);
-        }
-
-        return s;
-    }
-
-    public static void closeSession() throws HibernateException, JDBCException
-    {
-        Session s = (Session) session.get();
-        session.set(null);
-
-        if (s != null)
-        {
-            if (s.isOpen())
-            {
-                s.flush();
-                s.close();
-
-                if (log.isDebugEnabled())
-                {
-                    log.debug("Closed hibernate session.");
-                }
-            }
-        }
-        else
-        {
-            log.warn("Hibernate session was inadvertently already closed.");
-
-        }
-    }
-}
diff --git a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/PersistenceException.java b/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/PersistenceException.java
deleted file mode 100644
index 4e6f0e3..0000000
--- a/proposals/epugh/hibernate/org/apache/turbine/util/hibernate/PersistenceException.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package org.apache.turbine.util.hibernate;
-
-import org.apache.commons.lang.exception.NestableException;
-/**
- * A general PersistenceException that can be thrown by 
- * Hibernate DAO classes.
- *
- */
-public class PersistenceException extends NestableException
-{
-    //~ Constructors ===========================================================
-
-    /**
-     * Constructor for PersistenceException.
-     */
-    public PersistenceException()
-    {
-        super();
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param message
-     */
-    public PersistenceException(String message)
-    {
-        super(message);
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param message
-     * @param cause
-     */
-    public PersistenceException(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param cause
-     */
-    public PersistenceException(Throwable cause)
-    {
-        super(cause);
-    }
-
-}
diff --git a/proposals/epugh/hibernate/readme.txt b/proposals/epugh/hibernate/readme.txt
deleted file mode 100644
index 541414b..0000000
--- a/proposals/epugh/hibernate/readme.txt
+++ /dev/null
@@ -1,144 +0,0 @@
-To use this code, you need to add this section to your project.xml dependencies.  Note, you may have some
-already!
-
-<dependency>
-      <id>avalon-framework</id>
-      <version>4.1.4</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>      
-    </dependency>
-    <dependency>
-      <id>excalibur-collections</id>
-      <version>1.0</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>          
-    </dependency>
-    <dependency>
-      <id>excalibur-component</id>
-      <version>1.1</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>          
-    </dependency>
-    <dependency>
-      <id>excalibur-instrument</id>
-      <version>1.0</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>          
-    </dependency>
-    <dependency>
-      <id>excalibur-logger</id>
-      <version>1.0.1</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>          
-    </dependency>
-    <dependency>
-      <id>excalibur-pool</id>
-      <version>1.2</version>
-      <url>http://jakarta.apache.org/avalon</url>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>          
-    </dependency>    
-  <dependency>
-      <id>log4j</id>
-      <version>1.2.7</version>
-      <url>http://jakarta.apache.org/log4j/</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>
-    <dependency>
-      <id>logkit</id>
-      <version>1.0.1</version>
-      <url>http://jakarta.apache.org/avalon/logkit/</url>
-      <properties>
-        <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>
-    <!--
-    <dependency>
-      <id>fulcrum</id>      
-      <version>SNAPSHOT</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>              
-    -->
-    <dependency>
-      <id>hibernate</id>      
-      <version>2.0-final</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>  
-
-    <dependency>
-      <id>hibernate:hibernate-avalon</id>
-      <version>0.1</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>              
-    </dependency>                
-    <dependency>
-      <id>odmg</id>      
-      <version>3.0</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>                  
-    <dependency>
-      <id>bcel</id>      
-      <version>5.0</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>                      
-    <dependency>
-      <id>dom4j</id>      
-      <version>1.4</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>       
-    <dependency>
-      <id>cglib</id>      
-      <version>1.0</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>                          
-    <dependency>
-      <id>jcs</id>      
-      <version>1.0-dev</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>     
-
-
-
-You will also need to add this to your web.xml:
-
-    <filter>
-        <filter-name>Hibernate Session Filter</filter-name>
-        <filter-class>org.apache.turbine.util.hibernate.HibernateFilter</filter-class>
-    </filter>
-    <filter-mapping>
-        <filter-name>Hibernate Session Filter</filter-name>
-    <url-pattern>/*</url-pattern>
-    </filter-mapping>
-
-I will also try and add more examples of actualing using the Hibernate code...
-
-
-Thanks, Eric (epugh@upstate.com)
\ No newline at end of file
diff --git a/proposals/henning/eclipse-build/INSTALLATION b/proposals/henning/eclipse-build/INSTALLATION
deleted file mode 100644
index 3debd91..0000000
--- a/proposals/henning/eclipse-build/INSTALLATION
+++ /dev/null
@@ -1,10 +0,0 @@
-This is an experimental Build environment to build Turbine with
-Eclipse without Maven.
-
-To try this out, change into this directory and run
-"install.sh". 
-
-Sorry, this is *ix only yet (I don't do Windows. ;-) )
-
-	-- henning
-
diff --git a/proposals/henning/eclipse-build/README b/proposals/henning/eclipse-build/README
deleted file mode 100644
index 907287f..0000000
--- a/proposals/henning/eclipse-build/README
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory contains some helpers to build the Turbine source code
-with the Eclipse IDE (http://www.eclipse.org/). If you're using maven,
-you shouldn't need anything from this directory.
-
-This was created and is intended for Eclipse 2.1.1 or better. Updates
-and patches are welcome, please send them to turbine-dev@jakarta.apache.org.
-
-Contents:
-
-build.xml     - ant Build file which sets up the auto generated Torque
-                peer classes. This file does not build Turbine itself!
-
diff --git a/proposals/henning/eclipse-build/eclipse_build b/proposals/henning/eclipse-build/eclipse_build
deleted file mode 100644
index 723deb7..0000000
--- a/proposals/henning/eclipse-build/eclipse_build
+++ /dev/null
@@ -1,215 +0,0 @@
-<?xml version="1.0"?>
-
-<!-- ===================================================================== --> 
-<!-- =                                                                   = -->
-<!-- = This is a helper file to build Turbine 2 with Eclipse             = -->
-<!-- =                                                                   = -->
-<!-- = @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>  = -->
-<!-- = @version $Id$ = -->
-<!-- =                                                                   = -->
-<!-- ===================================================================== --> 
-
-<project name="Turbine Torque Peers" basedir="../.." default="prepare-turbine">
-
-  <property name="libdir" value="target/lib"/>
-
-  <target name="prepare-turbine"
-     depends="fetch-jars, peers" description="==> Default Target. Run me to prepare the Turbine source code for Eclipse"/>
-
-  <target name="torque-init">
-    <property name="torque.contextProperties" value="project.properties"/>
-    <property file="${torque.contextProperties}"/>
-
-    <path id="torque-classpath">
-      <fileset dir="${libdir}"/>
-    </path>
-
-    <!--
-      The default.properties file will map old properties to the new ones along
-      with setting the correct defaults.
-    -->
-    <property resource="org/apache/torque/default.properties">
-      <classpath>
-        <path refid="torque-classpath"/>
-      </classpath>
-    </property>
-
-    <taskdef
-      name="torque-data-model"
-      classpathref="torque-classpath"
-      classname="org.apache.torque.task.TorqueDataModelTask"/>
-  </target>
-
-  <!-- ================================================== -->
-  <!-- Build the Torque Peers for the Turbine builds      -->
-  <!-- ================================================== -->
-  <target name="peers" description="==> Builds the Turbine Torque Peer classes"
-    depends="torque-init">
-    <antcall target="copy-om"/>
-    <antcall target="scheduler-om"/>
-    <antcall target="torque-security-om"/>
-
-    <!-- Kludge, because this file is overwritten by the Turbine code itself -->
-    <delete file="${torque.java.dir}/org/apache/turbine/services/schedule/JobEntry.java"/>
-  </target>
-
-
-  <!-- ================================================== -->
-  <!-- Prepare all Sources for Torque                     -->
-  <!-- ================================================== -->
-  <target name="copy-om" description="Copy all schema files to target/xml and replace database related variables"
-    depends="copy-scheduler-om ,copy-torque-security-om, copy-id-table-om"/>
-
-  <!-- ================================================== -->
-  <!-- Prepare Scheduler Sources for Torque               -->
-  <!-- ================================================== -->
-  <target name="copy-scheduler-om" description="Copy scheduler schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${scheduler.database.name}"/>
-    <filter token="EXTRA_USER_COLUMNS" value="${scheduler.extra.user.columns}"/>
-    <copy
-      file="src/schema/scheduler-schema.xml"
-      tofile="${torque.schema.dir}/scheduler-schema.xml"
-      filtering="yes"/>
-  </target>
-
-  <!-- ================================================== -->
-  <!-- Prepare Torque Security Service Sources for Torque -->
-  <!-- ================================================== -->
-  <target name="copy-torque-security-om" description="Copy torque security service schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${torque.security.database.name}"/>
-    <copy
-      file="src/schema/torque-security-schema.xml"
-      tofile="${torque.schema.dir}/torque-security-schema.xml"
-      filtering="yes"/>
-  </target>
-  
-  <!-- ================================================== -->
-  <!-- Prepare ID Table (for idBroker) Sources for Torque -->
-  <!-- ================================================== -->
-  <target name="copy-id-table-om" description="Copy id-table schema files to target/xml and replace database related variables">
-    <filter token="DATABASE_DEFAULT" value="${scheduler.database.name}"/>
-    <copy
-      file="src/schema/id-table-schema.xml"
-      tofile="${torque.schema.dir}/scheduler-idtable-schema.xml"
-      filtering="yes"/>
-    <filter token="DATABASE_DEFAULT" value="${torque.security.database.name}"/>
-    <copy
-      file="src/schema/id-table-schema.xml"
-      tofile="${torque.schema.dir}/torque-security-idtable-schema.xml"
-      filtering="yes"/>
-  </target>
-
-  <!-- ================================================== -->
-  <!-- Build Peers for the Scheduler                      -->
-  <!-- ================================================== -->
-  <target name="scheduler-om" description="generate Torque peers for the scheduler"
-    depends="copy-scheduler-om">
-
-    <torque-data-model
-      contextProperties="${torque.contextProperties}"
-      controlTemplate="${torque.template.om}"
-      outputDirectory="${torque.java.dir}"
-      outputFile="report.scheduler.om.generation"
-      targetDatabase="${torque.database}"
-      targetPackage="${scheduler.package}"
-      useClasspath="true">
-      <fileset dir="${torque.schema.dir}"
-        includes="scheduler-schema.xml"
-        excludes="${torque.schema.om.excludes}"
-      />
-    </torque-data-model>
-
-  </target>
-
-  <!-- ================================================== -->
-  <!-- Build Peers for Torque Security                    -->
-  <!-- ================================================== -->
-  <target name="torque-security-om" description="generate Torque peers for the torque security service"
-    depends="copy-torque-security-om">
-
-    <torque-data-model
-      contextProperties="${torque.contextProperties}"
-      controlTemplate="${torque.template.om}"
-      outputDirectory="${torque.java.dir}"
-      outputFile="report.torque-security.om.generation"
-      targetDatabase="${torque.database}"
-      targetPackage="${torque.security.package}"
-      useClasspath="true">
-      <fileset dir="${torque.schema.dir}"
-        includes="torque-security-schema.xml"
-        excludes="${torque.schema.om.excludes}"
-      />
-    </torque-data-model>
-
-  </target>
-
-  <!-- ================================================== -->
-  <!-- Fetch all needed jars from ibiblio                 -->
-  <!-- ================================================== -->
-  <target name="fetch-jars" description=" ==> Fetch the needed jars for Turbine">
-    <mkdir dir="${libdir}"/>
-    <antcall target="fetch-sun-jars" />
-    <antcall target="fetch-ibiblio-jars" />
-  </target>
-
-  <target name="check-sun-jars">
-    <condition property="sunjars.present">
-      <and>
-        <available file="${libdir}/activation-1.0.2.jar" type="file"/>
-        <available file="${libdir}/javamail-1.3.jar" type="file"/>
-        <available file="${libdir}/jdbc-2.0.jar" type="file"/>
-        <available file="${libdir}/jndi-1.2.1.jar" type="file"/>
-      </and>
-    </condition>
-  </target>
-
-  <target name="fetch-sun-jars" unless="sunjars.present" depends="check-sun-jars">
-    <fail>
-      For a successful build, you must get the following jars from java.sun.com
-      and copy them into ${libdir}:
-
-      activation.jar, Version 1.0.2  as activation-1.0.2.jar
-      mail.jar, Version 1.3 as javamail-1.3.jar
-      jdbc.jar, Version 2.0 as jdbc-2.0.jar
-      jndi.jar, Version 1.2.1 as jndi-1.2.1.jar
-
-      One of these jars is missing. Please correct this error and
-      rebuild.
-    </fail>
-  </target>
-
-  <target name="fetch-ibiblio-jars">
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/avalon-framework/jars/avalon-framework-4.1.4.jar" dest="${libdir}/avalon-framework-4.1.4.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-beanutils/jars/commons-beanutils-1.6.1.jar" dest="${libdir}/commons-beanutils-1.6.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-codec/jars/commons-codec-1.1.jar" dest="${libdir}/commons-codec-1.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-collections/jars/commons-collections-2.1.jar" dest="${libdir}/commons-collections-2.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-configuration/jars/commons-configuration-20030706.202021.jar" dest="${libdir}/commons-configuration-20030706.202021.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-digester/jars/commons-digester-1.5.jar" dest="${libdir}/commons-digester-1.5.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-email/jars/commons-email-20030310.165926.jar" dest="${libdir}/commons-email-20030310.165926.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-fileupload/jars/commons-fileupload-1.0.jar" dest="${libdir}/commons-fileupload-1.0.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-lang/jars/commons-lang-1.0.1.jar" dest="${libdir}/commons-lang-1.0.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-logging/jars/commons-logging-1.0.3.jar" dest="${libdir}/commons-logging-1.0.3.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/commons-pool/jars/commons-pool-1.0.1.jar" dest="${libdir}/commons-pool-1.0.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/cryptix/jars/cryptix-3.2.0.jar" dest="${libdir}/cryptix-3.2.0.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/dom4j/jars/dom4j-1.4.jar" dest="${libdir}/dom4j-1.4.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/ecs/jars/ecs-1.4.2.jar" dest="${libdir}/ecs-1.4.2.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/excalibur-component/jars/excalibur-component-1.1.jar" dest="${libdir}/excalibur-component-1.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/excalibur-instrument/jars/excalibur-instrument-1.0.jar" dest="${libdir}/excalibur-instrument-1.0.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/excalibur-logger/jars/excalibur-logger-1.0.1.jar" dest="${libdir}/excalibur-logger-1.0.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/excalibur-pool/jars/excalibur-pool-1.2.jar" dest="${libdir}/excalibur-pool-1.2.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/jython/jars/jython-2.1.jar" dest="${libdir}/jython-2.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/log4j/jars/log4j-1.2.8.jar" dest="${libdir}/log4j-1.2.8.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/logkit/jars/logkit-1.0.1.jar" dest="${libdir}/logkit-1.0.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/oro/jars/oro-2.0.7.jar" dest="${libdir}/oro-2.0.7.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.3.jar" dest="${libdir}/servletapi-2.3.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/stratum/jars/stratum-1.0-b3.jar" dest="${libdir}/stratum-1.0-b3.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/torque/jars/torque-3.1-alpha2.jar" dest="${libdir}/torque-3.1-alpha2.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/torque/jars/torque-gen-3.1-alpha2.jar" dest="${libdir}/torque-gen-3.1-alpha2.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/velocity/jars/velocity-1.3.1.jar" dest="${libdir}/velocity-1.3.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/village/jars/village-2.0-dev-20030625.jar" dest="${libdir}/village-2.0-dev-20030625.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/xalan/jars/xalan-2.5.1.jar" dest="${libdir}/xalan-2.5.1.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/xerces/jars/xercesImpl-2.4.0.jar" dest="${libdir}/xercesImpl-2.4.0.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/xml-apis/jars/xml-apis-1.0.b2.jar" dest="${libdir}/xml-apis-1.0.b2.jar"/>
-    <get verbose="true" usetimestamp="true" src="http://www.ibiblio.org/maven/xmlrpc/jars/xmlrpc-1.2-b1.jar" dest="${libdir}/xmlrpc-1.2-b1.jar"/>
-  </target>
-</project>
diff --git a/proposals/henning/eclipse-build/eclipse_classpath b/proposals/henning/eclipse-build/eclipse_classpath
deleted file mode 100644
index 0b86496..0000000
--- a/proposals/henning/eclipse-build/eclipse_classpath
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-    <classpathentry kind="src" path="src/java"/>
-    <classpathentry kind="src" path="target/src"/>
-    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-    <classpathentry kind="lib" path="target/lib/activation-1.0.2.jar"/>
-    <classpathentry kind="lib" path="target/lib/avalon-framework-4.1.4.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-beanutils-1.6.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-codec-1.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-collections-2.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-configuration-20030706.202021.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-digester-1.5.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-email-20030310.165926.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-fileupload-1.0.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-lang-1.0.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-logging-1.0.3.jar"/>
-    <classpathentry kind="lib" path="target/lib/commons-pool-1.0.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/cryptix-3.2.0.jar"/>
-    <classpathentry kind="lib" path="target/lib/dom4j-1.4.jar"/>
-    <classpathentry kind="lib" path="target/lib/ecs-1.4.2.jar"/>
-    <classpathentry kind="lib" path="target/lib/excalibur-component-1.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/excalibur-instrument-1.0.jar"/>
-    <classpathentry kind="lib" path="target/lib/excalibur-logger-1.0.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/excalibur-pool-1.2.jar"/>
-    <classpathentry kind="lib" path="target/lib/javamail-1.3.jar"/>
-    <classpathentry kind="lib" path="target/lib/jdbc-2.0.jar"/>
-    <classpathentry kind="lib" path="target/lib/jndi-1.2.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/jython-2.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/log4j-1.2.8.jar"/>
-    <classpathentry kind="lib" path="target/lib/logkit-1.0.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/oro-2.0.7.jar"/>
-    <classpathentry kind="lib" path="target/lib/servletapi-2.3.jar"/>
-    <classpathentry kind="lib" path="target/lib/stratum-1.0-b3.jar"/>
-    <classpathentry kind="lib" path="target/lib/torque-3.1-alpha2.jar"/>
-    <classpathentry kind="lib" path="target/lib/torque-gen-3.1-alpha2.jar"/>
-    <classpathentry kind="lib" path="target/lib/velocity-1.3.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/village-2.0-dev-20030625.jar"/>
-    <classpathentry kind="lib" path="target/lib/xalan-2.5.1.jar"/>
-    <classpathentry kind="lib" path="target/lib/xercesImpl-2.4.0.jar"/>
-    <classpathentry kind="lib" path="target/lib/xml-apis-1.0.b2.jar"/>
-    <classpathentry kind="lib" path="target/lib/xmlrpc-1.2-b1.jar"/>
-    <classpathentry kind="output" path="target/classes"/>
-</classpath>
diff --git a/proposals/henning/eclipse-build/eclipse_prepare_turbine b/proposals/henning/eclipse-build/eclipse_prepare_turbine
deleted file mode 100644
index 61b1a7a..0000000
--- a/proposals/henning/eclipse-build/eclipse_prepare_turbine
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
-    <booleanAttribute
-        key="org.eclipse.ui.externaltools.ATTR_RUN_IN_BACKGROUND" value="false"/>
-    <stringAttribute
-        key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,"/>
-    <stringAttribute
-        key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/jakarta-turbine-2}"/>
-    <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/jakarta-turbine-2/build/eclipse/build.xml}"/>
-    <stringAttribute key="org.eclipse.ui.externaltools.ATTR_ANT_TARGETS" value="prepare-turbine,"/>
-    <stringAttribute key="org.eclipse.debug.ui.target_run_perspective" value="perspective_none"/>
-</launchConfiguration>
diff --git a/proposals/henning/eclipse-build/eclipse_project b/proposals/henning/eclipse-build/eclipse_project
deleted file mode 100644
index 9c26c78..0000000
--- a/proposals/henning/eclipse-build/eclipse_project
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>jakarta-turbine-2</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
-			<arguments>
-				<dictionary>
-					<key>LaunchConfigHandle</key>
-					<value>&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;launchConfiguration local=&quot;false&quot; path=&quot;/jakarta-turbine-2/.externalToolBuilders/Prepare Turbine.launch&quot;/&gt;
-</value>
-				</dictionary>
-			</arguments>
-		</buildCommand>
-		<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/proposals/henning/eclipse-build/install.sh b/proposals/henning/eclipse-build/install.sh
deleted file mode 100755
index 35dd6ac..0000000
--- a/proposals/henning/eclipse-build/install.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#! /bin/sh
-#
-# Linux Installation
-#
-
-#
-# Change this to the actual location of your
-# Turbine Tree! The default should work if you've checked out
-# the tree from CVS and enter the directory where this file
-# is located.
-#
-TURBINE_PROJECT_HOME=../../..
-
-[ -f ${TURBINE_PROJECT_HOME}/maven.xml ] || exit 1
-
-cp eclipse_classpath ${TURBINE_PROJECT_HOME}/.classpath
-cp eclipse_project   ${TURBINE_PROJECT_HOME}/.project
-
-mkdir -p ${TURBINE_PROJECT_HOME}/.externalToolBuilders
-cp eclipse_prepare_turbine "${TURBINE_PROJECT_HOME}/.externalToolBuilders/Prepare Turbine.launch"
-
-mkdir -p ${TURBINE_PROJECT_HOME}/build/eclipse
-cp eclipse_build ${TURBINE_PROJECT_HOME}/build/eclipse/build.xml
-
-PWD=`( cd ${TURBINE_PROJECT_HOME} ; pwd )`
-
-echo "Now import a project from ${PWD} into Eclipse!"
diff --git a/proposals/henning/jsp-tags/README.gabriel b/proposals/henning/jsp-tags/README.gabriel
deleted file mode 100644
index 1fd8f3c..0000000
--- a/proposals/henning/jsp-tags/README.gabriel
+++ /dev/null
@@ -1,12 +0,0 @@
-Return-Path: <gabrielm@itcsoluciones.com>
-Subject: Re: jsp template problem
-From: Gabriel Moreno <gabrielm@itcsoluciones.com>
-To: hps@intermeta.de
-Message-Id: <1058886657.2601.6.camel@vandal.intra.itcsoluciones.com>
-
-Henning,
-Here is the JSP patch I sent a while ago for using Context in JSP
-templates. The tags are included there.
-
-Thanks,
-Gabriel
diff --git a/proposals/henning/jsp-tags/README.henning b/proposals/henning/jsp-tags/README.henning
deleted file mode 100644
index 39586a6..0000000
--- a/proposals/henning/jsp-tags/README.henning
+++ /dev/null
@@ -1,23 +0,0 @@
-Extended JSP Support / JSP Tags for Turbine
-===========================================
-
-From a first glance, this code needs quite some work. It tries a
-frankensteinian combination of Jsp Pages with a Velocity Context which
-doesn't work out too well. The JspAction, JspActionEvent, the
-JspScreen classes and the patches to the JspService are unlikely to go
-into Turbine in this shape.
-
-The Tag lib in o.a.t.services.jsp.tags seems to be able to compile
-without these classes but this needs looking and documenting from
-someone who is familiar with JSP and taglibs. This is included mainly
-so that the code doesn't get lost again.  
-
-The whole code is at Turbine 2.1 level and needs some reworking,
-especially for the TemplateLinkTag
-
-If you want to use the Jsp View with Turbine and willing to work on
-this, please do and contact us at turbine-dev@jakarta.apache.org 
-
-	-- Henning Schmiedehausen, 2003-08-26
-
-
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/actions/JspAction.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/actions/JspAction.java
deleted file mode 100644
index b27533f..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/actions/JspAction.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.screens.TemplateScreen;
-import org.apache.turbine.services.jsp.TurbineJsp;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.jsp.JspActionEvent;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides a convenience methods for Jsp Actions
- * to use. Since this class is abstract, it should only be extended
- * and not used directly.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
- * @version $Id$
- */
-public abstract class JspAction extends JspActionEvent
-{
-    /**
-     * You SHOULD NOT override this method and implement it in your
-     * action.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    public void doPerform(RunData data)
-        throws Exception
-    {
-        doPerform(data, getContext(data));
-    }
-
-    /**
-     * You SHOULD override this method and implement it in your
-     * action.
-     *
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    public abstract void doPerform(RunData data,
-                                   Context context)
-        throws Exception;
-
-    /**
-     * Sets up the context and then calls super.perform(); thus,
-     * subclasses don't have to worry about getting a context
-     * themselves!
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void perform(RunData data)
-        throws Exception
-    {
-        super.perform(data);
-    }
-
-    /**
-     * This method is used when you want to short circuit an Action
-     * and change the template that will be executed next.
-     *
-     * @param data Turbine information.
-     * @param template The template that will be executed next.
-     */
-    public void setTemplate(RunData data,
-                            String template)
-    {
-        TemplateScreen.setTemplate(data, template);
-    }
-
-    /**
-     * Return the Context needed by Jsp.
-     *
-     * @param RunData data
-     * @return Context, a context for web pages.
-     */
-    protected Context getContext(RunData data)
-    {
-        return TurbineJsp.getContext(data);
-    }
-}
-
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java.patch b/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java.patch
deleted file mode 100644
index 4eae07a..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Index: BaseJspScreen.java
-===================================================================
-RCS file: /home/cvspublic/jakarta-turbine-2/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java,v
-retrieving revision 1.1.1.1
-diff -u -r1.1.1.1 BaseJspScreen.java
---- BaseJspScreen.java	16 Aug 2001 05:08:37 -0000	1.1.1.1
-+++ BaseJspScreen.java	11 Feb 2003 14:14:32 -0000
-@@ -82,9 +82,6 @@
-     public ConcreteElement buildTemplate( RunData data )
-         throws Exception
-     {
--        // set up any data in beans, etc
--        doBuildTemplate(data);
--
-         // get the name of the JSP we want to use
-         String templateName = TurbineTemplate.getScreenTemplateName(
-             data.getTemplateInfo().getScreenTemplate() );
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/JspScreen.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/JspScreen.java
deleted file mode 100644
index 67033e9..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/modules/screens/JspScreen.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.turbine.services.jsp.JspService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-import org.apache.turbine.services.jsp.TurbineJsp;
-
-/**
- * Jsp Screen with support for conext. The buildTemplate() assumes the
- * template parameter has been set in the RunData object.  This provides
- * the ability to execute several templates from one Screen.
- *
- * <p>
- *
- * If you need more specific behavior in your application, extend this
- * class and override the doBuildTemplate() method.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
- * @version $Id$
- */
-public class JspScreen extends BaseJspScreen {
-    
-    /**
-     * Jsp Screens extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate( RunData data,
-                                    Context context )
-        throws Exception
-    {
-    }
-
-    /**
-     * Needs to be implemented to make TemplateScreen like us.  The
-     * actual method that you should override is the one with the
-     * context in the parameter list.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate( RunData data )
-        throws Exception
-    {
-        doBuildTemplate(data, TurbineJsp.getContext(data));
-    }
-
-    /**
-     * Return the Context needed which can then be used in the Jsp template
-     *
-     * @param data Turbine information.
-     * @return A Context.
-     */
-    public static Context getContext(RunData data)
-    {
-        return TurbineJsp.getContext(data);
-    }
-   
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/JspService.java.patch b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/JspService.java.patch
deleted file mode 100644
index 776bb2c..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/JspService.java.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-Index: JspService.java
-===================================================================
-RCS file: /home/cvspublic/jakarta-turbine-2/src/java/org/apache/turbine/services/jsp/JspService.java,v
-retrieving revision 1.3
-diff -u -r1.3 JspService.java
---- JspService.java	11 Jan 2003 18:42:33 -0000	1.3
-+++ JspService.java	11 Feb 2003 14:18:55 -0000
-@@ -57,12 +57,13 @@
- import org.apache.turbine.services.Service;
- import org.apache.turbine.util.RunData;
- import org.apache.turbine.util.TurbineException;
--
-+import org.apache.velocity.context.Context;
- 
- /**
-  * Implementations of the JspService interface.
-  *
-  * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
-+ * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
-  */
- public interface JspService extends Service 
- {
-@@ -72,9 +73,14 @@
-     static final String RUNDATA = "rundata";
-     /** The key used to store an instance of JspLink in the request */
-     static final String LINK = "link";
-+    /** The key used to store an instance of Context in the request */
-+    static final String CONTEXT_INSTANCE = "context";
-+    /** The key used to store an instance of Context in RunData */
-+    static final String CONTEXT = "JSP_CONTEXT";
-     
-     /**
--     * Adds some useful objects to the request, so they are available to the JSP.
-+     * Adds some useful objects to the request, so they are available
-+     * to the JSP.
-      */    
-     void addDefaultObjects(RunData data);
- 
-@@ -105,4 +111,19 @@
-      */
-     String getRelativeTemplateName(String template);
- 
-+    /**
-+     * Create an empty WebContext object.
-+     *
-+     * @return An empty WebContext object.
-+     */
-+    Context getContext();
-+
-+    /**
-+     * Create a Context from the RunData object.
-+     *
-+     * @param data The Turbine RunData object.
-+     * @return A clone of the Context
-+     */
-+    Context getContext(RunData data);
-+    
- }
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJsp.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJsp.java
deleted file mode 100644
index 45be8b2..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJsp.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine.services.jsp;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.OutputStream;
-import java.io.Writer;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * This is a simple static accessor to common Jsp tasks such as
- * getting an instance of a context as well as handling a request for
- * processing a template.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com.com">Jason van Zyl</a>
- * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
- * @version $Id$
- */
-public abstract class TurbineJsp
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a JspService implementation instance
-     */
-    protected static JspService getService()
-    {
-        return (JspService)TurbineServices
-            .getInstance().getService(JspService.SERVICE_NAME);
-    }
-
-    /**
-     * This returns a Context that can be used in the Jsp template
-     * once you have populated it with information that the template
-     * will know about.
-     *
-     * @param data A Turbine RunData.
-     * @return A Context.
-     */
-    public static Context getContext(RunData data)
-    {
-        return getService().getContext(data);
-    }
-
-    /**
-     * This method returns a blank Context object.
-     *
-     * @return A WebContext.
-     */
-    public static Context getContext()
-    {
-        return getService().getContext();
-    }
-
-}
-
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJspService.java.patch b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJspService.java.patch
deleted file mode 100644
index 9faa295..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/TurbineJspService.java.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-Index: TurbineJspService.java
-===================================================================
-RCS file: /home/cvspublic/jakarta-turbine-2/src/java/org/apache/turbine/services/jsp/TurbineJspService.java,v
-retrieving revision 1.8
-diff -u -r1.8 TurbineJspService.java
---- TurbineJspService.java	13 Jan 2003 21:14:29 -0000	1.8
-+++ TurbineJspService.java	11 Feb 2003 14:43:37 -0000
-@@ -67,6 +67,8 @@
- import org.apache.turbine.services.template.TurbineTemplate;
- import org.apache.turbine.util.RunData;
- import org.apache.turbine.util.TurbineException;
-+import org.apache.velocity.context.Context;
-+import org.apache.velocity.VelocityContext;
- 
- 
- /**
-@@ -76,6 +78,7 @@
-  * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
-  * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
-  * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
-+ * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
-  */
- public class TurbineJspService extends BaseTemplateEngineService
-     implements JspService
-@@ -137,6 +140,7 @@
-         HttpServletRequest req = data.getRequest();
-         req.setAttribute(LINK, new JspLink(data));
-         req.setAttribute(RUNDATA, data);
-+        req.setAttribute(CONTEXT_INSTANCE, getContext(data));
-     }
- 
-     /**
-@@ -307,4 +311,40 @@
-         }
-         return null;
-     }
-+
-+    /**
-+     * Create a Context object that also contains the globalContext.
-+     *
-+     * @return A Context object.
-+     */
-+    public Context getContext()
-+    {
-+        return new VelocityContext(/*globalContext*/);
-+    }
-+
-+    /**
-+     * Create a Context from the RunData object.  
-+     *
-+     * @param data The Turbine RunData object.
-+     * @return A clone of the WebContext needed by Velocity.
-+     */
-+    public Context getContext(RunData data)
-+    {
-+        /*
-+         * Attempt to get it from the data first.  If it doesn't
-+         * exist, create it and then stuff it into the data.
-+         */
-+        Context context = (Context)
-+            data.getTemplateInfo().getTemplateContext(JspService.CONTEXT);
-+
-+        if (context == null)
-+        {
-+            context = getContext();
-+
-+            data.getTemplateInfo().setTemplateContext(
-+                JspService.CONTEXT, context);
-+        }
-+        return context;
-+    }
-+
- }
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyAttributesTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyAttributesTag.java
deleted file mode 100644
index 319d162..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyAttributesTag.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-
-/**
- * Supporting class for the bodyAttributes tag.
- * Sends the contents of the a screen's body tag's attributes
- * parameter to the output stream.  If the screen did not set
- * the attributes parameter, a default may be used if specified
- * in this tag.  Example usage:
- * &lt;body &lt;x:bodyAttributes default='onLoad="jsfunc()"' /&gt;&gt;
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public class BodyAttributesTag extends TagSupport 
-{
-    /** 
-     * The default body tag attributes, if none is specified in the screen. 
-     */
-    private String def;
-    
-    /** 
-     * The setter for the default body tag attributes. 
-     */
-    public void setDefault(String def)
-    {
-        this.def = def;
-    }
-    
-    /**
-     * Method called when the tag is encountered to send attributes to the
-     * output stream
-     *
-     * @return SKIP_BODY, as it is intended to be a single tag.
-     */
-    public int doStartTag() throws JspException 
-    {
-        String bodyAttributes = (String)pageContext
-            .getAttribute(BodyTag.ATTRIBUTES, PageContext.REQUEST_SCOPE);
-        try 
-        {
-            if (bodyAttributes != null)
-            {
-                pageContext.getOut().print(bodyAttributes);
-            }
-            else
-            {
-                pageContext.getOut().print(def);
-            }
-        }
-        catch(java.io.IOException ex) 
-        {
-            throw new JspException(ex.getMessage());
-        }
-        return SKIP_BODY;
-    }
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyTag.java
deleted file mode 100644
index 394567a..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/BodyTag.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-
-/**
- * Supporting class for the body tag.
- * Tags that surround the screen content that will replace the 
- * &lt;x:screen section="body" /&gt; tag in a layout template.
- * An optional attributes parameter can be used to set the value
- * of the &lt;x:bodyAttributes /&gt;, which can also be in the
- * layout.
- * Example usage:
- * &lt;x:body attributes='onLoad="jsfunc()"'&gt;
- * some html content
- * &lt;/x:body&gt;
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public class BodyTag extends TagSupport 
-{
-    static final String ATTRIBUTES = "_body_tag_attributes_";
-    
-    /**
-     * attributes parameter can be used to add screen specific attribute values
-     * to the &lt;body&gt; tag.
-     */
-    private String attributes;
-
-    /** 
-     * The setter for body tag attributes relevant to the screen containing
-     * this tag. 
-     */
-    public void setAttributes(String attributes) 
-    {
-        pageContext.setAttribute(ATTRIBUTES, attributes, 
-            PageContext.REQUEST_SCOPE);
-        this.attributes = attributes;
-    }
-    
-    /**
-     * Method called when the tag is encountered.  If the layout is in
-     * the body section, the contents between the body tags are executed.
-     * Otherwise they are skipped.
-     *
-     * @return EVAL_BODY_INCLUDE, if the section has been set to body
-     * or SKIP_BODY, if this section is not active.
-     */
-    public int doStartTag() throws JspException 
-    {
-        boolean isActive = ScreenTag.BODY.equals(
-            pageContext.getAttribute(ScreenTag.SECTION_KEY, 
-                PageContext.REQUEST_SCOPE) );
-        if (isActive)
-        {
-             return EVAL_BODY_INCLUDE;
-        }
-        return SKIP_BODY;
-    }
-    
-    /**
-     * Method called when the end tag is encountered; it does nothing.  
-     *
-     * @return EVAL_PAGE
-     */
-    public int doEndTag() throws JspException 
-    {
-        return EVAL_PAGE;
-    }
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/HeadTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/HeadTag.java
deleted file mode 100644
index f781652..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/HeadTag.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-
-/**
- * Supporting class for the head tag.
- * Tags that surround the screen content that will replace the 
- * &lt;x:screen section="head" /&gt; tag in a layout template.
- * Example usage:
- * &lt;x:head&gt;&lt;title&gt;Login&lt;/title&gt;&lt;/x:head&gt;
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public class HeadTag extends TagSupport 
-{
-    /**
-     * Method called when the start tag is encountered.  If the layout is 
-     * in the head section, the contents between the head tags are executed.
-     * Otherwise they are skipped.
-     *
-     * @return EVAL_BODY_INCLUDE, if the section has been set to body
-     * or SKIP_BODY, if this section is not active.
-     */
-	public int doStartTag() throws JspException 
-    {
-        boolean isActive = ScreenTag.HEAD.equals(
-            pageContext.getAttribute(ScreenTag.SECTION_KEY, 
-                PageContext.REQUEST_SCOPE) );
-        if (isActive)
-        {
-		     return EVAL_BODY_INCLUDE;
-        }
-        return SKIP_BODY;
-	}
-    
-    /**
-     * Method called when the end tag is encountered; it does nothing.  
-     *
-     * @return EVAL_PAGE
-     */
-	public int doEndTag() throws JspException 
-    {
-		return EVAL_PAGE;
-	}
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/NavigationTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/NavigationTag.java
deleted file mode 100644
index 81e8001..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/NavigationTag.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-import org.apache.turbine.modules.NavigationLoader;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.jsp.JspService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.util.Log;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateInfo;
-
-/**
- * Supporting class for the bodyAttributes tag.
- * Sends the contents of the a screen's body tag's attributes
- * parameter to the output stream.  If the screen did not set
- * the attributes parameter, a default may be used if specified
- * in this tag.  Example usage:
- * &lt;body &lt;x:bodyAttributes default='onLoad="jsfunc()"' /&gt;&gt;
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public class NavigationTag extends TagSupport 
-{
-    /**
-     * template parameter defines the template whose contents will replace
-     * this tag in the layout.
-     */
-    private String template;
-
-    /** 
-     * The setter for template parameter
-     */
-    public void setTemplate(String template) 
-    {
-        this.template = template;
-    }
-
-    /**
-     * Method called when the tag is encountered to send the navigation
-     * template's contents to the output stream
-     *
-     * @return SKIP_BODY, as it is intended to be a single tag.
-     */
-    public int doStartTag() throws JspException 
-    {
-        RunData data = (RunData)pageContext
-                .getAttribute(JspService.RUNDATA, PageContext.REQUEST_SCOPE);    
-        data.getTemplateInfo().setNavigationTemplate(template);
-        String module = null;
-        try
-        {  
-            pageContext.getOut().flush();
-            module = ((TemplateService)TurbineServices.getInstance().getService(
-            TemplateService.SERVICE_NAME)).getNavigationName(template);
-            NavigationLoader.getInstance().exec(data, module);
-        }
-        catch (Exception e)
-        {
-            String message = "Error processing navigation template:" +
-                template + " using module: " + module;
-            Log.error(message, e);
-            try
-            {
-                data.getOut().print("Error processing navigation template: " 
-                    + template + " using module: " + module);
-            }
-            catch(java.io.IOException ioe) {}    
-        }
-        return SKIP_BODY;
-    }
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/ScreenTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/ScreenTag.java
deleted file mode 100644
index 034252e..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/ScreenTag.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.jsp.JspService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.util.Log;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateInfo;
-
-/**
- * Supporting class for the screen tag.
- * Sends the content between the screen's body or head tags to the 
- * output stream.  The decision to output the head or body contents 
- * is decided by the section parameter.  Example usage:
- * &lt;x:screen section="head" /&gt;
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public class ScreenTag extends TagSupport 
-{
-    /**
-     * section attribute. Valid values are head or body.
-     */
-    private String section;
-    /**
-     * contextRelevant attribute. Meant to allow the Screen
-     * java code to be skipped in the event the content is static.
-     * Not working and have not decided whether to make it work or
-     * remove the functionality.
-     */
-    private boolean staticContent;    
-    /**
-     * Key used to prevent the templates Screen module from executing
-     * multiple times while evaluating the layout.
-     */
-    private static final String FLAG = "_screen_executed_";
-
-    /**
-     * Key used to access the section parameter in the request.
-     */
-    static final String SECTION_KEY = "_layout_section_";
-    /**
-     * One of the valid values for the section parameter
-     */
-    static final String BODY = "body";
-    /**
-     * One of the valid values for the section parameter
-     */
-    static final String HEAD = "head";
-    
-    /**
-     * setter for the section parameter
-     */
-    public void setSection(String section) 
-    {
-        pageContext.setAttribute(SECTION_KEY, section, 
-            PageContext.REQUEST_SCOPE);
-        this.section = section;
-    }
-    
-    /**
-     * setter for the staticContent parameter
-     */
-    public void setStaticContent(boolean staticContent) 
-    {
-        this.staticContent = staticContent;
-    }
-
-    /**
-     * Method called when the tag is encountered to send attributes to the
-     * output stream
-     *
-     * @return SKIP_BODY, as it is intended to be a single tag.
-     */
-    public int doStartTag() throws JspException 
-    {
-        RunData data = (RunData)pageContext
-                .getAttribute(JspService.RUNDATA, PageContext.REQUEST_SCOPE);    
-        
-        String module = null;
-        String template = null;
-        Boolean flag = (Boolean)pageContext
-                .getAttribute(FLAG, PageContext.REQUEST_SCOPE);
-        JspService jsp = (JspService) TurbineServices.getInstance()
-            .getService(JspService.SERVICE_NAME);
-        try
-        {  
-            pageContext.getOut().flush();
-            template = data.getTemplateInfo().getScreenTemplate();
-            
-            if ( staticContent || (flag != null && flag.booleanValue()) ) 
-            {
-                jsp.handleRequest(data, "/screens/" + template, false);
-            }
-            else
-            {
-                module = ((TemplateService)TurbineServices.getInstance().getService(
-                TemplateService.SERVICE_NAME)).getScreenName(template);
-                ScreenLoader.getInstance().exec(data, module);
-                pageContext.setAttribute(FLAG, 
-                    Boolean.TRUE, PageContext.REQUEST_SCOPE);
-            }
-        }
-        catch (Exception e)
-        {
-            String message = "Error processing screen template:" +
-                template + " using module: " + module;
-            Log.error(message, e);
-            try
-            {
-                data.getOut().print("Error processing screen template: " 
-                    + template + " using module: " + module);
-            }
-            catch(java.io.IOException ioe) {}    
-        }
-        return SKIP_BODY;
-    }
-}
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/TemplateLinkTag.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/TemplateLinkTag.java
deleted file mode 100644
index 7d8bd49..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/services/jsp/tags/TemplateLinkTag.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.turbine.services.jsp.tags;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import javax.servlet.jsp.JspException;
-import javax.servlet.jsp.PageContext;
-import javax.servlet.jsp.tagext.TagSupport;
-import org.apache.turbine.services.jsp.JspService;
-import org.apache.turbine.util.DynamicURI;
-import org.apache.turbine.util.Log;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateLink;
-
-/**
-  * Supporting class for the TemplateLink tag.
-  * Uses the TemplateLink class to construct a URI
-  *
-  * @author <a href="mailto:ingo@raleigh.ibm.com">Ingo Schuster</a>
-  */
-public class TemplateLinkTag extends TagSupport
-{
-     /**
-      * template parameter defines the template to set
-      * mandatory parameter
-      */
-     private String template;
-
-     /**
-      * The setter for template parameter
-      */
-     public void setTemplate(String template)
-     {
-         this.template = template;
-     }
-
-     /**
-      * action parameter defines the action to set
-      * optional parameter
-      */
-     private String action;
-
-     /**
-      * The setter for screen parameter
-      */
-     public void setAction(String action)
-     {
-         this.action = action;
-     }
-
-     public int doStartTag() throws JspException
-     {
-         RunData data = 
-             (RunData)pageContext.getAttribute(JspService.RUNDATA, 
-                                               PageContext.REQUEST_SCOPE);
-
-         TemplateLink link = new TemplateLink( data );
-         DynamicURI uri = link.setPage( template );
-         if ( action != null ) uri = uri.setAction( action );
-
-         try
-         {
-             if (uri != null) {
-                 pageContext.getOut().print(uri.toString());
-             }
-         }
-         catch (Exception e)
-         {
-             String message = 
-                 "Error processing TemplateLink-tag, parameter: template='"
-                 + template + "', action='" +action +"'";
-             Log.error(message, e);
-             try
-             {
-                 data.getOut().print( message );
-             }
-             catch(java.io.IOException ioe) {}
-         }
-
-         return EVAL_BODY_INCLUDE;
-     }
-
-}
-
diff --git a/proposals/henning/jsp-tags/src/java/org/apache/turbine/util/jsp/JspActionEvent.java b/proposals/henning/jsp-tags/src/java/org/apache/turbine/util/jsp/JspActionEvent.java
deleted file mode 100644
index 42a026f..0000000
--- a/proposals/henning/jsp-tags/src/java/org/apache/turbine/util/jsp/JspActionEvent.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package org.apache.turbine.util.jsp;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.lang.reflect.Method;
-import java.util.Enumeration;
-import org.apache.turbine.modules.ActionEvent;
-import org.apache.turbine.services.jsp.TurbineJsp;
-import org.apache.turbine.util.ParameterParser;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * In order to use Context in Jsp templates your Action's should
- * extend this class instead of extending the ActionEvent class.  The
- * difference between this class and the ActionEvent class is that
- * this class will first attempt to execute one of your doMethod's
- * with a constructor like this:
- *
- * <p>doEvent(RunData data, Context context)
- *
- * <p>It gets the context from the TemplateInfo.getTemplateContext()
- * method. If it can't find a method like that, then it will try to
- * execute the method without the Context in it.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:gabrielm@itcsoluciones.com">Gabriel A. Moreno</a>
- * @version $Id$
- */
-public abstract class JspActionEvent extends ActionEvent
-{
-    /**
-     * You need to implement this in your classes that extend this
-     * class.
-     *
-     * @param data A Turbine RunData object.
-     * @exception Exception, a generic exception.
-     */
-    public abstract void doPerform(RunData data)
-        throws Exception;
-
-    /**
-     * This overrides the default Action.perform() to execute the
-     * doEvent() method.  If that fails, then it will execute the
-     * doPerform() method instead.
-     *
-     * @param data A Turbine RunData object.
-     * @exception Exception, a generic exception.
-     */
-    protected void perform(RunData data)
-        throws Exception
-    {
-        try
-        {
-            executeEvents(data, TurbineJsp.getContext(data));
-        }
-        catch (NoSuchMethodException e)
-        {
-            doPerform(data);
-        }
-    }
-
-    /**
-     * This method should be called to execute the event based system.
-     *
-     * @param data A Turbine RunData object.
-     * @param context Jsp context information.
-     * @exception Exception, a generic exception.
-     */
-    public void executeEvents(RunData data, Context context) throws Exception
-    {
-        // Name of the button.
-        String theButton = null;
-
-        // ParameterParser.
-        ParameterParser pp = data.getParameters();
-
-        String button = pp.convert(BUTTON);
-
-        // Loop through and find the button.
-        for (Enumeration e = pp.keys() ; e.hasMoreElements() ;)
-        {
-            String key = (String) e.nextElement();
-            if (key.startsWith(button))
-            {
-                theButton = formatString(key);
-                break;
-            }
-        }
-
-        if (theButton == null)
-            throw new NoSuchMethodException("ActionEvent: The button was null");
-
-        try
-        {
-            // The arguments to the method to find.
-            Class[] classes = new Class[2];
-            classes[0] = RunData.class;
-            classes[1] = Context.class;
-
-            // The arguments to pass to the method to execute.
-            Object[] args = new Object[2];
-
-            Method method = getClass().getMethod(theButton, classes);
-            args[0] = data;
-            args[1] = context;
-            method.invoke(this, args);
-        }
-        catch (NoSuchMethodException nsme)
-        {
-            // Attempt to execut things the old way..
-            super.executeEvents(data);
-        }
-    }
-}
-
-
-
diff --git a/proposals/pull-api b/proposals/pull-api
deleted file mode 100644
index 69d967b..0000000
--- a/proposals/pull-api
+++ /dev/null
@@ -1,100 +0,0 @@
-Work in progress.
-
-This proposal outlines an implementation of the "Pull API" proposed
-by Jon Stevens. What we would like to provide is an easy way for
-designers to restructure the Information Architechure (IA) of
-a web site without the need of consulting a software engineer.
-A full explanation of the Pull Model is outline <a href="">here</a>.
-
-- use the velocity service
-- types of tools that could be made
-  -> message manager
-  
-     This would allow the designers to create a single set
-     of temlates and use the message manager to control
-     localized message handling. Something like:
-     
-     $app.messageManger.WelcomeText
-  
-     This would also allow a division of labour for 
-     the process of creating the text for a locale.
-     The designers can concentrate on design and work
-     with a single set of templates while the text people
-     can work on making a set of properties files or
-     resource bundles for each of the locales to
-     be supported.
-  
-     Allow the reloading of message bundles so that the
-     server doesn't have to be restarted.
-     
-     Hm. Maybe the tool itself could have a little
-     configuration manager that checks for changes
-     in the source configuration and sends events
-     to listeners. That might be good for all tools,
-     efficient operation but reload new values when
-     needed and cache them again.
-
-     Kav:
-     
-     We might also want to have simple interpolation
-     in any of the messages that are localized.
-     
-     WelcomeText=Hi $username this is your $visit visit!
-     
-     This would be very useful. These little properties
-     could be made little templates so the interpolation
-     would work.
-
-  -> ui manager
-     
-     Control all aspects of the UI with this context tool.
-     Any part of the site that has a UI element can be
-     controlled with this tool. By changing a properties
-     file the skin of an application could be changed.
-     
-     $app.uiManager.TableColor
-  
-     The UI properties could be stored in a database or
-     in properties files. Allow for the easy switching
-     of skins and the reloading of skins on the fly so
-     that you don't have to restart the web server
-     to make UI changes take effect.
-  
-  -> security manager
-     
-     Perform security operations using the pull model because
-     we need control of it here. Because the security is
-     controlled in the screen. I wonder if we could have
-     a security manager that would allow the controlling
-     of each of the screens with a web admin tool.
-     
-     No reloading detection need as each security request
-     requires a hit to live data anyway.
-     
-  -> datamanager
-
-     Making it very easy for the designer to get information
-     out of the database. They would need some sort of
-     information based on the schema ... we could probably
-     produce something from the schema that designers
-     could use to extract information from the database.
-
-     Have a tool that assembles a particular criteria
-     object for a peer to use to grab a set of info.
-
-     $app.dataManager.Companies
-
-     Now what would this actually do. How can the designer
-     actually control the IA if it involves changing
-     the number of rows produced in a table.
-
-     No reloading detection need as each security request
-     requires a hit to live data anyway.
-
-- creating a tool api in velocity with a little doclet
-  that allows us to create documentation for the
-  designers using the tools
-  
-- outline the creation of these tools in a little
-  toolbox by creating a context that can be used
-  over and over again by using context chaining.
diff --git a/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/SystemPropertiesService.java b/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/SystemPropertiesService.java
deleted file mode 100644
index 81c6172..0000000
--- a/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/SystemPropertiesService.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.turbine.services.systemproperties;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-/**
- * The SystemPropertiesService provides a convenient way of getting properties 
- * defined in TurbineResources.properties into System.properties.
- *
- * <p>Properties defined as:<br/ >
- *     <code>services.SystemPropertiesService.name = value</code><br/ >
- * will be added to System.properties as<br/ >
- *     <code>name=value</code><br/ >
- * Suggested use is to configure mail.host for JavaMail thus:<br/ >
- *     <code>services.SystemPropertiesService.mail.host = localhost</code>
- *
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public interface SystemPropertiesService extends Service
-{
-    /**
-     * The service identifier.
-     */
-    public String SERVICE_NAME = "SystemPropertiesService";
-
-}
diff --git a/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/TurbineSystemPropertiesService.java b/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/TurbineSystemPropertiesService.java
deleted file mode 100644
index 35d8fcf..0000000
--- a/proposals/seade/SystemProperties/org/apache/turbine/services/systemproperties/TurbineSystemPropertiesService.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.apache.turbine.services.systemproperties;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import java.util.Properties;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * The SystemPropertiesService provides a convenient way of getting properties 
- * defined in TurbineResources.properties into System.properties.
- *
- * <p>Properties defined as:<br/ >
- *     <code>services.SystemPropertiesService.name = value</code><br/ >
- * will be added to System.properties as<br/ >
- *     <code>name=value</code><br/ >
- * Suggested use is to configure mail.host for JavaMail thus:<br/ >
- *     <code>services.SystemPropertiesService.mail.host = localhost</code>
- *
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public class TurbineSystemPropertiesService
-        extends TurbineBaseService
-        implements SystemPropertiesService
-{
-    private static Log log 
-            = LogFactory.getLog(TurbineSystemPropertiesService.class);
-
-    // ---- Service initilization ------------------------------------------
-
-    /**
-     * Initializes the service.
-     */
-    public void init() throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-        Properties systemProperties = System.getProperties();
-        for (Iterator iter = conf.getKeys(); iter.hasNext();)
-        {
-            String key = (String) iter.next();
-            if (key.equals("classname") || key.equals("earlyInit"))
-            {
-                continue;
-            }
-            if (log.isDebugEnabled())
-            {
-                log.debug("Setting System property \"" + key + "\" to \"" 
-                        + conf.getString(key) + "\"");
-            }
-            systemProperties.setProperty(key, conf.getString(key));
-        }
-        
-        setInit(true);
-    }
-
-}
diff --git a/proposals/seade/SystemProperties/readme.txt b/proposals/seade/SystemProperties/readme.txt
deleted file mode 100644
index a93c399..0000000
--- a/proposals/seade/SystemProperties/readme.txt
+++ /dev/null
@@ -1,42 +0,0 @@
-The SystemProperties service aims to provide a convenient way of getting 
-properties defined in TurbineResources.properties into System.properties.
-
-This is a very trivial service - I am completely open to alternative ways of
-achieving the same end result.
-
-Note that VelocityEmail grabs mail.server from TR.props and passes it through 
-to commons-email.  It is a bit of a pain to have to remember to do this every 
-time when commons-email is used directly and when a system property is provided
-for this very purpose.
-
-I propose that VelocityEmail and related classes be updated to no longer set
-the mail host so that there is a single consistent means of setting it.  An
-alternative to this proposal would be a very specific EmailInit service that
-loads the TR.props mail.server value into System.properties mail.host).
-
-Configuration:
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-...
-services.SystemPropertiesService.classname = org.apache.turbine.services.systemproperties.TurbineSystemPropertiesService
-services.SystemPropertiesService.earlyInit = true
-...
-
-# -------------------------------------------------------------------
-#
-#  S Y S T E M   P R O P E R T I E S   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Properties defined as:
-#     services.SystemPropertiesService.name = value
-# will be added to System.properties as
-#     name=value
-# Suggested use is to configure mail.host for commons-email and JavaMail thus:
-#     services.SystemPropertiesService.mail.host = localhost
-# -------------------------------------------------------------------
-
-services.SystemPropertiesService.mail.host = localhost
diff --git a/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUI.java b/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUI.java
deleted file mode 100644
index bc511d3..0000000
--- a/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUI.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.turbine.services.ui;
-
-/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.ServerData;
-
-/** 
- * This is a convenience class provided to allow access to the UIService
- * through static methods.  The UIService should ALWAYS be accessed via
- * either this class or UITool.
- *
- * @version $Id$
- * @see UIService
- * @see UITool
- */
-public class TurbineUI
-{
-    /**
-     * Refresh all skins.
-     */
-    public static void refresh()
-    {
-        ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).refresh();
-    }
-
-    /**
-     * Refresh a particular skin.
-     * 
-     * @param skinName the name of the skin to clear.
-     */
-    public static void refresh(String skinName)
-    {
-        ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).refresh(skinName);
-    }
-
-    /**
-     * Provide access to the list of available skin names.
-     * 
-     * @return the available skin names.
-     */
-    public static String[] getSkinNames()
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).getSkinNames();
-    }
-
-    /**
-     * Get the name of the default skin name for the web application from the 
-     * TurbineResources.propertiess file. If the property is not present the 
-     * name of the default skin will be returned.  Note that the web application
-     * skin name may be something other than default, in which case its 
-     * properties will default to the skin with the name "default".
-     * 
-     * @return the name of the default skin for the web application.
-     */
-    public static String getWebappSkinName()
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).getWebappSkinName();
-    }
-
-    /**
-     * Retrieve a skin property from the named skin.  If the property is not 
-     * defined in the named skin the value for the default skin will be 
-     * provided.  If the named skin does not exist then the skin configured for 
-     * the webapp will be used.  If the webapp skin does not exist the default
-     * skin will be used.  If the default skin does not exist then 
-     * <code>null</code> will be returned.
-     * 
-     * @param skinName the name of the skin to retrieve the property from.
-     * @param key the key to retrieve from the skin.
-     * @return the value of the property for the named skin (defaulting to the 
-     * default skin), the webapp skin, the default skin or <code>null</code>,
-     * depending on whether or not the property or skins exist.
-     */
-    public static String get(String skinName, String key)
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).get(skinName, key);
-    }
-
-//    /**
-//     * Retrieve a skin property from the default skin for the webapp.  If the 
-//     * property is not defined in the webapp skin the value for the default skin 
-//     * will be provided.  If the webapp skin does not exist the default skin 
-//     * will be used.  If the default skin does not exist then <code>null</code> 
-//     * will be returned.
-//     * 
-//     * @param key the key to retrieve.
-//     * @return the value of the property for the webapp skin (defaulting to the 
-//     * default skin), the default skin or <code>null</code>, depending on 
-//     * whether or not the property or skins exist.
-//     */
-//    public static String get(String key)
-//    {
-//        return ((UIService) TurbineServices.getInstance()
-//            .getService(UIService.SERVICE_NAME)).get(getWebappSkinName(), key);
-//    }
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the image(String image)
-     * method would probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     * @param data the RunData to use as the source of the ServerData to use as 
-     * the basis for the URL.
-     */
-    public static String image(String skinName, String imageId, 
-            ServerData serverData)
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME))
-                        .image(skinName, imageId, serverData);
-    }
-
-//    public static String image(String skinName, String imageId, RunData data)
-//    {
-//        return image(skinName, imageId, data.getServerData());
-//    }
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     */
-    public static String image(String skinName, String imageId)
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).image(skinName, imageId);
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the style() method would 
-     * probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     * @param data the RunData to use as the source of the ServerData to use as 
-     * the basis for the URL.
-     */
-    public static String getStylecss(String skinName, ServerData serverData)
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME))
-                        .getStylecss(skinName, serverData);
-    }
-
-//    public static String getStylecss(String skinName, RunData data)
-//    {
-//        return getStylecss(skinName, data.getServerData());
-//    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     */
-    public static String getStylecss(String skinName)
-    {
-        return ((UIService) TurbineServices.getInstance()
-                .getService(UIService.SERVICE_NAME)).getStylecss(skinName);
-    }
-
-}
diff --git a/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUIService.java b/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUIService.java
deleted file mode 100644
index 5f2546e..0000000
--- a/proposals/seade/UIService/org/apache/turbine/services/ui/TurbineUIService.java
+++ /dev/null
@@ -1,435 +0,0 @@
-package org.apache.turbine.services.ui;
-
-/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FilenameFilter;
-import java.util.HashMap;
-import java.util.Properties;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.pull.TurbinePull;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.uri.DataURI;
-
-/**
- * The UI service provides for shared access to User Interface (skin) files,
- * as well as the ability for non-default skin files to inherit properties from 
- * a default skin.  Use TurbineUI to access skin properties from your screen 
- * classes and action code. UITool is provided as a pull tool for accessing 
- * skin properties from your templates. 
- * 
- * @version $Id$
- * @see UIService
- * @see UITool
- */
-public class TurbineUIService
-        extends TurbineBaseService
-        implements UIService
-{
-    /**
-     * A FilenameFilter that returns only directories.
-     * todo Replace with commons-io DirectoryFileFilter
-     */
-    private class DirectoryFileFilter implements FilenameFilter
-    {
-        public boolean accept(File dir, String fileName)
-        {
-            File file = new File(dir, fileName);
-            if (file.isDirectory())
-            {
-                return true;
-            }
-            return false;
-        }
-    }
-
-    private static org.apache.commons.logging.Log log =
-        org.apache.commons.logging.LogFactory.getLog(TurbineUIService.class);
-
-    /**
-     * The location of the skins within the application resources directory.
-     */
-    private static final String SKINS_DIRECTORY = "/ui/skins";
-
-    /**
-     * The name of the directory where images are stored for this skin.
-     */
-    private static final String IMAGES_DIRECTORY = "/images";
-
-    /**
-     * Property tag for the skin that is to be used for the web application.
-     */
-    private static final String SKIN_PROPERTY_KEY = "tool.ui.skin";
-
-    /**
-     * Default skin name. This name refers to a directory in the 
-     * WEBAPP/resources/ui/skins directory. There is a file called skin.props
-     * which contains the name/value pairs to be made available via the skin.
-     */
-    public static final String SKIN_PROPERTY_DEFAULT = "default";
-
-    /**
-     * The skins directory.
-     */
-    private static final String skinsDirectory 
-            = TurbinePull.getAbsolutePathToResourcesDirectory() 
-                    + SKINS_DIRECTORY;
-
-    /**
-     * The file within the skin directory that actually contains the name/value 
-     * pairs for the skin.
-     */
-    private static final String SKIN_PROPS_FILE = "skin.props";
-
-    /**
-     * The file name for the skin style sheet.
-     */
-    private static final String SKIN_CSS_FILE = "skin.css";
-
-    /**
-     * The directory where application tool resources are stored.
-     */
-    private static String resourcesDirectory;
-
-    /**
-     * The skin Properties store.
-     */
-    private HashMap skins = new HashMap();
-
-    /**
-     * Refresh the service by clearing all skins.
-     */
-    public void refresh()
-    {
-        clearSkins();
-    }
-
-    /**
-     * Refresh a particular skin by clearing it.
-     * 
-     * @param skinName the name of the skin to clear.
-     */
-    public void refresh(String skinName)
-    {
-        clearSkin(skinName);
-    }
-    
-    /**
-     * Retrieve the Properties for a specific skin.  If they are not yet loaded
-     * they will be.  If the specified skin does not exist properties for the
-     * default skin configured for the webapp will be returned and an error
-     * level message will be written to the log.  If the webapp skin does not
-     * exist the default skin will be used and id that doesn't exist an empty
-     * Properties will be returned.
-     * 
-     * @param skinName the name of the skin whose properties are to be 
-     * retrieved.
-     * @return the Properties for the named skin or the properties for the 
-     * default skin configured for the webapp if the named skin does not exist.
-     */
-    private Properties getSkinProperties(String skinName)
-    {
-        Properties skinProperties = (Properties) skins.get(skinName);
-        return null != skinProperties ? skinProperties : loadSkin(skinName); 
-    }
-
-    /**
-     * Retrieve a skin property from the named skin.  If the property is not 
-     * defined in the named skin the value for the default skin will be 
-     * provided.  If the named skin does not exist then the skin configured for 
-     * the webapp will be used.  If the webapp skin does not exist the default
-     * skin will be used.  If the default skin does not exist then 
-     * <code>null</code> will be returned.
-     * 
-     * @param skinName the name of the skin to retrieve the property from.
-     * @param key the key to retrieve from the skin.
-     * @return the value of the property for the named skin (defaulting to the 
-     * default skin), the webapp skin, the default skin or <code>null</code>,
-     * depending on whether or not the property or skins exist.
-     */
-    public String get(String skinName, String key)
-    {
-        Properties skinProperties = getSkinProperties(skinName);
-        return skinProperties.getProperty(key);
-    }
-
-    /**
-     * Provide access to the list of available skin names.
-     * 
-     * @return the available skin names.
-     */
-    public String[] getSkinNames()
-    {
-        File skinsDir = new File(skinsDirectory);
-        return skinsDir.list(new DirectoryFileFilter());
-    }
-
-    /**
-     * Clear the map of stored skins. 
-     */
-    private void clearSkins()
-    {
-        synchronized (skins)
-        {
-            skins = new HashMap();
-        }
-        log.debug("All skins were cleared.");
-    }
-    
-    /**
-     * Clear a particular skin from the map of stored skins.
-     * 
-     * @param skinName the name of the skin to clear.
-     */
-    private void clearSkin(String skinName)
-    {
-        synchronized (skins)
-        {
-            if (!skinName.equals(SKIN_PROPERTY_DEFAULT))
-            {
-                skins.remove(SKIN_PROPERTY_DEFAULT);
-            }
-            skins.remove(skinName);
-        }
-        log.debug("The skin \"" + skinName 
-                + "\" was cleared (will also clear \"default\" skin).");
-    }
-
-    /**
-     * Load the specified skin.
-     * 
-     * @param skinName the name of the skin to load.
-     * @return the Properties for the named skin if it exists, or the skin
-     * configured for the web application if it does not exist, or the default
-     * skin if that does not exist, or an empty Parameters object if even that 
-     * cannot be found.
-     * 
-     * @param skinName the name of the skin whose Properties is to be retrieved.
-     * @return the properties for the named skin, the webapp skin, the default
-     * skin or an empty Properties, depending on which skins exist.
-     */
-    private synchronized Properties loadSkin(String skinName)
-    {
-        Properties defaultSkinProperties = null;
-        
-        if (!skinName.equals(SKIN_PROPERTY_DEFAULT))
-        {
-            defaultSkinProperties = getSkinProperties(SKIN_PROPERTY_DEFAULT);
-        }
-
-        // The following line is okay even for default.
-        Properties skinProperties = new Properties(defaultSkinProperties);
-        
-        try
-        {
-            log.debug("Loading selected skin from: " + skinsDirectory + "/" 
-                    + skinName + "/" + SKIN_PROPS_FILE);
-            FileInputStream is = new FileInputStream(
-                    skinsDirectory + "/" + skinName + "/" + SKIN_PROPS_FILE);
-
-            skinProperties.load(is);
-        }
-        catch (Exception e)
-        {
-            log.error("Cannot load skin: " + skinName, e);
-            if (!skinName.equals(getWebappSkinName()) 
-                    && !skinName.equals(SKIN_PROPERTY_DEFAULT))
-            {
-                log.error("Attempting to return the skin configured for " 
-                        + "webapp instead of " + skinName);
-                return getSkinProperties(getWebappSkinName());
-            }
-            else if (!skinName.equals(SKIN_PROPERTY_DEFAULT))
-            {
-                log.error("Attempting to return the default skin instead of " 
-                        + skinName);
-                return getSkinProperties(SKIN_PROPERTY_DEFAULT);
-            }
-            else
-            {
-                log.error("No skins available - returning an empty Properties");
-                return new Properties();
-            }
-        }
-        
-        // Replace in skins HashMap
-        synchronized (skins)
-        {
-            skins.put(skinName, skinProperties);
-        }
-        
-        return skinProperties;
-    }
-
-    /**
-     * Get the name of the default skin name for the web application from the 
-     * TurbineResources.propertiess file. If the property is not present the 
-     * name of the default skin will be returned.  Note that the web application
-     * skin name may be something other than default, in which case its 
-     * properties will default to the skin with the name "default".
-     * 
-     * @return the name of the default skin for the web application.
-     */
-    public String getWebappSkinName()
-    {
-        return Turbine.getConfiguration()
-                .getString(SKIN_PROPERTY_KEY, SKIN_PROPERTY_DEFAULT);
-    }
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the image(String image)
-     * method would probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String image(String skinName, String imageId, ServerData serverData)
-    {
-        DataURI du = new DataURI(serverData);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-                append(SKINS_DIRECTORY).
-                append("/").
-                append(skinName).
-                append(IMAGES_DIRECTORY).
-                append("/").
-                append(imageId);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     */
-    public String image(String skinName, String imageId)
-    {
-        ServerData sd = Turbine.getDefaultServerData();
-        DataURI du = new DataURI(sd);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-           append(SKINS_DIRECTORY).
-           append("/").
-           append(skinName).
-           append(IMAGES_DIRECTORY).
-           append("/").
-           append(imageId);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the style() method would 
-     * probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String getStylecss(String skinName, ServerData serverData)
-    {
-        DataURI du = new DataURI(serverData);
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-                append(SKINS_DIRECTORY).
-                append("/").
-                append(skinName).
-                append("/").
-                append(SKIN_CSS_FILE);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     */
-    public String getStylecss(String skinName)
-    {
-        ServerData sd = Turbine.getDefaultServerData();
-        DataURI du = new DataURI(sd);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-           append(SKINS_DIRECTORY).
-           append("/").
-           append(skinName).
-           append("/").
-           append(SKIN_CSS_FILE);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    // ---- Service initilization ------------------------------------------
-
-    /**
-     * Initializes the service.
-     */
-    public void init() throws InitializationException
-    {
-        // Ensure PullService has been initialised.
-        getServiceBroker().initService("PullService");
-
-        // Get the resources directory that is specificed in the TR.props or 
-        // default to "resources", relative to the webapp.
-        resourcesDirectory = TurbinePull.getResourcesDirectory();
-
-        setInit(true);
-    }
-
-    /**
-     * Returns to uninitialized state.
-     */
-    public void shutdown()
-    {
-        clearSkins();
-
-        setInit(false);
-    }
-
-}
diff --git a/proposals/seade/UIService/org/apache/turbine/services/ui/UIService.java b/proposals/seade/UIService/org/apache/turbine/services/ui/UIService.java
deleted file mode 100644
index d085497..0000000
--- a/proposals/seade/UIService/org/apache/turbine/services/ui/UIService.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.turbine.services.ui;
-
-/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.ServerData;
-
-/**
- * The UI service provides for shared access to User Interface (skin) files,
- * as well as the ability for non-default skin files to inherit properties from 
- * a default skin.  Use TurbineUI to access skin properties from your screen 
- * classes and action code. UITool is provided as a pull tool for accessing 
- * skin properties from your templates.
- * 
- * <p>Skins are lazy loaded in that they are not loaded until first used.
- * 
- * @version $Id$
- * @see UIService
- * @see UITool
- */
-public interface UIService extends Service
-{
-    /**
-     * The service identifier.
-     */
-    public String SERVICE_NAME = "UIService";
-    
-    /**
-     * Refresh all skins.
-     */
-    public void refresh();
-
-    /**
-     * Refresh a particular skin.
-     * 
-     * @param skinName the name of the skin to clear.
-     */
-    public void refresh(String skinName);
-
-    /**
-     * Provide access to the list of available skin names.
-     * 
-     * @return the available skin names.
-     */
-    public String[] getSkinNames();
-
-    /**
-     * Get the name of the default skin name for the web application from the 
-     * TurbineResources.propertiess file. If the property is not present the 
-     * name of the default skin will be returned.  Note that the web application
-     * skin name may be something other than default, in which case its 
-     * properties will default to the skin with the name "default".
-     * 
-     * @return the name of the default skin for the web application.
-     */
-    public String getWebappSkinName();
-
-    /**
-     * Retrieve a skin property from the named skin.  If the property is not 
-     * defined in the named skin the value for the default skin will be 
-     * provided.  If the named skin does not exist then the skin configured for 
-     * the webapp will be used.  If the webapp skin does not exist the default
-     * skin will be used.  If the default skin does not exist then 
-     * <code>null</code> will be returned.
-     * 
-     * @param skinName the name of the skin to retrieve the property from.
-     * @param key the key to retrieve from the skin.
-     * @return the value of the property for the named skin (defaulting to the 
-     * default skin), the webapp skin, the default skin or <code>null</code>,
-     * depending on whether or not the property or skins exist.
-     */
-    public String get(String skinName, String key);
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the image(String image)
-     * method would probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String image(String skinName, String imageId, ServerData serverData);
-
-    /**
-     * Retrieve the URL for an image that is part of a skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     * 
-     * @param skinName the name of the skin to retrieve the image from.
-     * @param imageId the id of the image whose URL will be generated.
-     */
-    public String image(String skinName, String imageId);
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the style() method would 
-     * probably be enough, but I'm not absolutely positive.
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String getStylecss(String skinName, ServerData serverData);
-
-    /**
-     * Retrieve the URL for the style sheet that is part of a skin. The style is 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     * 
-     * @param skinName the name of the skin to retrieve the style sheet from.
-     */
-    public String getStylecss(String skinName);
-
-}
diff --git a/proposals/seade/UIService/org/apache/turbine/services/ui/UITool.java b/proposals/seade/UIService/org/apache/turbine/services/ui/UITool.java
deleted file mode 100644
index 5cc75db..0000000
--- a/proposals/seade/UIService/org/apache/turbine/services/ui/UITool.java
+++ /dev/null
@@ -1,308 +0,0 @@
-package org.apache.turbine.services.ui;
-
-/*
- * Copyright 2003-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License")
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-
-/**
- * Manages all UI elements for a Turbine Application. Any UI element can be 
- * accessed in any template using the $ui handle (assuming you use the default 
- * PullService configuration). So, for example, you could access the background 
- * colour for your pages by using $ui.bgcolor
- * <p>
- * This implementation provides a single level of inheritance in that if a 
- * property does not exist in a non-default skin, the value from the default 
- * skin will be used. By only requiring values different to those stored in 
- * the default skin to appear in the non-default skins the amount of memory
- * consumed in cases where the UserManager insance is used at a non-global 
- * scope will potentially be reduced due to the fact that a shared instance of 
- * the default skin properties can be used. Note that this inheritance only
- * applies to property values - it does not apply to any images or stylesheets
- * that may form part of your skins.
- * <p>
- * This is an application pull tool for the template system. You should not  
- * use it in a normal application!
- * <p>
- *
- * This is an application pull tool for the template system. You should 
- * <b>not</b> use it in a normal application (use UIService instead).
- *
- * @version $Id$
- * @see UIService
- */
-public class UITool implements ApplicationTool
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(UITool.class);
-
-    /**
-     * Attribute name of skinName value in User's temp hashmap.
-     */
-    public static final String SKIN_ATTRIBUTE =
-            UITool.class.getName()+ ".skin";
-
-    /**
-     * The actual skin being used for the webapp.
-     */
-    private String skinName;
-
-    /**
-     * Refresh the tool.
-     */
-    public void refresh()
-    {
-        TurbineUI.refresh(getSkin());
-        log.debug("UITool refreshed for skin: " + getSkin());
-    }
-
-    /**
-     * Provide access to the list of available skin names.
-     * 
-     * @return the available skin names.
-     */
-    public String[] getSkinNames()
-    {
-        return TurbineUI.getSkinNames();
-    }
-
-    /**
-     * Get the name of the default skin name for the web application from the 
-     * TurbineResources.propertiess file. If the property is not present the 
-     * name of the default skin will be returned.  Note that the web application
-     * skin name may be something other than default, in which case its 
-     * properties will default to the skin with the name "default".
-     * 
-     * @return the name of the default skin for the web application.
-     */
-    public String getWebappSkinName()
-    {
-        return TurbineUI.getWebappSkinName();
-    }
-
-    /**
-     * Retrieve a skin property.  If the property is not defined in the current
-     * skin the value for the default skin will be provided.  If the current
-     * skin does not exist then the skin configured for the webapp will be used.  
-     * If the webapp skin does not exist the default skin will be used.  If the 
-     * default skin does not exist then <code>null</code> will be returned.
-     * 
-     * @param key the key to retrieve from the skin.
-     * @return the value of the property for the named skin (defaulting to the 
-     * default skin), the webapp skin, the default skin or <code>null</code>,
-     * depending on whether or not the property or skins exist.
-     */
-    public String get(String key)
-    {
-        return TurbineUI.get(getSkin(), key);
-    }
-
-    /**
-     * Retrieve the skin name.
-     */
-    public String getSkin()
-    {
-        return skinName;
-    }
-
-    /**
-     * Set the skin name to the skin from the TurbineResources.properties file. 
-     * If the property is not present use the "default" skin.
-     */
-    public void setSkin()
-    {
-        skinName = TurbineUI.getWebappSkinName();
-    }
-
-    /**
-     * Set the skin name to the specified skin.
-     *
-     * @param skinName the skin name to use.
-     */
-    public void setSkin(String skinName)
-    {
-        this.skinName = skinName;
-    }
-
-    /**
-     * Set the skin name when the tool is configured to be loaded on a 
-     * per-request basis. By default it calls getSkin to return the skin 
-     * specified in TurbineResources.properties. Developers can write a subclass 
-     * of UITool that overrides this method to determine the skin to use based 
-     * on information held in the request.
-     *
-     * @param data a RunData instance
-     */
-    protected void setSkin(RunData data)
-    {
-        setSkin();
-    }
-
-    /**
-     * Set the skin name when the tool is configured to be loaded on a 
-     * per-session basis. If the user's temp hashmap contains a value in the 
-     * attribute specified by the String constant SKIN_ATTRIBUTE then that is 
-     * returned. Otherwise it calls getSkin to return the skin specified in 
-     * TurbineResources.properties.
-     *
-     * @param user a User instance
-     */
-    protected void setSkin(User user)
-    {
-        if (user.getTemp(SKIN_ATTRIBUTE) == null)
-        {
-            setSkin();
-        }
-        else
-        {
-            setSkin((String) user.getTemp(SKIN_ATTRIBUTE));
-        }
-    }
-
-    /**
-     * Set the skin name in the user's temp hashmap for the current session.
-     *
-     * @param user a User instance
-     * @param skin the skin name for the session
-     */
-    public static void setSkin(User user, String skin)
-    {
-        user.setTemp(SKIN_ATTRIBUTE, skin);
-    }
-    
-    /**
-     * Retrieve the URL for an image that is part of the skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the image(String image)
-     * method would probably be enough, but I'm not absolutely positive.
-     * 
-     * @param imageId the id of the image whose URL will be generated.
-     * @param data the RunDate to use as the source of the ServerData to use as 
-     * the basis for the URL.
-     */
-    public String image(String imageId, RunData data)
-    {
-        return image(imageId, data.getServerData());
-    }
-
-    /**
-     * Retrieve the URL for an image that is part of the skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the image(String image)
-     * method would probably be enough, but I'm not absolutely positive.
-     * 
-     * @param imageId the id of the image whose URL will be generated.
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String image(String imageId, ServerData serverData)
-    {
-        return TurbineUI.image(getSkin(), imageId, serverData);
-    }
-
-    /**
-     * Retrieve the URL for an image that is part of the skin. The images are 
-     * stored in the WEBAPP/resources/ui/skins/[SKIN]/images directory.
-     * 
-     * @param imageId the id of the image whose URL will be generated.
-     */
-    public String image(String imageId)
-    {
-        return TurbineUI.image(getSkin(), imageId);
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of the skin. The style 
-     * is stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the style() method would 
-     * probably be enough, but I'm not absolutely positive.
-     * 
-     * @param data the RunDate to use as the source of the ServerData to use as 
-     * the basis for the URL.
-     */
-    public String getStylecss(RunData data)
-    {
-        return getStylecss(data.getServerData());
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of the skin. The style 
-     * is stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     *
-     * <p>Use this if for some reason your server name, server scheme, or server 
-     * port change on a per request basis. I'm not sure if this would happend in 
-     * a load balanced situation. I think in most cases the style() method would 
-     * probably be enough, but I'm not absolutely positive.
-     * 
-     * @param serverData the serverData to use as the basis for the URL.
-     */
-    public String getStylecss(ServerData serverData)
-    {
-        return TurbineUI.getStylecss(getSkin(), serverData);
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part of the skin. The style 
-     * is stored in the WEBAPP/resources/ui/skins/[SKIN] directory with the 
-     * filename skin.css
-     */
-    public String getStylecss()
-    {
-        return TurbineUI.getStylecss(getSkin());
-    }
-
-    /**
-     * Initialize the UITool object.
-     *
-     * @param data This is null, RunData or User depending upon specified tool 
-     * scope.
-     */
-    public void init(Object data)
-    {
-        if (data == null)
-        {
-            log.debug("UITool scope is global");
-            setSkin();
-        }
-        else if (data instanceof RunData)
-        {
-            log.debug("UITool scope is request");
-            setSkin((RunData) data);
-        }
-        else if (data instanceof User)
-        {
-            log.debug("UITool scope is session");
-            setSkin((User) data);
-        }
-    }
-
-}
diff --git a/proposals/seade/UIService/readme.txt b/proposals/seade/UIService/readme.txt
deleted file mode 100644
index af82fb1..0000000
--- a/proposals/seade/UIService/readme.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-This service and associated pull tool provide an enhanced replacement for the
-existing UIManager pull tool.  Major enhancements include:
-* Skin properties are shared between all users with lazy loading.
-* Non-default skin files inherit properties from the default skin
-* Access to skin properties from screen and action classes is now provided for
-* Access is provided to the list of available skins
-
-This service is dependant on PullService only in that it makes use of 
-TurbinePull.getResourcesDirectory() during initialization.  It may be a good
-idea to duplicate small amount of underlying code in order to eliminate this
-dependency.
-
-Configuration:
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-...
-services.UIService.classname = org.apache.turbine.services.ui.TurbineUIService
-#services.UIService.earlyInit = true
-...
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-...
-tool.session.ui = org.apache.turbine.services.ui.UITool
-tool.ui.skin = default
-...
\ No newline at end of file
diff --git a/src/announcements/2.2.ann b/src/announcements/2.2.ann
deleted file mode 100644
index 3c7b689..0000000
--- a/src/announcements/2.2.ann
+++ /dev/null
@@ -1,18 +0,0 @@
-The Turbine team is pleased to announce the 2.2 release!
-
-http://jakarta.apache.org/turbine/turbine-2/
-
-Turbine is a servlet based framework that allows experienced Java developers to 
-quickly build secure web applications. 
-Parts of Turbine can also be used independently of the web portion of Turbine as
-well. In other words, we strive to make portions of Turbine easily available for
-use in other applications.
-
-You can find a full list of changes here:
-http://jakarta.apache.org/turbine/turbine-2/changes.html
-
-You can find the Torque distributions here:
-http://jakarta.apache.org/builds/jakarta-turbine/turbine-2/release/
-
-
-
diff --git a/src/dtd/database.dtd b/src/dtd/database.dtd
deleted file mode 100644
index fb3d2a5..0000000
--- a/src/dtd/database.dtd
+++ /dev/null
@@ -1,93 +0,0 @@
-<!-- 
-    Torque XML database schema DTD 
-    $Id$
--->
-
-<!ELEMENT app-data (database+)>
-
-<!ELEMENT database (table+)>
-<!ATTLIST database
-  name CDATA #IMPLIED
-  defaultIdMethod (native|idbroker|autoincrement|sequence|none) "none"
-  package CDATA #IMPLIED
-  baseClass CDATA #IMPLIED
-  basePeer CDATA #IMPLIED
->
-
-<!ELEMENT table (column+,(foreign-key|index|unique|id-method-parameter)*)>
-<!ATTLIST table 
-  name CDATA #REQUIRED
-  javaName CDATA #IMPLIED
-  idMethod (native|idbroker|autoincrement|sequence|none|null) "null"
-  skipSql (true|false) "false"
-  abstract (true|false) "false"
-  baseClass CDATA #IMPLIED
-  basePeer CDATA #IMPLIED
-  alias CDATA #IMPLIED
->
-
-<!ELEMENT id-method-parameter EMPTY>
-<!ATTLIST id-method-parameter
-  name CDATA "default" 
-  value CDATA #REQUIRED
->
-  
-<!ELEMENT column (inheritance*)>
-<!ATTLIST column 
-  name CDATA #REQUIRED
-  javaName CDATA #IMPLIED
-  primaryKey (true|false) "false"
-  required (true|false) "false"
-  type
-    (
-          BIT  | TINYINT | SMALLINT    | INTEGER    | BIGINT    | FLOAT 
-        | REAL | NUMERIC | DECIMAL     | CHAR       | VARCHAR   | LONGVARCHAR 
-        | DATE | TIME    | TIMESTAMP   | BINARY     | VARBINARY | LONGVARBINARY 
-        | NULL | OTHER   | JAVA_OBJECT | DISTINCT   | STRUCT    | ARRAY 
-        | BLOB | CLOB    | REF         | BOOLEANINT | BOOLEANCHAR 
-    ) "VARCHAR"       
-  size CDATA #IMPLIED
-  default CDATA #IMPLIED
-  autoIncrement (true|false) "false"
-  inheritance (single|false) "false" 
-  inputValidator CDATA #IMPLIED
->
-
-<!ELEMENT inheritance EMPTY>
-<!ATTLIST inheritance
-  key CDATA #REQUIRED 
-  class CDATA #REQUIRED
-  extends CDATA #IMPLIED
->
-                  
-<!ELEMENT foreign-key (reference+)>
-<!ATTLIST foreign-key 
-  foreignTable CDATA #REQUIRED
->
-  
-<!ELEMENT reference EMPTY>
-<!ATTLIST reference 
-  local CDATA #REQUIRED
-  foreign CDATA #REQUIRED
->
-
-<!ELEMENT index (index-column+)>
-<!ATTLIST index 
-  name CDATA #REQUIRED
->
-
-<!ELEMENT index-column EMPTY>
-<!ATTLIST index-column
-  name CDATA #REQUIRED
-  size CDATA #IMPLIED
->
-
-<!ELEMENT unique (unique-column+)>
-<!ATTLIST unique
-  name CDATA #IMPLIED
->
-
-<!ELEMENT unique-column EMPTY>
-<!ATTLIST unique-column
-  name CDATA #REQUIRED
->
diff --git a/src/dtd/intake.dtd b/src/dtd/intake.dtd
deleted file mode 100644
index 79c9a3e..0000000
--- a/src/dtd/intake.dtd
+++ /dev/null
@@ -1,219 +0,0 @@
-<!--
-    Intake XML input constraints DTD
-    $Id$
--->
-
-<!--
-The input-data element is the root of the intake XML
-definition file.
-
-basePackage: Base package to use for specifing the class names of
-             mapped objects.  This value will be prepended to the
-             class name of the mapped object to form the
-             fully qualified class name.
-             Example: org.apache.turbine.om
-             Default: ""
-
-groupPrefix: Prefix to be assigned to all groups within the input-data
-             element.  This is used to make group name unique if the
-             same group name is used in multiple definition files.
-             Default: null
--->
-<!ELEMENT input-data (group+)>
-<!ATTLIST input-data
-  basePackage CDATA #IMPLIED
-  groupPrefix CDATA #IMPLIED
->
-
-<!--
-The group element defines an intake group.
-
-key:            A short identified for the group.  It is only used in
-                query parameters so it does not have to be descriptive.
-                This value must be unique across all groups in the
-                enclosing input-data element.
-
-                Default: N/A
-
-name:           Name of the group.  This is the value used to get the
-                group from the Intake Service.  It must be unique across
-                all groups in the enclosing input-data element.
-
-                Default: N/A
-
-mapToObject:    Class name of the object that will be mapped to the
-                group.  Instances of this class can be used to set
-                the values of the fields within the group.  The
-                Intake Service can also set the attributes of
-                the object from the fields in the group.
-
-                This class name actually used by the intake service
-                will be basePackage+"."+mapToObject.
-
-                Example:
-                basePackage=org.apache.turbine.om
-                mapToObject=TurbineUser
-                Effective class name = org.apache.turbine.om.TurbineUser
-
-                Default: null
-
-poolCapacity:   Capacity of the pool used to store instances of the fields
-                within this group.
-
-                Default: 128
-
-Used in:        input-data
--->
-<!ELEMENT group (field+)>
-<!ATTLIST group
-  key CDATA #REQUIRED
-  name CDATA #REQUIRED
-  mapToObject CDATA #IMPLIED
-  pool-capacity CDATA #IMPLIED
->
-
-<!--
-The field element defines a field within a group.  This will be used to
-validate one HTML input field.
-
-key:            A short identifier for the field.  It is only used in
-                query parameters.  It must be unique across all fields
-                within the enclosing group element.
-
-                Default: N/A
-
-name:           The name of the field.  This is the identifier used to
-                get the field from the Intake Service.  It must be unique
-                across all fields all fields within the enclosing group
-                element.
-
-                Default: N/A
-
-displayName:    An optional name for the field that can be used for display
-                on HTML forms.  This is intended to be a friendly name for
-
-                Default: name
-
-displaySize:    An optional size value to use when create the HTML input tag
-                for this field.
-
-type:           Type of data contained in the field.
-
-                Default: "String"
-
-defaultValue:   Default value to be used for the value of the field if one
-                is not supplied my the mapped object.
-
-                Default: null
-
-emptyValue:     Value to be used for the value of the field if it is not 
-                supplied by the parameters returned from an input form.
-
-                Default: null
-
-multiValued:    If this is true, the field will accept multiple values.
-                Otherwise, the field only accepts a single vale.
-
-                Default: false
-
-validator:      Name of the class used for validating the value of the
-                field.  This is used to have the field validated by a custom
-                validator object.  If this is not set, a default validator
-                will be used according to the field type.
-
-                The the name of the class is not fully qualified, it will
-                be prepended with org.apache.turbine.services.intake.validator.
-                For example: a value of "NumberValidator" will be read as
-                "org.apache.turbine.services.intake.validator.NumberValidator".
-
-                Default: default validator for the field type.
-
-mapToObject:    Class name of the mapped object.  This will override the
-                mapToObject attribute of the enclosing group element.
-
-                Default: mapToObject from the enclosing group element
-
-mapToProperty:  Name of the property within the mapped object that
-                will be mapped to the field.  This value has no meaning
-                if mapToObject is not set.
-
-                This is used to determine the names of the getter and
-                setter methods in the mapped object.  The actually
-                attribute within the object is never accessed directly.
-
-                When determining the name of the getter and setter methods,
-                the first character of the value of mapToProperty is made
-                uppercase.  It is the prepended with either "get" or "set"
-                appropriately.
-
-                The getter method must not take any parameters.  The setter
-                method must take exactly one parameter.  For more information
-                of the details of determining the methods, see the javadocs
-                for java.beans.PropertyDescriptor.
-
-                Note: Specifing an empty string for the value of this attribute
-                will have the effect of not mapping this field.  This is very
-                useful in cases where the group has a value for mapToObject but
-                there are fields in the group which should not be mapped.
-
-                Default: The name of the field.
-
-Used in:        group
--->
-<!ELEMENT field (rule*,required-message?)>
-<!ATTLIST field
-  key CDATA #REQUIRED
-  name CDATA #REQUIRED
-  displayName CDATA #IMPLIED
-  displaySize CDATA #IMPLIED
-  type ( boolean | BigDecimal | int  | float | FileItem
-       | String | DateString  | StringKey | NumberKey
-       | ComboKey | double | short | long ) "String"
-  multiValued ( true | false ) "false"
-  mapToObject CDATA #IMPLIED
-  mapToProperty CDATA #IMPLIED
-  validator CDATA #IMPLIED
-  defaultValue CDATA #IMPLIED
-  emptyValue CDATA #IMPLIED
->
-
-<!--
-The rule element is used to decribe validation rules for fields.
-
-name:       Name of the rule.  The valid rule names vary by field type.
-
-            Default: N/A
-
-value:      Value passed to the rule.  The meaning of this attribute
-            vary by rule.
-
-            Default: N/A
-
-PCDATA:     Error message set for the field if the validation rule
-            fails.
-
-            Default: ""
-
-Used in:    field
--->
-<!ELEMENT rule (#PCDATA)>
-<!ATTLIST rule
-  name CDATA #REQUIRED
-  value CDATA #REQUIRED
->
-
-<!--
-THIS ELEMENT IS DEPRECATED!!!!!!
-Use the required rule instead.
-
-The required-message element is a way of marking a field as required.
-
-PCDATA:     Error message set for the field if a value is not specified
-            for the field in the query data.
-
-            Default: ""
-
-Used in:    field
--->
-<!ELEMENT required-message (#PCDATA)>
-
diff --git a/src/java/org/apache/java/lang/Bytes.java b/src/java/org/apache/java/lang/Bytes.java
deleted file mode 100644
index 9d67a0d..0000000
--- a/src/java/org/apache/java/lang/Bytes.java
+++ /dev/null
@@ -1,365 +0,0 @@
-package org.apache.java.lang;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Static methods for managing byte arrays (all methods follow Big
- * Endian order where most significant bits are in front).
- *
- * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
- * @version $Id$
- * @deprecated Use Jakarta Commons
- */
-public class Bytes
-{
-    private static final char[] hexDigits =
-    {
-        '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
-    };
-
-    /**
-     * Appends two bytes array into one.
-     *
-     * @param a A byte[].
-     * @param b A byte[].
-     * @return A byte[].
-     */
-    public static byte[] append(byte[] a,
-                                byte[] b)
-    {
-        byte[] z = new byte[a.length + b.length];
-        System.arraycopy(a, 0, z, 0, a.length);
-        System.arraycopy(b, 0, z, a.length, b.length);
-        return z;
-    }
-
-    /**
-     * Appends three bytes array into one.
-     *
-     * @param a A byte[].
-     * @param b A byte[].
-     * @param c A byte[].
-     * @return A byte[].
-     */
-    public static byte[] append(byte[] a,
-                                byte[] b,
-                                byte[] c)
-    {
-        byte[] z = new byte[a.length + b.length + c.length];
-        System.arraycopy(a, 0, z, 0, a.length);
-        System.arraycopy(b, 0, z, a.length, b.length);
-        System.arraycopy(c, 0, z, a.length + b.length, c.length);
-        return z;
-    }
-
-    /**
-     * Compares two byte arrays for equality.
-     *
-     * @param a A byte[].
-     * @param b A byte[].
-     * @return True if the arrays have identical contents.
-     */
-    public static boolean areEqual(byte[] a,
-                                   byte[] b)
-    {
-        int aLength = a.length;
-        if (aLength != b.length) return false;
-
-        for (int i = 0; i < aLength; i++)
-            if (a[i] != b[i])
-                return false;
-
-        return true;
-    }
-
-    /**
-     * Gets the end of the byte array given.
-     *
-     * @param b A byte[].
-     * @param pos The position from which to start.
-     * @return A byte[] consisting of the portion of b between pos and
-     * the end of b.
-     */
-    public static byte[] copy(byte[] b,
-                              int pos)
-    {
-        return copy(b, pos, b.length - pos);
-    }
-
-    /**
-     * Gets a sub-set of the byte array given.
-     *
-     * @param b A byte[].
-     * @param pos The position from which to start.
-     * @param length The number of bytes to copy from the original
-     * byte array to the new one.
-     * @return A byte[] consisting of the portion of b starting at pos
-     * and continuing for length bytes, or until the end of b is
-     * reached, which ever occurs first.
-     */
-    public static byte[] copy(byte[] b,
-                              int pos,
-                              int length)
-    {
-        byte[] z = new byte[length];
-        System.arraycopy(b, pos, z, 0, length);
-        return z;
-    }
-
-    /**
-     * Merges a bytes array into another.
-     *
-     * @param src A byte[].
-     * @param dest A byte[].
-     */
-    public static void merge(byte[] src,
-                             byte[] dest)
-    {
-        System.arraycopy(src, 0, dest, 0, src.length);
-    }
-
-    /**
-     * Merges a bytes array into another starting from the
-     * given position.
-     *
-     * @param src A byte[].
-     * @param dest A byte[].
-     * @param pos The position from which to start.
-     */
-    public static void merge(byte[] src,
-                             byte[] dest,
-                             int pos)
-    {
-        System.arraycopy(src, 0, dest, pos, src.length);
-    }
-
-    /**
-     * Merges a bytes array into another starting from the
-     * given position.
-     *
-     * @param src A byte[].
-     * @param dest A byte[].
-     * @param pos The position from which to start.
-     * @param length The number of bytes to merge.
-     */
-    public static void merge(byte[] src,
-                             byte[] dest,
-                             int pos,
-                             int length)
-    {
-        System.arraycopy(src, 0, dest, pos, length);
-    }
-
-    /**
-     * Merges a bytes array into another starting from the
-     * given positions.
-     *
-     * @param src A byte[].
-     * @param dest A byte[].
-     * @param srcpos The position from which to start in src.
-     * @param destpos The position from which to start in dest.
-     * @param length The number of bytes to merge.
-     */
-    public static void merge(byte[] src,
-                             byte[] dest,
-                             int srcpos,
-                             int destpos,
-                             int length)
-    {
-        System.arraycopy(src, srcpos, dest, destpos, length);
-    }
-
-    /**
-     * Returns a 4-byte array built from an int.
-     *
-     * @param n The number to convert.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(int n)
-    {
-        return toBytes(n, new byte[4]);
-    }
-
-    /**
-     * Build a 4-byte array from an int.  No check is performed on the
-     * array length.
-     *
-     * @param n The number to convert.
-     * @param b The array to fill.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(int n,
-                                 byte[] b)
-    {
-        b[3] = (byte) (n);
-        n >>>= 8;
-        b[2] = (byte) (n);
-        n >>>= 8;
-        b[1] = (byte) (n);
-        n >>>= 8;
-        b[0] = (byte) (n);
-
-        return b;
-    }
-
-    /**
-     * Returns a 8-byte array built from a long.
-     *
-     * @param n The number to convert.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(long n)
-    {
-        return toBytes(n, new byte[8]);
-    }
-
-    /**
-     * Build a 8-byte array from a long.  No check is performed on the
-     * array length.
-     *
-     * @param n The number to convert.
-     * @param b The array to fill.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(long n,
-                                 byte[] b)
-    {
-        b[7] = (byte) (n);
-        n >>>= 8;
-        b[6] = (byte) (n);
-        n >>>= 8;
-        b[5] = (byte) (n);
-        n >>>= 8;
-        b[4] = (byte) (n);
-        n >>>= 8;
-        b[3] = (byte) (n);
-        n >>>= 8;
-        b[2] = (byte) (n);
-        n >>>= 8;
-        b[1] = (byte) (n);
-        n >>>= 8;
-        b[0] = (byte) (n);
-
-        return b;
-    }
-
-    /**
-     * Build an int from first 4 bytes of the array.
-     *
-     * @param b The byte[] to convert.
-     * @return An int.
-     */
-    public static int toInt(byte[] b)
-    {
-        return ((((int) b[3]) & 0xFF) +
-                ((((int) b[2]) & 0xFF) << 8) +
-                ((((int) b[1]) & 0xFF) << 16) +
-                ((((int) b[0]) & 0xFF) << 24));
-    }
-
-    /**
-     * Build a long from first 8 bytes of the array.
-     *
-     * @param b The byte[] to convert.
-     * @return A long.
-     */
-    public static long toLong(byte[] b)
-    {
-        return ((((long) b[7]) & 0xFF) +
-                ((((long) b[6]) & 0xFF) << 8) +
-                ((((long) b[5]) & 0xFF) << 16) +
-                ((((long) b[4]) & 0xFF) << 24) +
-                ((((long) b[3]) & 0xFF) << 32) +
-                ((((long) b[2]) & 0xFF) << 40) +
-                ((((long) b[1]) & 0xFF) << 48) +
-                ((((long) b[0]) & 0xFF) << 56));
-    }
-
-    /**
-     * Returns a string of hexadecimal digits from a byte array.
-     *
-     * @param b The byte[] to convert.
-     * @return A String.
-     */
-    public static String toString(byte[] b)
-    {
-        return toString(b, 0, b.length);
-    }
-
-    /**
-     * Returns a string of hexadecimal digits from a byte array,
-     * starting at offset and continuing for length bytes.
-     *
-     * @param b The byte[] to convert.
-     * @param offset An int.
-     * @param length An int.
-     * @return A String.
-     */
-    public static String toString(byte[] b,
-                                  int offset,
-                                  int length)
-    {
-        char[] buf = new char[length * 2];
-
-        for (int i = offset, j = 0, k; i < offset + length; i++)
-        {
-            k = b[i];
-            buf[j++] = hexDigits[(k >>> 4) & 0x0F];
-            buf[j++] = hexDigits[k & 0x0F];
-        }
-
-        return new String(buf);
-    }
-}
diff --git a/src/java/org/apache/java/security/MD5.java b/src/java/org/apache/java/security/MD5.java
deleted file mode 100644
index 0bac648..0000000
--- a/src/java/org/apache/java/security/MD5.java
+++ /dev/null
@@ -1,554 +0,0 @@
-package org.apache.java.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This class implements the Message Digest 5 algorithm (MD5) as
- * defined in RFC-1321.
- *
- * <p><b>Note:</b> even if standard Java 1.1 APIs already provide a
- * MD5 implementation, this class is used on those Java runtime
- * environments (like Kaffe) where the package
- * <code>java.security</code> is highly improbable to be found.
- *
- * @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
- * @version $Id$
- * @deprecated Use the java.security package.
- */
-public final class MD5
-    extends MessageDigest
-{
-    private long counter;
-    private int reminder;
-    private byte buffer[];
-    private int state[];
-    private int x[];
-
-    /*********************** MD5 Functions ***********************/
-
-    // 16 * 4 bytes
-    static byte padding[] =
-    {
-        (byte) 0x80,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-    };
-
-    /*********************** Self Test ***********************/
-
-    private static String[] messages =
-    {
-        "",
-        "a",
-        "abc",
-        "message digest",
-        "abcdefghijklmnopqrstuvwxyz",
-        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
-        "12345678901234567890123456789012345678901234567890123456789012345678901234567890",
-    };
-
-    private static String[] digests =
-    {
-        "d41d8cd98f00b204e9800998ecf8427e",
-        "0cc175b9c0f1b6a831c399e269772661",
-        "900150983cd24fb0d6963f7d28e17f72",
-        "f96b697d7cb7938d525a2f31aaf161d0",
-        "c3fcd3d76192e4007dfb496cca67e13b",
-        "d174ab98d277d9f5a5611c2c9f419d9f",
-        "57edf4a22be3c955ac49da2e2107b67a",
-    };
-
-
-    /**
-     * Creates the algorithm and reset its state.
-     */
-    public MD5()
-    {
-        super();
-    }
-
-    /**
-     * Append another block of specified length to the message
-     * starting at the given offset.
-     *
-     * @param block A byte[].
-     * @param offset An int.
-     * @param length An int.
-     */
-    public void append(byte[] block,
-                       int offset,
-                       int length)
-    {
-        while (true)
-        {
-            if (length >= reminder)
-            {
-                System.arraycopy(block, offset, buffer,
-                                 (int) (counter & 63L), reminder);
-                transform(buffer);
-                counter += reminder;
-                offset += reminder;
-                length -= reminder;
-                reminder = 64;
-            }
-            else
-            {
-                System.arraycopy(block, offset, buffer,
-                                 (int) (counter & 63L), length);
-                counter += length;
-                reminder -= length;
-                break;
-            }
-        }
-    }
-
-    /*********************** Byte/Int utilities ***********************/
-
-    /**
-     * Converts a 64-byte array into a 16-int array.
-     *
-     * @param in A byte[].
-     * @param out An int[].
-     */
-    private static void byte2int(byte[] in,
-                                 int[] out)
-    {
-        for (int inpos = 0, outpos = 0; outpos < 16; outpos++)
-        {
-            out[outpos] = ((((int) (in[inpos++] & 0xff))) |
-                           (((int) (in[inpos++] & 0xff)) << 8) |
-                           (((int) (in[inpos++] & 0xff)) << 16) |
-                           (((int) (in[inpos++] & 0xff)) << 24));
-        }
-    }
-
-    /**
-     * Appends a message block with specified length starting from the
-     * given offset, and return its message digest.
-     *
-     * @param block A byte[].
-     * @param offset An int.
-     * @param length An int.
-     */
-    public byte[] digest(byte[] block,
-                         int offset,
-                         int length)
-    {
-        this.append(block, offset, length);
-
-        byte[] bits = toBytes(counter << 3);
-        byte[] digest = new byte[16];
-
-        if (reminder > 8)
-        {
-            append(padding, 0, reminder - 8);
-        }
-        else
-        {
-            append(padding, 0, 64 + (reminder - 8));
-        }
-
-        append(bits, 0, 8);
-
-        int2byte(state, digest);
-
-        this.reset();
-        return digest;
-    }
-
-    /*
-     * Method F.
-     *
-     * @param x An int.
-     * @param y An int.
-     * @param z An int.
-     * @return An int.
-     */
-    static private int F(int x,
-                         int y,
-                         int z)
-    {
-        return (z ^ (x & (y^z)));
-    }
-
-    /*
-     * Method FF.
-     *
-     * @param a An int.
-     * @param b An int.
-     * @param c An int.
-     * @param d An int.
-     * @param x An int.
-     * @param s An int.
-     * @param ac An int.
-     * @return An int.
-     */
-    static private int FF(int a,
-                          int b,
-                          int c,
-                          int d,
-                          int x,
-                          int s,
-                          int ac)
-    {
-        a += x + ac + F(b,c,d);
-        a = (a << s | a >>> -s);
-        return a + b;
-    }
-
-    /*
-     * Method G.
-     *
-     * @param x An int.
-     * @param y An int.
-     * @param z An int.
-     * @return An int.
-     */
-    static private int G(int x,
-                         int y,
-                         int z)
-    {
-        return (y ^ (z & (x^y)));
-    }
-
-    /*
-     * Method GG.
-     *
-     * @param a An int.
-     * @param b An int.
-     * @param c An int.
-     * @param d An int.
-     * @param x An int.
-     * @param s An int.
-     * @param ac An int.
-     * @return An int.
-     */
-    static private int GG(int a,
-                          int b,
-                          int c,
-                          int d,
-                          int x,
-                          int s,
-                          int ac)
-    {
-        a += x + ac + G(b,c,d);
-        a = (a << s | a >>> -s);
-        return a + b;
-    }
-
-    /*
-     * Method H.
-     *
-     * @param x An int.
-     * @param y An int.
-     * @param z An int.
-     * @return An int.
-     */
-    static private int H(int x,
-                         int y,
-                         int z)
-    {
-        return (x ^ y ^ z);
-    }
-
-    /*
-     * Method HH.
-     *
-     * @param a An int.
-     * @param b An int.
-     * @param c An int.
-     * @param d An int.
-     * @param x An int.
-     * @param s An int.
-     * @param ac An int.
-     * @return An int.
-     */
-    static private int HH(int a,
-                          int b,
-                          int c,
-                          int d,
-                          int x,
-                          int s,
-                          int ac)
-    {
-        a += x + ac + H(b,c,d);
-        a = (a << s | a >>> -s);
-        return a + b;
-    }
-
-    /*
-     * Method I.
-     *
-     * @param x An int.
-     * @param y An int.
-     * @param z An int.
-     * @return An int.
-     */
-    static private int I(int x,
-                         int y,
-                         int z)
-    {
-        return (y ^ (x | ~z));
-    }
-
-    /*
-     * Method II.
-     *
-     * @param a An int.
-     * @param b An int.
-     * @param c An int.
-     * @param d An int.
-     * @param x An int.
-     * @param s An int.
-     * @param ac An int.
-     * @return An int.
-     */
-    static private int II(int a,
-                          int b,
-                          int c,
-                          int d,
-                          int x,
-                          int s,
-                          int ac)
-    {
-        a += x + ac + I(b,c,d);
-        a = (a << s | a >>> -s);
-        return a + b;
-    }
-
-    /**
-     * Converts a 4-int array into a 16-byte array.
-     *
-     * @param in An int[].
-     * @param out A byte[].
-     */
-    private static void int2byte(int[] in,
-                                 byte[] out)
-    {
-        for (int inpos = 0, outpos = 0; inpos < 4; inpos++)
-        {
-            out[outpos++] = (byte) (in[inpos] & 0xff);
-            out[outpos++] = (byte) ((in[inpos] >>> 8) & 0xff);
-            out[outpos++] = (byte) ((in[inpos] >>> 16) & 0xff);
-            out[outpos++] = (byte) ((in[inpos] >>> 24) & 0xff);
-        }
-    }
-
-    /*
-     * Main routine, for testing purposes only.
-     *
-     * @param ignored A String[] with the command line arguments.
-     */
-    public static final void main(String[] ignored)
-    {
-        MD5 md5 = new MD5();
-
-        for (int i = 0; i < messages.length; i++)
-        {
-            String digest = org.apache.java.lang.Bytes.toString(
-                md5.digest(messages[i].getBytes()));
-            System.out.println("Computed: " + digest);
-            System.out.println("Correct: " + digests[i]);
-            if (digest.equalsIgnoreCase(digests[i]))
-            {
-                System.out.println("Test " + i + " passed.");
-            }
-            else
-            {
-                System.out.println("Test " + i + " failed.");
-            }
-        }
-    }
-
-    /**
-     * Resets the state of the class.  <b>Beware</b>: calling this
-     * method erases all data previously inserted.
-     */
-    public void reset()
-    {
-        buffer = new byte[64];
-        state = new int[4];
-        x = new int[16];
-
-        state[0] = 0x67452301;
-        state[1] = 0xefcdab89;
-        state[2] = 0x98badcfe;
-        state[3] = 0x10325476;
-
-        counter = 0;
-        reminder = 64;
-    }
-
-    /**
-     * Converts a long to a 8-byte array using low order first.
-     *
-     * @param n A long.
-     * @return A byte[].
-     */
-    public static byte[] toBytes(long n)
-    {
-        byte[] b = new byte[8];
-
-        b[0] = (byte) (n);
-        n >>>= 8;
-        b[1] = (byte) (n);
-        n >>>= 8;
-        b[2] = (byte) (n);
-        n >>>= 8;
-        b[3] = (byte) (n);
-        n >>>= 8;
-        b[4] = (byte) (n);
-        n >>>= 8;
-        b[5] = (byte) (n);
-        n >>>= 8;
-        b[6] = (byte) (n);
-        n >>>= 8;
-        b[7] = (byte) (n);
-
-        return b;
-    }
-
-    /*
-     * TODO: Document.
-     *
-     * @param buffer A byte[].
-     */
-    private void transform(byte[] buffer)
-    {
-        int a, b, c, d;
-
-        byte2int(buffer, x);
-
-        a = state[0];
-        b = state[1];
-        c = state[2];
-        d = state[3];
-
-        a = FF(a, b, c, d, x[ 0],  7, 0xd76aa478);
-        d = FF(d, a, b, c, x[ 1], 12, 0xe8c7b756);
-        c = FF(c, d, a, b, x[ 2], 17, 0x242070db);
-        b = FF(b, c, d, a, x[ 3], 22, 0xc1bdceee);
-        a = FF(a, b, c, d, x[ 4],  7, 0xf57c0faf);
-        d = FF(d, a, b, c, x[ 5], 12, 0x4787c62a);
-        c = FF(c, d, a, b, x[ 6], 17, 0xa8304613);
-        b = FF(b, c, d, a, x[ 7], 22, 0xfd469501);
-        a = FF(a, b, c, d, x[ 8],  7, 0x698098d8);
-        d = FF(d, a, b, c, x[ 9], 12, 0x8b44f7af);
-        c = FF(c, d, a, b, x[10], 17, 0xffff5bb1);
-        b = FF(b, c, d, a, x[11], 22, 0x895cd7be);
-        a = FF(a, b, c, d, x[12],  7, 0x6b901122);
-        d = FF(d, a, b, c, x[13], 12, 0xfd987193);
-        c = FF(c, d, a, b, x[14], 17, 0xa679438e);
-        b = FF(b, c, d, a, x[15], 22, 0x49b40821);
-
-        a = GG(a, b, c, d, x[ 1],  5, 0xf61e2562);
-        d = GG(d, a, b, c, x[ 6],  9, 0xc040b340);
-        c = GG(c, d, a, b, x[11], 14, 0x265e5a51);
-        b = GG(b, c, d, a, x[ 0], 20, 0xe9b6c7aa);
-        a = GG(a, b, c, d, x[ 5],  5, 0xd62f105d);
-        d = GG(d, a, b, c, x[10],  9,  0x2441453);
-        c = GG(c, d, a, b, x[15], 14, 0xd8a1e681);
-        b = GG(b, c, d, a, x[ 4], 20, 0xe7d3fbc8);
-        a = GG(a, b, c, d, x[ 9],  5, 0x21e1cde6);
-        d = GG(d, a, b, c, x[14],  9, 0xc33707d6);
-        c = GG(c, d, a, b, x[ 3], 14, 0xf4d50d87);
-        b = GG(b, c, d, a, x[ 8], 20, 0x455a14ed);
-        a = GG(a, b, c, d, x[13],  5, 0xa9e3e905);
-        d = GG(d, a, b, c, x[ 2],  9, 0xfcefa3f8);
-        c = GG(c, d, a, b, x[ 7], 14, 0x676f02d9);
-        b = GG(b, c, d, a, x[12], 20, 0x8d2a4c8a);
-
-        a = HH(a, b, c, d, x[ 5],  4, 0xfffa3942);
-        d = HH(d, a, b, c, x[ 8], 11, 0x8771f681);
-        c = HH(c, d, a, b, x[11], 16, 0x6d9d6122);
-        b = HH(b, c, d, a, x[14], 23, 0xfde5380c);
-        a = HH(a, b, c, d, x[ 1],  4, 0xa4beea44);
-        d = HH(d, a, b, c, x[ 4], 11, 0x4bdecfa9);
-        c = HH(c, d, a, b, x[ 7], 16, 0xf6bb4b60);
-        b = HH(b, c, d, a, x[10], 23, 0xbebfbc70);
-        a = HH(a, b, c, d, x[13],  4, 0x289b7ec6);
-        d = HH(d, a, b, c, x[ 0], 11, 0xeaa127fa);
-        c = HH(c, d, a, b, x[ 3], 16, 0xd4ef3085);
-        b = HH(b, c, d, a, x[ 6], 23,  0x4881d05);
-        a = HH(a, b, c, d, x[ 9],  4, 0xd9d4d039);
-        d = HH(d, a, b, c, x[12], 11, 0xe6db99e5);
-        c = HH(c, d, a, b, x[15], 16, 0x1fa27cf8);
-        b = HH(b, c, d, a, x[ 2], 23, 0xc4ac5665);
-
-        a = II(a, b, c, d, x[ 0],  6, 0xf4292244);
-        d = II(d, a, b, c, x[ 7], 10, 0x432aff97);
-        c = II(c, d, a, b, x[14], 15, 0xab9423a7);
-        b = II(b, c, d, a, x[ 5], 21, 0xfc93a039);
-        a = II(a, b, c, d, x[12],  6, 0x655b59c3);
-        d = II(d, a, b, c, x[ 3], 10, 0x8f0ccc92);
-        c = II(c, d, a, b, x[10], 15, 0xffeff47d);
-        b = II(b, c, d, a, x[ 1], 21, 0x85845dd1);
-        a = II(a, b, c, d, x[ 8],  6, 0x6fa87e4f);
-        d = II(d, a, b, c, x[15], 10, 0xfe2ce6e0);
-        c = II(c, d, a, b, x[ 6], 15, 0xa3014314);
-        b = II(b, c, d, a, x[13], 21, 0x4e0811a1);
-        a = II(a, b, c, d, x[ 4],  6, 0xf7537e82);
-        d = II(d, a, b, c, x[11], 10, 0xbd3af235);
-        c = II(c, d, a, b, x[ 2], 15, 0x2ad7d2bb);
-        b = II(b, c, d, a, x[ 9], 21, 0xeb86d391);
-
-        state[0] += a;
-        state[1] += b;
-        state[2] += c;
-        state[3] += d;
-    }
-}
diff --git a/src/java/org/apache/java/security/MessageDigest.java b/src/java/org/apache/java/security/MessageDigest.java
deleted file mode 100644
index 9dc9d07..0000000
--- a/src/java/org/apache/java/security/MessageDigest.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package org.apache.java.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface abstracts a message digest algorithm.
- *
- * <p><b>Note:</b> even if standard Java 1.1 APIs already provide a
- * message digest implementation, this class is used on those Java
- * runtime environments (like Kaffe) where the package
- * <code>java.security</code> is highly improbable to be found.
- *
- * @author <a href="mailto:mazzocchi@mbox.systemy.it">Stefano Mazzocchi</a>
- * @version $Id$
- * @deprecated Use the java.security package.
- */
-public abstract class MessageDigest
-{
-    /**
-     * Creates the algorithm and reset its state.
-     */
-    public MessageDigest()
-    {
-        this.reset();
-    }
-
-    /**
-     * Append another block to the message.
-     *
-     * @param block A byte[].
-     */
-    public void append(byte[] block)
-    {
-        this.append(block, 0, block.length);
-    }
-
-    /**
-     * Append another block of specified length to the message.
-     *
-     * @param block A byte[].
-     * @param length An int.
-     */
-    public void append(byte[] block,
-                       int length)
-    {
-        this.append(block, 0, length);
-    }
-
-    /**
-     * Append another block of specified length to the message
-     * starting at the given offset.
-     *
-     * @param block A byte[].
-     * @param offset An int.
-     * @param length An int.
-     */
-    public abstract void append(byte[] block,
-                                int offset,
-                                int length);
-
-    /**
-     * Appends a message block and return its message digest.
-     *
-     * @param block A byte[].
-     * @return A byte[].
-     */
-    public byte[] digest(byte[] block)
-    {
-        return this.digest(block, 0, block.length);
-    }
-
-    /**
-     * Appends a message block with specified length and return its
-     * message digest.
-     *
-     * @param block A byte[].
-     * @param length An int.
-     * @return A byte[].
-     */
-    public byte[] digest(byte[] block,
-                         int length)
-    {
-        return this.digest(block, 0, length);
-    }
-
-    /**
-     * Appends a message block with specified length starting from the
-     * given offset and return its message digest.
-     *
-     * @param block A byte[].
-     * @param offset An int.
-     * @param length An int.
-     * @return A byte[].
-     */
-    public abstract byte[] digest(byte[] block,
-                                  int offset,
-                                  int length);
-
-    /**
-     * Resets the state of the class.  <b>Beware</b>: calling this
-     * method erases all data previously inserted.
-     */
-    public abstract void reset();
-}
diff --git a/src/java/org/apache/turbine/Turbine.java b/src/java/org/apache/turbine/Turbine.java
deleted file mode 100644
index 76b1bdd..0000000
--- a/src/java/org/apache/turbine/Turbine.java
+++ /dev/null
@@ -1,925 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.Properties;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationFactory;
-import org.apache.commons.configuration.PropertiesConfiguration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.exception.ExceptionUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.turbine.modules.PageLoader;
-import org.apache.turbine.pipeline.Pipeline;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.pipeline.TurbinePipeline;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.services.component.ComponentService;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.uri.URIConstants;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-
-/**
- * Turbine is the main servlet for the entire system. It is <code>final</code>
- * because you should <i>not</i> ever need to subclass this servlet.  If you
- * need to perform initialization of a service, then you should implement the
- * Services API and let your code be initialized by it.
- * If you need to override something in the <code>doGet()</code> or
- * <code>doPost()</code> methods, edit the TurbineResources.properties file and
- * specify your own classes there.
- * <p>
- * Turbine servlet recognizes the following initialization parameters.
- * <ul>
- * <li><code>properties</code> the path to TurbineResources.properties file
- * used by the default implementation of <code>ResourceService</code>, relative
- * to the application root.</li>
- * <li><code>basedir</code> this parameter is used <strong>only</strong> if your
- * application server does not support web applications, or the or does not
- * support <code>ServletContext.getRealPath(String)</code> method correctly.
- * You can use this parameter to specify the directory within the server's
- * filesystem, that is the base of your web application.</li>
- * </ul>
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class Turbine
-        extends HttpServlet
-        implements TurbineConstants
-{
-    /**
-     * Name of path info parameter used to indicate the redirected stage of
-     * a given user's initial Turbine request
-     */
-    public static final String REDIRECTED_PATHINFO_NAME = "redirected";
-
-    /** The base directory key */
-    public static final String BASEDIR_KEY = "basedir";
-
-    /**
-     * In certain situations the init() method is called more than once,
-     * somtimes even concurrently. This causes bad things to happen,
-     * so we use this flag to prevent it.
-     */
-    private static boolean firstInit = true;
-    
-	/**
-	 * The pipeline to use when processing requests.
-	 */
-	private static Pipeline pipeline = null;
-
-    /** Whether init succeeded or not. */
-    private static Throwable initFailure = null;
-
-    /**
-     * Should initialization activities be performed during doGet() execution?
-     */
-    private static boolean firstDoGet = true;
-
-    /**
-     * Keep all the properties of the web server in a convenient data
-     * structure
-     */
-    private static ServerData serverData = null;
-
-    /** The base from which the Turbine application will operate. */
-    private static String applicationRoot;
-
-    /** Servlet config for this Turbine webapp. */
-    private static ServletConfig servletConfig;
-
-    /** Servlet context for this Turbine webapp. */
-    private static ServletContext servletContext;
-
-    /**
-     * The webapp root where the Turbine application
-     * is running in the servlet container.
-     * This might differ from the application root.
-     */
-    private static String webappRoot;
-
-    /** Our internal configuration object */
-    private static Configuration configuration = null;
-
-    /** Logging class from commons.logging */
-    private static Log log = LogFactory.getLog(Turbine.class);
-
-    /**
-     * This init method will load the default resources from a
-     * properties file.
-     *
-     * This method is called by init(ServletConfig config)
-     *
-     * @exception ServletException a servlet exception.
-     */
-    public final void init() throws ServletException
-    {
-        synchronized (this.getClass())
-        {
-            super.init();
-            ServletConfig config = getServletConfig();
-
-            if (!firstInit)
-            {
-                log.info("Double initialization of Turbine was attempted!");
-                return;
-            }
-            // executing init will trigger some static initializers, so we have
-            // only one chance.
-            firstInit = false;
-
-            try
-            {
-                ServletContext context = config.getServletContext();
-
-                configure(config, context);
-
-                TemplateService templateService = TurbineTemplate.getService();
-                if (templateService == null)
-                {
-                    throw new TurbineException(
-                            "No Template Service configured!");
-                }
-                if (getRunDataService() == null)
-                {
-                    throw new TurbineException(
-                            "No RunData Service configured!");
-                }
-
-            }
-            catch (Exception e)
-            {
-                // save the exception to complain loudly later :-)
-                initFailure = e;
-                log.fatal("Turbine: init() failed: ", e);
-                throw new ServletException("Turbine: init() failed", e);
-            }
-            log.info("Turbine: init() Ready to Rumble!");
-        }
-    }
-
-    /**
-     * Read the master configuration file in, configure logging
-     * and start up any early services.
-     *
-     * @param config The Servlet Configuration supplied by the container
-     * @param context The Servlet Context supplied by the container
-     *
-     * @throws Exception A problem occured while reading the configuration or performing early startup
-     */
-
-    private void configure(ServletConfig config, ServletContext context)
-            throws Exception
-    {
-
-        // Set the application root. This defaults to the webapp
-        // context if not otherwise set. This is to allow 2.1 apps
-        // to be developed from CVS. This feature will carry over
-        // into 3.0.
-        applicationRoot = findInitParameter(context, config,
-                APPLICATION_ROOT_KEY,
-                APPLICATION_ROOT_DEFAULT);
-
-        webappRoot = config.getServletContext().getRealPath("/");
-        // log.info("Web Application root is " + webappRoot);
-        // log.info("Application root is "     + applicationRoot);
-
-        if (applicationRoot == null || applicationRoot.equals(WEB_CONTEXT))
-        {
-            applicationRoot = webappRoot;
-            // log.info("got empty or 'webContext' Application root. Application root now: " + applicationRoot);
-        }
-
-        // Set the applicationRoot for this webapp.
-        setApplicationRoot(applicationRoot);
-
-        // Create any directories that need to be setup for
-        // a running Turbine application.
-        createRuntimeDirectories(context, config);
-
-        //
-        // Now we run the Turbine configuration code. There are two ways
-        // to configure Turbine:
-        //
-        // a) By supplying an web.xml init parameter called "configuration"
-        //
-        // <init-param>
-        //   <param-name>configuration</param-name>
-        //   <param-value>/WEB-INF/conf/turbine.xml</param-value>
-        // </init-param>
-        //
-        // This loads an XML based configuration file.
-        //
-        // b) By supplying an web.xml init parameter called "properties"
-        //
-        // <init-param>
-        //   <param-name>properties</param-name>
-        //   <param-value>/WEB-INF/conf/TurbineResources.properties</param-value>
-        // </init-param>
-        //
-        // This loads a Properties based configuration file. Actually, these are
-        // extended properties as provided by commons-configuration
-        //
-        // If neither a) nor b) is supplied, Turbine will fall back to the
-        // known behaviour of loading a properties file called
-        // /WEB-INF/conf/TurbineResources.properties relative to the
-        // web application root.
-
-        String confFile= findInitParameter(context, config, 
-                TurbineConfig.CONFIGURATION_PATH_KEY, 
-                null);
-
-        String confPath;
-        String confStyle = "unset";
-
-        if (StringUtils.isNotEmpty(confFile))
-        {
-            confPath = getRealPath(confFile);
-            ConfigurationFactory configurationFactory = new ConfigurationFactory(confPath);
-            configurationFactory.setBasePath(getApplicationRoot());
-            configuration = configurationFactory.getConfiguration();
-            confStyle = "XML";
-        }
-        else
-        {
-            confFile = findInitParameter(context, config,
-                    TurbineConfig.PROPERTIES_PATH_KEY,
-                    TurbineConfig.PROPERTIES_PATH_DEFAULT);
-
-            confPath = getRealPath(confFile);
-
-            // This should eventually be a Configuration
-            // interface so that service and app configuration
-            // can be stored anywhere.
-            configuration = (Configuration) new PropertiesConfiguration(confPath);
-            confStyle = "Properties";
-        }
-
-
-        //
-        // Set up logging as soon as possible
-        //
-        String log4jFile = configuration.getString(LOG4J_CONFIG_FILE,
-                                                   LOG4J_CONFIG_FILE_DEFAULT);
-
-        log4jFile = getRealPath(log4jFile);
-
-        //
-        // Load the config file above into a Properties object and
-        // fix up the Application root
-        //
-        Properties p = new Properties();
-        try
-        {
-            p.load(new FileInputStream(log4jFile));
-            p.setProperty(APPLICATION_ROOT_KEY, getApplicationRoot());
-            PropertyConfigurator.configure(p);
-
-            //
-            // Rebuild our log object with a configured commons-logging
-            log = LogFactory.getLog(this.getClass());
-
-            log.info("Configured log4j from " + log4jFile);
-        }
-        catch (FileNotFoundException fnf)
-        {
-            System.err.println("Could not open Log4J configuration file "
-                               + log4jFile + ": ");
-            fnf.printStackTrace();
-        }
-
-        // Now report our successful configuration to the world
-        log.info("Loaded configuration  (" + confStyle + ") from " + confFile + " (" + confPath + ")");
-
-        
-        setTurbineServletConfig(config);
-        setTurbineServletContext(context);
-
-        getServiceManager().setApplicationRoot(applicationRoot);
-
-        // We want to set a few values in the configuration so
-        // that ${variable} interpolation will work for
-        //
-        // ${applicationRoot}
-        // ${webappRoot}
-        configuration.setProperty(APPLICATION_ROOT_KEY, applicationRoot);
-        configuration.setProperty(WEBAPP_ROOT_KEY, webappRoot);
-
-        
-
-		// Retrieve the pipeline class and then initialize it.  The pipeline
-        // handles the processing of a webrequest/response cycle.
-
-	    String descriptorPath =
-		  	configuration.getString(
-			  "pipeline.default.descriptor",
-					  TurbinePipeline.CLASSIC_PIPELINE);
-  		
-        descriptorPath = getRealPath(descriptorPath);
-  
-  		log.debug("Using descriptor path: " + descriptorPath);
-        Reader reader = new BufferedReader(new FileReader(descriptorPath));  
-        XStream pipelineMapper = new XStream(new DomDriver()); // does not require XPP3 library
-        pipeline = (Pipeline) pipelineMapper.fromXML(reader);
-            
-	  	log.debug("Initializing pipeline");
-	  
-	  	pipeline.initialize();
-
-        
-        //
-        // Be sure, that our essential services get run early
-        //
-        configuration.setProperty(TurbineServices.SERVICE_PREFIX +
-                                  ComponentService.SERVICE_NAME + ".earlyInit",
-                                  Boolean.TRUE);
-
-        configuration.setProperty(TurbineServices.SERVICE_PREFIX +
-                                  AvalonComponentService.SERVICE_NAME + ".earlyInit",
-                                  Boolean.TRUE);
-
-        getServiceManager().setConfiguration(configuration);
-
-        // Initialize the service manager. Services
-        // that have its 'earlyInit' property set to
-        // a value of 'true' will be started when
-        // the service manager is initialized.
-        getServiceManager().init();
-    }
-
-    /**
-     * Create any directories that might be needed during
-     * runtime. Right now this includes:
-     *
-     * <ul>
-     *
-     * <li>The directory to write the log files to (relative to the
-     * web application root), or <code>null</code> for the default of
-     * <code>/logs</code>.  The directory is specified via the {@link
-     * TurbineConstants#LOGGING_ROOT} parameter.</li>
-     *
-     * </ul>
-     *
-     * @param context Global initialization parameters.
-     * @param config Initialization parameters specific to the Turbine
-     * servlet.
-     */
-    private static void createRuntimeDirectories(ServletContext context,
-                                                 ServletConfig config)
-    {
-        String path = findInitParameter(context, config,
-                                        LOGGING_ROOT_KEY,
-                                        LOGGING_ROOT_DEFAULT);
-
-        File logDir = new File(getRealPath(path));
-        if (!logDir.exists())
-        {
-            // Create the logging directory
-            if (!logDir.mkdirs())
-            {
-                System.err.println("Cannot create directory for logs!");
-            }
-        }
-    }
-
-    /**
-     * Finds the specified servlet configuration/initialization
-     * parameter, looking first for a servlet-specific parameter, then
-     * for a global parameter, and using the provided default if not
-     * found.
-     */
-    protected static final String findInitParameter(ServletContext context,
-            ServletConfig config, String name, String defaultValue)
-    {
-        String path = null;
-
-        // Try the name as provided first.
-        boolean usingNamespace = name.startsWith(CONFIG_NAMESPACE);
-        while (true)
-        {
-            path = config.getInitParameter(name);
-            if (StringUtils.isEmpty(path))
-            {
-                path = context.getInitParameter(name);
-                if (StringUtils.isEmpty(path))
-                {
-                    // The named parameter didn't yield a value.
-                    if (usingNamespace)
-                    {
-                        path = defaultValue;
-                    }
-                    else
-                    {
-                        // Try again using Turbine's namespace.
-                        name = CONFIG_NAMESPACE + '.' + name;
-                        usingNamespace = true;
-                        continue;
-                    }
-                }
-            }
-            break;
-        }
-
-        return path;
-    }
-
-    /**
-     * Return the current configuration with all keys included
-     *
-     * @return a Configuration Object
-     */
-    public static Configuration getConfiguration()
-    {
-        return configuration;
-    }
-
-    /**
-     * Return the server name.
-     *
-     * @return String server name
-     */
-    public static String getServerName()
-    {
-        return getDefaultServerData().getServerName();
-    }
-
-    /**
-     * Return the server scheme.
-     *
-     * @return String server scheme
-     */
-    public static String getServerScheme()
-    {
-        return getDefaultServerData().getServerScheme();
-    }
-
-    /**
-     * Return the server port.
-     *
-     * @return String server port
-     */
-    public static String getServerPort()
-    {
-        return Integer.toString(getDefaultServerData().getServerPort());
-    }
-
-    /**
-     * Get the script name. This is the initial script name.
-     * Actually this is probably not needed any more. I'll
-     * check. jvz.
-     *
-     * @return String initial script name.
-     */
-    public static String getScriptName()
-    {
-        return getDefaultServerData().getScriptName();
-    }
-
-    /**
-     * Return the context path.
-     *
-     * @return String context path
-     */
-    public static String getContextPath()
-    {
-        return getDefaultServerData().getContextPath();
-    }
-
-    /**
-     * Return all the Turbine Servlet information (Server Name, Port,
-     * Scheme in a ServerData structure. This is generated from the
-     * values set when initializing the Turbine and may not be correct
-     * if you're running in a clustered structure. This might be used
-     * if you need a DataURI and have no RunData object handy-
-     *
-     * @return An initialized ServerData object
-     */
-    public static ServerData getDefaultServerData()
-    {
-        if(serverData == null)
-        {
-            log.error("ServerData Information requested from Turbine before first request!");
-            // Will be overwritten once the first request is run;
-            serverData = new ServerData(null, URIConstants.HTTP_PORT,
-                    URIConstants.HTTP, null, null);
-        }
-        return serverData;
-    }
-
-    /**
-     * Set the servlet config for this turbine webapp.
-     *
-     * @param config New servlet config
-     */
-    public static void setTurbineServletConfig(ServletConfig config)
-    {
-        servletConfig = config;
-    }
-
-    /**
-     * Get the servlet config for this turbine webapp.
-     *
-     * @return ServletConfig
-     */
-    public static ServletConfig getTurbineServletConfig()
-    {
-        return servletConfig;
-    }
-
-    /**
-     * Set the servlet context for this turbine webapp.
-     *
-     * @param context New servlet context.
-     */
-    public static void setTurbineServletContext(ServletContext context)
-    {
-        servletContext = context;
-    }
-
-    /**
-     * Get the servlet context for this turbine webapp.
-     *
-     * @return ServletContext
-     */
-    public static ServletContext getTurbineServletContext()
-    {
-        return servletContext;
-    }
-
-    /**
-     * The <code>Servlet</code> destroy method.  Invokes
-     * <code>ServiceBroker</code> tear down method.
-     */
-    public final void destroy()
-    {
-        // Shut down all Turbine Services.
-        getServiceManager().shutdownServices();
-        System.gc();
-
-        firstInit = true;
-        firstDoGet = true;
-        log.info("Turbine: Done shutting down!");
-    }
-
-    /**
-     * The primary method invoked when the Turbine servlet is executed.
-     *
-     * @param req Servlet request.
-     * @param res Servlet response.
-     * @exception IOException a servlet exception.
-     * @exception ServletException a servlet exception.
-     */
-    public final void doGet(HttpServletRequest req, HttpServletResponse res)
-            throws IOException, ServletException
-    {
-        // set to true if the request is to be redirected by the page
-        boolean requestRedirected = false;
-
-        // Placeholder for the RunData object.
-        //RunData data = null;
-        
-        PipelineData pipelineData = null;//new DefaultPipelineData();
-        try
-        {
-            // Check to make sure that we started up properly.
-            if (initFailure != null)
-            {
-                throw initFailure;
-            }
-            // If this is the first invocation, perform some
-            // initialization.  Certain services need RunData to initialize
-            // themselves.
-            if (firstDoGet)
-            {
-                synchronized (Turbine.class)
-                {
-                    // Store the context path for tools like ContentURI and
-                    // the UIManager that use webapp context path information
-                    // for constructing URLs.
-                    serverData = new ServerData(req);            
-
-                    // Mark that we're done.
-                    firstDoGet = false;
-                    log.info("Turbine: first Request successful");
-                }
-
-            }            
-
-            // Get general RunData here...
-            // Perform turbine specific initialization below.
-            pipelineData = getRunDataService().getRunData(req, res, getServletConfig());
-           // Map runDataMap = new HashMap();
-            //runDataMap.put(RunData.class, data);
-            // put the data into the pipeline
-           // pipelineData.put(RunData.class, runDataMap);            
-
-            // Stages of Pipeline implementation execution
-			// configurable via attached Valve implementations in a
-			// XML properties file.
-			pipeline.invoke(pipelineData);
-  
-        }
-        catch (Exception e)
-        {
-            handleException(pipelineData, res, e);
-        }
-        catch (Throwable t)
-        {
-            handleException(pipelineData, res, t);
-        }
-        finally
-        {
-            // Return the used RunData to the factory for recycling.
-            getRunDataService().putRunData((RunData)pipelineData);
-        }
-    }
-
-    /**
-     * In this application doGet and doPost are the same thing.
-     *
-     * @param req Servlet request.
-     * @param res Servlet response.
-     * @exception IOException a servlet exception.
-     * @exception ServletException a servlet exception.
-     */
-    public final void doPost(HttpServletRequest req, HttpServletResponse res)
-            throws IOException, ServletException
-    {
-        doGet(req, res);
-    }
-
-    /**
-     * Return the servlet info.
-     *
-     * @return a string with the servlet information.
-     */
-    public final String getServletInfo()
-    {
-        return "Turbine Servlet";
-    }
-
-    /**
-     * This method is about making sure that we catch and display
-     * errors to the screen in one fashion or another. What happens is
-     * that it will attempt to show the error using your user defined
-     * Error Screen. If that fails, then it will resort to just
-     * displaying the error and logging it all over the place
-     * including the servlet engine log file, the Turbine log file and
-     * on the screen.
-     *
-     * @param data A Turbine PipelineData object.
-     * @param res Servlet response.
-     * @param t The exception to report.
-     */
-    private final void handleException(PipelineData pipelineData, HttpServletResponse res,
-                                       Throwable t)
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        // make sure that the stack trace makes it the log
-        log.error("Turbine.handleException: ", t);
-
-        String mimeType = "text/plain";
-        try
-        {
-            // This is where we capture all exceptions and show the
-            // Error Screen.
-            data.setStackTrace(ExceptionUtils.getStackTrace(t), t);
-
-            // setup the screen
-            data.setScreen(configuration.getString(SCREEN_ERROR_KEY,
-                    SCREEN_ERROR_DEFAULT));
-
-            // do more screen setup for template execution if needed
-            if (data.getTemplateInfo() != null)
-            {
-                data.getTemplateInfo()
-                    .setScreenTemplate(configuration.getString(
-                            TEMPLATE_ERROR_KEY, TEMPLATE_ERROR_VM));
-            }
-
-            // Make sure to not execute an action.
-            data.setAction("");
-
-            PageLoader.getInstance().exec(pipelineData,
-                    configuration.getString(PAGE_DEFAULT_KEY,
-                            PAGE_DEFAULT_DEFAULT));
-
-            data.getResponse().setContentType(data.getContentType());
-            data.getResponse().setStatus(data.getStatusCode());
-        }
-        // Catch this one because it occurs if some code hasn't been
-        // completely re-compiled after a change..
-        catch (java.lang.NoSuchFieldError e)
-        {
-            try
-            {
-                data.getResponse().setContentType(mimeType);
-                data.getResponse().setStatus(200);
-            }
-            catch (Exception ignored)
-            {
-            }
-
-            try
-            {
-				data.getResponse().getWriter().print("java.lang.NoSuchFieldError: "
-                        + "Please recompile all of your source code.");
-            }
-            catch (IOException ignored)
-            {
-            }
-
-            log.error(data.getStackTrace(), e);
-        }
-        // Attempt to do *something* at this point...
-        catch (Throwable reallyScrewedNow)
-        {
-            StringBuffer msg = new StringBuffer();
-            msg.append("Horrible Exception: ");
-            if (data != null)
-            {
-                msg.append(data.getStackTrace());
-            }
-            else
-            {
-                msg.append(t);
-            }
-            try
-            {
-                res.setContentType(mimeType);
-                res.setStatus(200);
-                res.getWriter().print(msg.toString());
-            }
-            catch (Exception ignored)
-            {
-            }
-
-            log.error(reallyScrewedNow.getMessage(), reallyScrewedNow);
-        }
-    }
-
-    /**
-     * Set the application root for the webapp.
-     *
-     * @param val New app root.
-     */
-    public static void setApplicationRoot(String val)
-    {
-        applicationRoot = val;
-    }
-
-    /**
-     * Get the application root for this Turbine webapp. This
-     * concept was started in 3.0 and will allow an app to be
-     * developed from a standard CVS layout. With a simple
-     * switch the app will work fully within the servlet
-     * container for deployment.
-     *
-     * @return String applicationRoot
-     */
-    public static String getApplicationRoot()
-    {
-        return applicationRoot;
-    }
-
-    /**
-     * Used to get the real path of configuration and resource
-     * information. This can be used by an app being
-     * developed in a standard CVS layout.
-     *
-     * @param path path translated to the application root
-     * @return the real path
-     */
-    public static String getRealPath(String path)
-    {
-        if (path.startsWith("/"))
-        {
-            path = path.substring(1);
-        }
-
-        return new File(getApplicationRoot(), path).getAbsolutePath();
-    }
-
-    /**
-     * Return an instance of the currently configured Service Manager
-     *
-     * @return A service Manager instance
-     */
-    private ServiceManager getServiceManager()
-    {
-        return TurbineServices.getInstance();
-    }
-    
-    /**
-     * Get a RunData from the pipelineData. Once RunData is fully replaced
-     * by PipelineData this should not be required. 
-     * @param pipelineData
-     * @return
-     */
-    private RunData getRunData(PipelineData pipelineData)
-    {
-        RunData data = null;
-        data = (RunData)pipelineData;
-        return data;
-    }
-    
-    /**
-     * Static Helper method for looking up the RunDataService
-     * @return A RunDataService
-     */
-    private static RunDataService getRunDataService(){
-        return (RunDataService) TurbineServices
-        .getInstance().getService(RunDataService.SERVICE_NAME);
-    }    
-}
diff --git a/src/java/org/apache/turbine/TurbineConstants.java b/src/java/org/apache/turbine/TurbineConstants.java
deleted file mode 100644
index 32367a3..0000000
--- a/src/java/org/apache/turbine/TurbineConstants.java
+++ /dev/null
@@ -1,375 +0,0 @@
-package org.apache.turbine;
-
-import org.apache.turbine.pipeline.TurbinePipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface contains all the constants used throughout
- * the Turbine code base.
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public interface TurbineConstants
-{
-	/**
-	 * <p>The prefix used to denote the namespace reserved for and
-	 * used by Turbine-specific configuration parameters (such as
-	 * those passed in via servlet container's config file
-	 * (<code>server.xml</code>), or the web app deployment descriptor
-	 * (<code>web.xml</code>).</p>
-	 *
-	 * <p>For example, a parameter in the Turbine namespace would be
-	 * <code>org.apache.turbine.loggingRoot</code>.</p>
-	 */
-	String CONFIG_NAMESPACE = "org.apache.turbine";
-
-	/** The key for the Log4J File */
-	String LOG4J_CONFIG_FILE = "log4j.file";
-
-	/** The default value for the Log4J File */
-	String LOG4J_CONFIG_FILE_DEFAULT = "/WEB-INF/conf/Log4j.properties";
-
-	/** This is the default log file to be used for logging */
-	String DEFAULT_LOGGER = "turbine";
-
-	/** The logging facility which captures output from the SchedulerService. */
-	String SCHEDULER_LOG_FACILITY = "scheduler";
-
-	/** The SMTP server Turbine uses to send mail. */
-	String MAIL_SERVER_KEY = "mail.server";
-
-	/** Default Value for he SMTP server that Turbine uses to send mail. */
-	String MAIL_SERVER_DEFAULT = "localhost";
-
-	/** The Smtp sender address property */
-	String MAIL_SMTP_FROM = "mail.smtp.from";
-
-	/** Property that controls whether Turbine modules are cached or not. */
-	String MODULE_CACHE_KEY = "module.cache";
-
-	/** Default value of the Turbine Module Caching */
-	boolean MODULE_CACHE_DEFAULT = true;
-
-	/** Property for the size of the action cache if caching is on */
-	String ACTION_CACHE_SIZE_KEY = "action.cache.size";
-
-	/** The default size for the action cache */
-	int ACTION_CACHE_SIZE_DEFAULT = 20;
-
-	/** Property for the size of the layout cache if caching is on */
-	String LAYOUT_CACHE_SIZE_KEY = "layout.cache.size";
-
-	/** The default size for the layout cache */
-	int LAYOUT_CACHE_SIZE_DEFAULT = 10;
-
-	/** Property for the size of the navigation cache if caching is on */
-	String NAVIGATION_CACHE_SIZE_KEY = "navigation.cache.size";
-
-	/** The default size for the navigation cache */
-	int NAVIGATION_CACHE_SIZE_DEFAULT = 10;
-
-	/** Property for the size of the page cache if caching is on */
-	String PAGE_CACHE_SIZE_KEY = "page.cache.size";
-
-	/** The default size for the page cache */
-	int PAGE_CACHE_SIZE_DEFAULT = 5;
-
-	/** Property for the size of the screen cache if caching is on */
-	String SCREEN_CACHE_SIZE_KEY = "screen.cache.size";
-
-	/** The default size for the screen cache */
-	int SCREEN_CACHE_SIZE_DEFAULT = 50;
-
-	/** The key for the schedulder job cache size if module caching is on. */
-	String SCHEDULED_JOB_CACHE_SIZE_KEY = "scheduledjob.cache.size";
-
-	/** The default size of the schedulder job cache if module caching is on. */
-	int SCHEDULED_JOB_CACHE_SIZE_DEFAULT = 10;
-
-	/** The packages where Turbine will look for modules. */
-	String MODULE_PACKAGES = "module.packages";
-
-	/** Home page template. */
-	String TEMPLATE_HOMEPAGE = "template.homepage";
-
-	/** Login template. */
-	String TEMPLATE_LOGIN = "template.login";
-
-	/** Template error template Property. */
-	String TEMPLATE_ERROR_KEY = "template.error";
-
-	/** Template error default for JSP */
-	String TEMPLATE_ERROR_JSP = "error.jsp";
-
-	/** Template error default for Velocity */
-	String TEMPLATE_ERROR_VM = "error.vm";
-
-	/** Home page screen. */
-	String SCREEN_HOMEPAGE = "screen.homepage";
-
-	/** Login screen. */
-	String SCREEN_LOGIN = "screen.login";
-
-	/** Login error screen. */
-	String SCREEN_ERROR_KEY = "screen.error";
-
-	/** Default value for Login Screen */
-	String SCREEN_ERROR_DEFAULT = "VelocityErrorScreen";
-
-	/** Report Screen for invalid state in the application*/
-	String SCREEN_INVALID_STATE = "screen.invalidstate";
-
-	/** Report Template for invalid state in the application */
-	String TEMPLATE_INVALID_STATE = "template.invalidstate";
-
-	/** Action to perform when a user logs in. */
-	String ACTION_LOGIN_KEY = "action.login";
-
-	/** Default Value for login Action */
-	String ACTION_LOGIN_DEFAULT = "LoginUser";
-
-	/** Action to perform when a user logs out. */
-	String ACTION_LOGOUT_KEY = "action.logout";
-
-	/** Default Value for ACTION_LOGOUT */
-	String ACTION_LOGOUT_DEFAULT = "LogoutUser";
-
-	/** Actions that performs session validation. */
-	String ACTION_SESSION_VALIDATOR_KEY = "action.sessionvalidator";
-
-	/** Default value for the session validator. (org.apache.modules.actions.sessionvalidator.TemplateSessionValidator) */
-	String ACTION_SESSION_VALIDATOR_DEFAULT = "sessionvalidator.TemplateSessionValidator";
-
-	/** Action that performs Access control */
-	String ACTION_ACCESS_CONTROLLER_KEY = "action.accesscontroller";
-
-	/** Default value for the access controller. (org.apache.modules.actions.AccessController) */
-	String ACTION_ACCESS_CONTROLLER_DEFAULT = "AccessController";
-
-	/** Select whether an Action Event must have a non-zero value */
-	String ACTION_EVENTSUBMIT_NEEDSVALUE_KEY = "action.eventsubmit.needsvalue";
-
-	/** Default value for action.eventsubmit.needsvalue */
-	boolean ACTION_EVENTSUBMIT_NEEDSVALUE_DEFAULT = false;
-
-	/** Select whether an exception in an Action method is bubbled up to Turbine.handleException() */
-	String ACTION_EVENT_BUBBLE_EXCEPTION_UP = "action.event.bubbleexception";
-
-	/** Default value for action.event.bubbleexception */
-	boolean ACTION_EVENT_BUBBLE_EXCEPTION_UP_DEFAULT = true;
-
-	/** Default layout. */
-	String LAYOUT_DEFAULT = "layout.default";
-
-	/** Default page. */
-	String PAGE_DEFAULT_KEY = "page.default";
-
-	/** Default value for the Default Page */
-	String PAGE_DEFAULT_DEFAULT = "DefaultPage";
-
-	/** Default value for the Default Screen */
-	String SCREEN_DEFAULT_DEFAULT = "DefaultScreen";
-
-	/** Message to display upon successful login. */
-	String LOGIN_MESSAGE = "login.message";
-
-	/** Message to display when a user fails to login. */
-	String LOGIN_ERROR = "login.error";
-
-	/** Message to display when screens variable invalid. */
-	String LOGIN_MESSAGE_NOSCREEN = "login.message.noscreen";
-
-	/** Message to display when a user logs out. */
-	String LOGOUT_MESSAGE = "logout.message";
-
-	/** Session Timeout */
-	String SESSION_TIMEOUT_KEY = "session.timeout";
-
-	/** Session Timeout Default Value */
-	int SESSION_TIMEOUT_DEFAULT = -1;
-
-	/** Indicate whether this Turbine application is using SSL. */
-	String USE_SSL_KEY = "use.ssl";
-
-	/** Default value for the SSL key */
-	boolean USE_SSL_DEFAULT = true;
-
-	/**
-	 * Should the PP fold the case of everything. Possible values are
-	 * "upper", "lower" and "none".
-	 */
-	String PP_URL_CASE_FOLDING = "url.case.folding";
-
-	/** Default document type. */
-	String DEFAULT_DOCUMENT_TYPE_KEY = "default.doctype";
-
-	/** Html 4.0 Transitional */
-	String DOCUMENT_TYPE_HTML40TRANSITIONAL = "Html40Transitional";
-	/** Html 4.0 Strict */
-	String DOCUMENT_TYPE_HTML40STRICT = "Html40Strict";
-	/** Html 4.0 Frameset */
-	String DOCUMENT_TYPE_HTML40FRAMESET = "Html40Frameset";
-
-	/** Default doctype root element. */
-	String DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_KEY 
-			= "default.html.doctype.root.element";
-
-	/** Default value for the doctype root element */
-	String DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_DEFAULT
-			= "HTML";
-
-	/** Default doctype dtd. */
-	String DEFAULT_HTML_DOCTYPE_IDENTIFIER_KEY 
-			= "default.html.doctype.identifier";
-
-	/** Default Doctype dtd value */
-	String DEFAULT_HTML_DOCTYPE_IDENTIFIER_DEFAULT
-			= "-//W3C//DTD HTML 4.01 Transitional//EN";
-
-	/** Default doctype url. */
-	String DEFAULT_HTML_DOCTYPE_URI_KEY 
-			= "default.html.doctype.url";
-
-	/** Default doctype url value. */
-	String DEFAULT_HTML_DOCTYPE_URI_DEFAULT
-			= "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd";
-
-	/** Default Language property */
-	String LOCALE_DEFAULT_LANGUAGE_KEY = "locale.default.language";
-
-	/** Default value for Language property */
-	String LOCALE_DEFAULT_LANGUAGE_DEFAULT = "en";
-
-	/** Default Country property */
-	String LOCALE_DEFAULT_COUNTRY_KEY = "locale.default.country";
-
-	/** Default value for Country property */
-	String LOCALE_DEFAULT_COUNTRY_DEFAULT = "US";
-
-	/** Default Charset property */
-	String LOCALE_DEFAULT_CHARSET_KEY = "locale.default.charset";
-
-	/** Default value for Charset property */
-	String LOCALE_DEFAULT_CHARSET_DEFAULT = "ISO-8859-1";
-
-	/** If this value is set as applicationRoot, then the webContext is used
-	 * as application root
-	 */
-	String WEB_CONTEXT = "webContext";
-
-	/** Key for the Path to the TurbineResources.properties File */
-	String APPLICATION_ROOT_KEY = "applicationRoot";
-
-	/** Default Value for the Path to the TurbineResources.properties File */
-	String APPLICATION_ROOT_DEFAULT = WEB_CONTEXT;
-
-	/** This is the key used in the Turbine.properties to access resources
-	 * relative to the Web Application root. It might differ from the
-	 * Application root, but the normal case is, that the webapp root
-	 * and the application root point to the same path.
-	 */
-	String WEBAPP_ROOT_KEY = "webappRoot";
-
-	/** The Key in the deployment descriptor for the Logging Directory */
-	String LOGGING_ROOT_KEY = "loggingRoot";
-
-	/** Default Value for the Logging Directory, relative to the webroot */
-	String LOGGING_ROOT_DEFAULT = "/logs";
-
-	/** Key for loading the UUID Generator with a constant value */
-	String UUID_ADDRESS_KEY = "uuid.address";
-
-	/** Context Key for the screen placeholder in the various velocity layouts */
-	String SCREEN_PLACEHOLDER = "screen_placeholder";
-
-	/** Context Key for the navigation object placeholder in the various velocity layouts */
-	String NAVIGATION_PLACEHOLDER = "navigation";
-
-	/** Context Key for the Processing Exception */
-	String PROCESSING_EXCEPTION_PLACEHOLDER = "processingException";
-
-	/** Context Key for the Stack Trace */
-	String STACK_TRACE_PLACEHOLDER = "stackTrace";
-
-	/** Prefix for layout related classes and templates */
-	String LAYOUT_PREFIX = "layouts";
-
-	/** Prefix for screen related classes and templates */
-	String SCREEN_PREFIX = "screens";
-
-	/** Prefix for navigation related classes and templates */
-	String NAVIGATION_PREFIX = "navigations";
-
-	/** Prefix for action related classes and templates */
-	String ACTION_PREFIX = "actions";
-
-	/** Prefix for page related classes and templates */
-	String PAGE_PREFIX = "pages";
-
-	/** Prefix for scheduler job related classes */
-	String SCHEDULEDJOB_PREFIX = "scheduledjobs";
-	
-	/**
-	 * The fully qualified class name of the default {@link
-	 * org.apache.turbine.Pipeline} implementation to use in the
-	 * {@link org.apache.turbine.Turbine} servlet.
-	 */
-	public static final String STANDARD_PIPELINE =
-		TurbinePipeline.class.getName();	
-}
diff --git a/src/java/org/apache/turbine/modules/Action.java b/src/java/org/apache/turbine/modules/Action.java
deleted file mode 100644
index 1f0cd01..0000000
--- a/src/java/org/apache/turbine/modules/Action.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * Generic Action class.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Action extends Assembler
-{
-    /**
-     * A subclass must override this method to perform itself.  The
-     * Action can also set the screen that is associated with RunData.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public abstract void doPerform(RunData data) throws Exception;
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use ActionLoader to perform an Action.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void perform(RunData data) throws Exception
-    {
-        doPerform(data);
-    }
-    
-    /**
-     * A subclass must override this method to perform itself.  The
-     * Action can also set the screen that is associated with RunData.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public void doPerform(PipelineData pipelineData) throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        doPerform(data);
-    }
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use ActionLoader to perform an Action.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void perform(PipelineData pipelineData) throws Exception
-    {
-        doPerform(pipelineData);
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/ActionEvent.java b/src/java/org/apache/turbine/modules/ActionEvent.java
deleted file mode 100644
index 409ac50..0000000
--- a/src/java/org/apache/turbine/modules/ActionEvent.java
+++ /dev/null
@@ -1,456 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.parser.ParserUtils;
-
-/**
- * <p>
- *
- * This is an alternative to the Action class that allows you to do
- * event based actions. Essentially, you label all your submit buttons
- * with the prefix of "eventSubmit_" and the suffix of "methodName".
- * For example, "eventSubmit_doDelete". Then any class that subclasses
- * this class will get its "doDelete(RunData data)" method executed.
- * If for any reason, it was not able to execute the method, it will
- * fall back to executing the doPeform() method which is required to
- * be implemented.
- *
- * <p>
- *
- * Limitations:
- *
- * <p>
- *
- * Because ParameterParser makes all the key values lowercase, we have
- * to do some work to format the string into a method name. For
- * example, a button name eventSubmit_doDelete gets converted into
- * eventsubmit_dodelete. Thus, we need to form some sort of naming
- * convention so that dodelete can be turned into doDelete.
- *
- * <p>
- *
- * Thus, the convention is this:
- *
- * <ul>
- * <li>The variable name MUST have the prefix "eventSubmit_".</li>
- * <li>The variable name after the prefix MUST begin with the letters
- * "do".</li>
- * <li>The first letter after the "do" will be capitalized and the
- * rest will be lowercase</li>
- * </ul>
- *
- * If you follow these conventions, then you should be ok with your
- * method naming in your Action class.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens </a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class ActionEvent extends Action
-{
-	/** Logging */
-	protected Log log = LogFactory.getLog(this.getClass());
-
-	/** Constant needed for Reflection */
-	private static final Class [] methodParams
-			= new Class [] { RunData.class };
-
-	/**
-	 * You need to implement this in your classes that extend this class.
-	 * @deprecated use PipelineData version instead.
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	public abstract void doPerform(RunData data)
-			throws Exception;
-	
-	/**
-	 * You need to implement this in your classes that extend this class.
-	 * This should revert to being abstract when RunData has gone. 
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	public void doPerform(PipelineData pipelineData)
-			throws Exception
-	{
-	      RunData data = (RunData) getRunData(pipelineData);
-	      doPerform(data);	    
-	}
-	
-
-	/** The name of the button to look for. */
-	protected static final String BUTTON = "eventSubmit_";
-	/** The length of the button to look for. */
-	protected static final int BUTTON_LENGTH = BUTTON.length();
-	/** The prefix of the method name. */
-	protected static final String METHOD_NAME_PREFIX = "do";
-	/** The length of the method name. */
-	protected static final int METHOD_NAME_LENGTH = METHOD_NAME_PREFIX.length();
-	/** The length of the button to look for. */
-	protected static final int LENGTH = BUTTON.length();
-
-	/** 
-	 * If true, the eventSubmit_do<xxx> variable must contain
-	 * a not null value to be executed.
-	 */
-	private boolean submitValueKey = false;
-
-	/** 
-	 * If true, then exceptions raised in eventSubmit_do<xxx> methods 
-	 * as well as in doPerform methods are bubbled up to the Turbine
-	 * servlet's handleException method.
-	 */
-	protected boolean bubbleUpException = true;    
-	/**
-	 * C'tor
-	 */
-	public ActionEvent()
-	{
-		super();
-        
-		submitValueKey = Turbine.getConfiguration()
-				.getBoolean(TurbineConstants.ACTION_EVENTSUBMIT_NEEDSVALUE_KEY,
-						TurbineConstants.ACTION_EVENTSUBMIT_NEEDSVALUE_DEFAULT);
-		bubbleUpException = Turbine.getConfiguration()
-				.getBoolean(TurbineConstants.ACTION_EVENT_BUBBLE_EXCEPTION_UP,
-						TurbineConstants.ACTION_EVENT_BUBBLE_EXCEPTION_UP_DEFAULT);                        
-
-		if (log.isDebugEnabled()){
-		log.debug(submitValueKey 
-				? "ActionEvent accepts only eventSubmit_do Keys with a value != 0"
-				: "ActionEvent accepts all eventSubmit_do Keys");
-		log.debug(bubbleUpException 
-				  ? "ActionEvent will bubble exceptions up to Turbine.handleException() method"
-				  : "ActionEvent will not bubble exceptions up.");                
-		}
-	}
-    
-	/**
-	 * This overrides the default Action.perform() to execute the
-	 * doEvent() method. If that fails, then it will execute the
-	 * doPerform() method instead.
-	 * @deprecated Use PipelineData version instead.
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	protected void perform(RunData data)
-			throws Exception
-	{
-		try
-		{
-			executeEvents(data);
-		}
-		catch (NoSuchMethodException e)
-		{
-			doPerform(data);
-		}
-	}
-
-	/**
-	 * This overrides the default Action.perform() to execute the
-	 * doEvent() method. If that fails, then it will execute the
-	 * doPerform() method instead.
-	 *
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	protected void perform(PipelineData pipelineData)
-			throws Exception
-	{
-		try
-		{
-			executeEvents(pipelineData);
-		}
-		catch (NoSuchMethodException e)
-		{
-			doPerform(pipelineData);
-		}
-	}
-
-	
-	/**
-	 * This method should be called to execute the event based system.
-	 *
-	 * @deprecated Use PipelineData version instead.
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	public void executeEvents(RunData data)
-			throws Exception
-	{
-		// Name of the button.
-		String theButton = null;
-		// Parameter parser.
-		ParameterParser pp = data.getParameters();
-
-		String button = pp.convert(BUTTON);
-		String key = null;
-
-		// Loop through and find the button.
-		for (Iterator it = pp.keySet().iterator(); it.hasNext();)
-		{
-			key = (String) it.next();
-			if (key.startsWith(button))
-			{
-				if (considerKey(key, pp))
-				{
-					theButton = formatString(key);
-					break;
-				}
-			}
-		}
-
-		if (theButton == null)
-		{
-			throw new NoSuchMethodException("ActionEvent: The button was null");
-		}
-
-		Method method = null;
-
-		try
-		{
-			method = getClass().getMethod(theButton, methodParams);
-			Object[] methodArgs = new Object[] { data };
-
-			if (log.isDebugEnabled())
-			{
-				log.debug("Invoking " + method);
-			}
-
-			method.invoke(this, methodArgs);
-		}
-		catch (InvocationTargetException ite)
-		{
-			Throwable t = ite.getTargetException();
-			log.error("Invokation of " + method , t);
-		}
-		finally
-		{
-			pp.remove(key);
-		}
-	}
-
-	/**
-	 * This method should be called to execute the event based system.
-	 *
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	public void executeEvents(PipelineData pipelineData)
-			throws Exception
-	{
-	    
-	    RunData data = (RunData) getRunData(pipelineData);
-	    
-		// Name of the button.
-		String theButton = null;
-		// Parameter parser.
-		ParameterParser pp = data.getParameters();
-
-		String button = pp.convert(BUTTON);
-		String key = null;
-
-		// Loop through and find the button.
-		for (Iterator it = pp.keySet().iterator(); it.hasNext();)
-		{
-			key = (String) it.next();
-			if (key.startsWith(button))
-			{
-				if (considerKey(key, pp))
-				{
-					theButton = formatString(key);
-					break;
-				}
-			}
-		}
-
-		if (theButton == null)
-		{
-			throw new NoSuchMethodException("ActionEvent: The button was null");
-		}
-
-		Method method = null;
-
-		try
-		{
-			method = getClass().getMethod(theButton, methodParams);
-			Object[] methodArgs = new Object[] { pipelineData };
-
-			if (log.isDebugEnabled())
-			{
-				log.debug("Invoking " + method);
-			}
-
-			method.invoke(this, methodArgs);
-		}
-		catch (InvocationTargetException ite)
-		{
-			Throwable t = ite.getTargetException();
-			log.error("Invokation of " + method , t);
-		}
-		finally
-		{
-			pp.remove(key);
-		}
-	}
-
-	
-	
-	/**
-	 * This method does the conversion of the lowercase method name
-	 * into the proper case.
-	 *
-	 * @param input The unconverted method name.
-	 * @return A string with the method name in the proper case.
-	 */
-	protected final String formatString(String input)
-	{
-		String tmp = input;
-        
-		if (StringUtils.isNotEmpty(input))
-		{
-			tmp = input.toLowerCase();
-            
-			// Chop off suffixes (for image type)
-			input = (tmp.endsWith(".x") || tmp.endsWith(".y"))
-					? input.substring(0, input.length() - 2)
-					: input;
-            
-			if (ParserUtils.getUrlFolding() 
-					!= ParserUtils.URL_CASE_FOLDING_NONE)
-			{
-				tmp = input.toLowerCase().substring(BUTTON_LENGTH + METHOD_NAME_LENGTH);
-				tmp = METHOD_NAME_PREFIX + StringUtils.capitalize(tmp);
-			}
-			else
-			{
-				tmp = input.substring(BUTTON_LENGTH);
-			}
-		}
-		return tmp;
-	}
-
-	/**
-	 * Checks whether the selected key really is a valid event.
-	 *
-	 * @param key The selected key
-	 * @param pp The parameter parser to look for the key value
-	 *
-	 * @return true if this key is really an ActionEvent Key
-	 */
-	protected boolean considerKey(String key, ParameterParser pp)
-	{
-		if (!submitValueKey)
-		{
-			log.debug("No Value required, accepting " + key);
-			return true;
-		}
-		else
-		{
-			// If the action.eventsubmit.needsvalue key is true, 
-			// events with a "0" or empty value are ignored.
-			// This can be used if you have multiple eventSubmit_do<xxx>
-			// fields in your form which are selected by client side code, 
-			// e.g. JavaScript.
-			//
-			// If this key is unset or missing, nothing changes for the
-			// current behaviour.
-			//
-			String keyValue = pp.getString(key);
-			log.debug("Key Value is " + keyValue);
-			if (StringUtils.isEmpty(keyValue))
-			{
-				log.debug("Key is empty, rejecting " + key);
-				return false;
-			}
-
-			try
-			{
-				if (Integer.parseInt(keyValue) != 0)
-				{
-					log.debug("Integer != 0, accepting " + key);
-					return true;
-				}
-			}
-			catch (NumberFormatException nfe)
-			{
-				// Not a number. So it might be a
-				// normal Key like "continue" or "exit". Accept
-				// it.
-				log.debug("Not a number, accepting " + key);
-				return true;
-			}
-		}
-		log.debug("Rejecting " + key);
-		return false;
-	}
-}
diff --git a/src/java/org/apache/turbine/modules/ActionLoader.java b/src/java/org/apache/turbine/modules/ActionLoader.java
deleted file mode 100644
index 1c28dc3..0000000
--- a/src/java/org/apache/turbine/modules/ActionLoader.java
+++ /dev/null
@@ -1,224 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * The purpose of this class is to allow one to load and execute
- * Action modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class ActionLoader
-    extends GenericLoader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ActionLoader.class);
-
-    /** The single instance of this class. */
-    private static ActionLoader instance = new ActionLoader(
-        Turbine.getConfiguration().getInt(TurbineConstants.ACTION_CACHE_SIZE_KEY,
-                                          TurbineConstants.ACTION_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ActionLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ActionLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param action Action to be associated with name.
-     */
-    private void addInstance(String name, Action action)
-    {
-        if (cache())
-        {
-            this.put(name, action);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external action.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the action.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        // Execute action
-        getInstance(name).perform(data);
-    }
-    
-    /**
-     * Attempts to load and execute the external action.
-     *
-     * @param pipelineData Turbine information.
-     * @param name Name of object that will execute the action.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-    		throws Exception
-    {
-        getInstance(name).perform(pipelineData);
-    }
-    
-
-    /**
-     * Pulls out an instance of the object by name. Name is just the
-     * single name of the object.
-     *
-     * @param name Name of object instance.
-     * @return An Action with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Action getInstance(String name)
-            throws Exception
-    {
-        Action action = null;
-
-        // Check if the action is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            action = (Action) this.get(name);
-            log.debug("Found Action " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Action " + name + " from the Assembler Broker");
-
-            try
-            {
-                // Attempt to load the screen
-                action = (Action) ab.getAssembler(
-                        AssemblerBrokerService.ACTION_TYPE, name);
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                action = null;
-            }
-
-            if (action == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages,
-                        GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested Action not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, action);
-            }
-        }
-        return action;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static ActionLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/Assembler.java b/src/java/org/apache/turbine/modules/Assembler.java
deleted file mode 100644
index b06d751..0000000
--- a/src/java/org/apache/turbine/modules/Assembler.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.turbine.modules;
-
-import java.util.Map;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This is an interface that defines what an Assembler is. All the
- * current modules extend off of this class. It is currently empty and
- * future use is yet to be determined.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Assembler
-{
-    /**
-     * This can go once RunData is replaced...
-     * @param pipelineData
-     * @return RunData
-     */
-    public final RunData getRunData(PipelineData pipelineData)
-    {
-        if(!(pipelineData instanceof RunData)){
-            throw new RuntimeException("Can't cast to rundata from pipeline data.");
-        }
-        return (RunData)pipelineData;
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/GenericLoader.java b/src/java/org/apache/turbine/modules/GenericLoader.java
deleted file mode 100644
index 5d024e6..0000000
--- a/src/java/org/apache/turbine/modules/GenericLoader.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is the base class for the loaders. It contains code that is
- * used across all of the loaders. It also specifies the interface
- * that is required to be called a Loader.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class GenericLoader
-    extends Hashtable
-{
-    /** @serial This can be serialized */
-    private boolean reload = false;
-
-    /** @serial This can be serialized */
-    private boolean isCaching = true;
-
-    /** Base packages path for Turbine */
-    private static final String TURBINE_PACKAGE = "org.apache.turbine.modules";
-
-    /**
-     * Basic constructor for creating a loader.
-     */
-    public GenericLoader()
-    {
-        super();
-        isCaching = Turbine.getConfiguration()
-            .getBoolean(TurbineConstants.MODULE_CACHE_KEY,
-                        TurbineConstants.MODULE_CACHE_DEFAULT);
-    }
-
-    /**
-     * Basic constructor for creating a loader.
-     */
-    public GenericLoader(int i)
-    {
-        super(i);
-        isCaching = Turbine.getConfiguration()
-            .getBoolean(TurbineConstants.MODULE_CACHE_KEY,
-                        TurbineConstants.MODULE_CACHE_DEFAULT);
-    }
-
-    /**
-     * If set to true, then cache the Loader objects.
-     *
-     * @return True if the Loader objects are being cached.
-     */
-    public boolean cache()
-    {
-        return this.isCaching;
-    }
-
-    /**
-     * Attempts to load and execute the external action that has been
-     * set.
-     * Should revert to abstract when RunData has gone.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-            throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        exec(data, name);
-    }
-
-    
-    /**
-     * Attempts to load and execute the external action that has been
-     * set.
-     * @deprecated Use of this method should be avoided. Use
-     * <code>exec(PipelineData data, String name)</code> instead.
-     * @exception Exception a generic exception.
-     */
-    public abstract void exec(RunData data, String name)
-    	throws Exception;
-    
-    /**
-     * Commented out.
-     * This method should return the complete classpath + name.
-     *
-     * @param name
-     * @return
-     *
-     public abstract String getClassName(String name);
-     */
-
-    /**
-     * Returns whether or not this external action is reload itself.
-     * This is in cases where the Next button would be clicked, but
-     * since we are checking for that, we would go into an endless
-     * loop.
-     *
-     * @return True if the action is reload.
-     */
-    public boolean reload()
-    {
-        return this.reload;
-    }
-
-    /**
-     * Sets whether or not this external action is reload itself.
-     * This is in cases where the Next button would be clicked, but
-     * since we are checking for that, we would go into an endless
-     * loop.
-     *
-     * @param reload True if the action must be marked as reload.
-     * @return Itself.
-     */
-    public GenericLoader setReload(boolean reload)
-    {
-        this.reload = reload;
-        return this;
-    }
-
-    /**
-     * Gets the base package where Turbine should find its default
-     * modules.
-     *
-     * @return A String with the base package name.
-     */
-    public static String getBasePackage()
-    {
-        return TURBINE_PACKAGE;
-    }
-    
-    private RunData getRunData(PipelineData pipelineData)
-    {
-        if(!(pipelineData instanceof RunData)){
-            throw new RuntimeException("Can't cast to rundata from pipeline data.");
-        }
-        return (RunData)pipelineData;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/Layout.java b/src/java/org/apache/turbine/modules/Layout.java
deleted file mode 100644
index 1d33e5e..0000000
--- a/src/java/org/apache/turbine/modules/Layout.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is the base class that defines what a Layout module is.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Layout
-    extends Assembler
-{
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the layout in RunData
-     * or to write the layout to the output stream referenced in
-     * RunData.
-     * @deprecated Use PipelineData version instead
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected abstract void doBuild(RunData data)
-        throws Exception;
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use LayoutLoader to build a Layout.
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void build(RunData data)
-        throws Exception
-    {
-        doBuild(data);
-    }
-    
-    
-    /**
-     * A subclass must override this method to perform itself.  The
-     * Action can also set the screen that is associated with RunData.
-     * Should revert to abstract when RunData is gone.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuild(PipelineData pipelineData) throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        doBuild(data);
-    }
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use ActionLoader to perform an Action.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void build(PipelineData pipelineData) throws Exception
-    {
-        doBuild(pipelineData);
-    }
-
-
-}
diff --git a/src/java/org/apache/turbine/modules/LayoutLoader.java b/src/java/org/apache/turbine/modules/LayoutLoader.java
deleted file mode 100644
index f589914..0000000
--- a/src/java/org/apache/turbine/modules/LayoutLoader.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * The purpose of this class is to allow one to load and execute
- * Layout modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LayoutLoader
-    extends GenericLoader
-    implements Loader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(LayoutLoader.class);
-
-    /** The single instance of this class. */
-    private static LayoutLoader instance =
-        new LayoutLoader(Turbine.getConfiguration()
-                         .getInt(TurbineConstants.LAYOUT_CACHE_SIZE_KEY,
-                                 TurbineConstants.LAYOUT_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private LayoutLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private LayoutLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param layout Layout to be associated with name.
-     */
-    private void addInstance(String name, Layout layout)
-    {
-        if (cache())
-        {
-            this.put(name, layout);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external layout.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the layout.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        // Execute layout
-        getInstance(name).build(data);
-    }
-
-    /**
-     * Attempts to load and execute the external layout.
-     *
-     * @param pipelineData Turbine information.
-     * @param name Name of object that will execute the layout.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-    		throws Exception
-    {
-        getInstance(name).build(pipelineData);
-    }
-
-    
-    
-    /**
-     * Pulls out an instance of the object by name.  Name is just the
-     * single name of the object. This is equal to getInstance but
-     * returns an Assembler object and is needed to fulfil the Loader
-     * interface.
-     *
-     * @param name Name of object instance.
-     * @return A Layout with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getInstance(name);
-    }
-
-    /**
-     * Pulls out an instance of the Layout by name.  Name is just the
-     * single name of the Layout.
-     *
-     * @param name Name of requested Layout
-     * @return A Layout with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Layout getInstance(String name)
-            throws Exception
-    {
-        Layout layout = null;
-
-        // Check if the layout is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            layout = (Layout) this.get(name);
-            log.debug("Found Layout " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Layout " + name + " from the Assembler Broker");
-
-            try
-            {
-                if (ab != null)
-                {
-                    // Attempt to load the layout
-                    layout = (Layout) ab.getAssembler(
-                        AssemblerBrokerService.LAYOUT_TYPE, name);
-                }
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                layout = null;
-            }
-
-            if (layout == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages,
-                        GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested Layout not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, layout);
-            }
-        }
-        return layout;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static LayoutLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/Loader.java b/src/java/org/apache/turbine/modules/Loader.java
deleted file mode 100644
index 76dd5d5..0000000
--- a/src/java/org/apache/turbine/modules/Loader.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * A common interface for Screen, Layout and Navigation Loader
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface Loader
-{
-    /**
-     * Pulls out an instance of an Assembler Object by name.
-     *
-     * @param name Name of requested Object.
-     * @return An Assembler object or null.
-     * @exception Exception a generic exception.
-     */
-    public Assembler getAssembler(String name)
-        throws Exception;
-}
diff --git a/src/java/org/apache/turbine/modules/Navigation.java b/src/java/org/apache/turbine/modules/Navigation.java
deleted file mode 100644
index 425622c..0000000
--- a/src/java/org/apache/turbine/modules/Navigation.java
+++ /dev/null
@@ -1,145 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.InputFilterUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is the base class that defines what a Navigation module is.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Navigation
-    extends Assembler
-{
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the navigation in
-     * RunData or to write the navigation to the output stream
-     * referenced in RunData.
-     * @deprecated Use PipelineData version instead
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected abstract ConcreteElement doBuild(RunData data)
-        throws Exception;
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use NavigationLoader to build a Navigation.
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement build(RunData data)
-        throws Exception
-    {
-        return doBuild(data);
-    }
-
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the navigation in
-     * RunData or to write the navigation to the output stream
-     * referenced in RunData.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        return doBuild(data);
-    }
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use NavigationLoader to build a Navigation.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement build(PipelineData pipelineData)
-        throws Exception
-    {
-        return doBuild(pipelineData);
-    }
-
-    
-    /**
-     * This function can/should be used in any screen that will output
-     * User entered text.  This will help prevent users from entering
-     * html (<SCRIPT>) tags that will get executed by the browser.
-     *
-     * @param s The string to prepare.
-     * @return A string with the input already prepared.
-     * @deprecated Use InputFilterUtils.prepareText(String s)
-     */
-    public static String prepareText(String s)
-    {
-        return InputFilterUtils.prepareText(s);
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/NavigationLoader.java b/src/java/org/apache/turbine/modules/NavigationLoader.java
deleted file mode 100644
index 9c785f5..0000000
--- a/src/java/org/apache/turbine/modules/NavigationLoader.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ecs.ConcreteElement;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * The purpose of this class is to allow one to load and execute
- * Navigation modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class NavigationLoader
-    extends GenericLoader
-    implements Loader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(NavigationLoader.class);
-
-    /** The single instance of this class. */
-    private static NavigationLoader instance =
-        new NavigationLoader(Turbine.getConfiguration()
-                         .getInt(TurbineConstants.NAVIGATION_CACHE_SIZE_KEY,
-                                 TurbineConstants.NAVIGATION_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private NavigationLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private NavigationLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param navigation Navigation to be associated with name.
-     */
-    private void addInstance(String name, Navigation navigation)
-    {
-        if (cache())
-        {
-            this.put(name, navigation);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external Navigation. This is
-     * used when you want to execute a Navigation which returns its
-     * output via a MultiPartElement instead of out the data.getPage()
-     * value.  This allows you to easily chain the execution of
-     * Navigation modules together.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the navigation.
-     * @exception Exception a generic exception.
-     */
-    public ConcreteElement eval(RunData data, String name)
-            throws Exception
-    {
-        // Execute Navigation
-        return getInstance(name).build(data);
-    }
-
-    /**
-     * Attempts to load and execute the external Navigation. This is
-     * used when you want to execute a Navigation which returns its
-     * output via a MultiPartElement instead of out the data.getPage()
-     * value.  This allows you to easily chain the execution of
-     * Navigation modules together.
-     *
-     * @param data Turbine information.
-     * @param name Name of object that will execute the navigation.
-     * @exception Exception a generic exception.
-     */
-    public ConcreteElement eval(PipelineData pipelineData, String name)
-            throws Exception
-    {
-        // Execute Navigation
-        return getInstance(name).build(pipelineData);
-    }
-
-    
-    /**
-     * Attempts to load and execute the external Navigation.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object instance.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        this.eval(data, name);
-    }
-
-    /**
-     * Attempts to load and execute the external Navigation.
-     *
-     * @param pipelineData Turbine information.
-     * @param name Name of object instance.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-    		throws Exception
-    {
-        this.eval(pipelineData, name);
-    }
-
-    
-    /**
-     * Pulls out an instance of the object by name.  Name is just the
-     * single name of the object. This is equal to getInstance but
-     * returns an Assembler object and is needed to fulfil the Loader
-     * interface.
-     *
-     * @param name Name of object instance.
-     * @return A Layout with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getInstance(name);
-    }
-
-    /**
-     * Pulls out an instance of the Navigation by name.  Name is just the
-     * single name of the Navigation.
-     *
-     * @param name Name of requested Navigation
-     * @return A Navigation with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Navigation getInstance(String name)
-            throws Exception
-    {
-        Navigation navigation = null;
-
-        // Check if the navigation is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            navigation = (Navigation) this.get(name);
-            log.debug("Found Navigation " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Navigation " + name + " from the Assembler Broker");
-
-            try
-            {
-                if (ab != null)
-                {
-                    // Attempt to load the navigation
-                    navigation = (Navigation) ab.getAssembler(
-                        AssemblerBrokerService.NAVIGATION_TYPE, name);
-                }
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                navigation = null;
-            }
-
-            if (navigation == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages,
-                        GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested Navigation not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, navigation);
-            }
-        }
-        return navigation;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static NavigationLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/Page.java b/src/java/org/apache/turbine/modules/Page.java
deleted file mode 100644
index ec2d5a8..0000000
--- a/src/java/org/apache/turbine/modules/Page.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is the base class that defines what a Page module is.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Page
-    extends Assembler
-{
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the page in RunData or
-     * to write the page to the output stream referenced in RunData.
-     * @deprecated Use <code>doBuild(PipelineData pipelineData)</code> instead
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected abstract void doBuild(RunData data)
-        throws Exception;
-
-
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the page in RunData or
-     * to write the page to the output stream referenced in RunData.
-     * Should revert to abstract when RunData goes.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuild(PipelineData pipelineData)
-    	throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        doBuild(data);
-    }
-    
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use PageLoader to build a Page.
-     * @deprecated Use <code>build(PipelineData)</code> instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void build(RunData data)
-        throws Exception
-    {
-        doBuild(data);
-    }
-
-
-    
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use PageLoader to build a Page.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void build(PipelineData pipelineData)
-    	throws Exception
-    {
-        doBuild(pipelineData);
-    }
-        
-}
diff --git a/src/java/org/apache/turbine/modules/PageLoader.java b/src/java/org/apache/turbine/modules/PageLoader.java
deleted file mode 100644
index 78f2169..0000000
--- a/src/java/org/apache/turbine/modules/PageLoader.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * The purpose of this class is to allow one to load and execute Page
- * modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class PageLoader
-    extends GenericLoader
-    implements Loader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(PageLoader.class);
-
-    /** The single instance of this class. */
-    private static PageLoader instance =
-        new PageLoader(Turbine.getConfiguration()
-                       .getInt(TurbineConstants.PAGE_CACHE_SIZE_KEY,
-                               TurbineConstants.PAGE_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private PageLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private PageLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param page Page to be associated with name.
-     */
-    private void addInstance(String name, Page page)
-    {
-        if (cache())
-        {
-            this.put(name, page);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external page.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the page.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        // Execute page
-        getInstance(name).build(data);
-    }
-
-    /**
-     * Attempts to load and execute the external page.
-     *
-     * @param data Turbine information.
-     * @param name Name of object that will execute the page.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-            throws Exception
-    {
-        // Execute page
-        getInstance(name).build(pipelineData);
-    }
-
-    
-    
-    /**
-     * Pulls out an instance of the object by name.  Name is just the
-     * single name of the object. This is equal to getInstance but
-     * returns an Assembler object and is needed to fulfil the Loader
-     * interface.
-     *
-     * @param name Name of object instance.
-     * @return A Screen with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getInstance(name);
-    }
-
-    /**
-     * Pulls out an instance of the page by name.  Name is just the
-     * single name of the page.
-     *
-     * @param name Name of object instance.
-     * @return A Page with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Page getInstance(String name)
-            throws Exception
-    {
-        Page page = null;
-
-        // Check if the screen is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            page = (Page) this.get(name);
-            log.debug("Found Page " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Page " + name + " from the Assembler Broker");
-
-            try
-            {
-                if (ab != null)
-                {
-                    // Attempt to load the screen
-                    page = (Page) ab.getAssembler(
-                        AssemblerBrokerService.PAGE_TYPE, name);
-                }
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                page = null;
-            }
-
-            if (page == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages,
-                        GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested Page not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, page);
-            }
-        }
-        return page;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static PageLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/ScheduledJob.java b/src/java/org/apache/turbine/modules/ScheduledJob.java
deleted file mode 100644
index a43af95..0000000
--- a/src/java/org/apache/turbine/modules/ScheduledJob.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-// Turbine Scheduler Classes
-
-import org.apache.turbine.services.schedule.JobEntry;
-
-/**
- * All Scheduled jobs should extend this.  The class that extends
- * ScheduledJobs should contain the code that you actually want to
- * execute at a specific time.  The name of this class is what you
- * register in the JobEntry.
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public abstract class ScheduledJob extends Assembler
-{
-    /**
-     * Run the Jobentry from the scheduler queue.
-     *
-     * @param job The job to run.
-     */
-    public abstract void run(JobEntry job)
-            throws Exception;
-}
diff --git a/src/java/org/apache/turbine/modules/ScheduledJobLoader.java b/src/java/org/apache/turbine/modules/ScheduledJobLoader.java
deleted file mode 100644
index c74ee02..0000000
--- a/src/java/org/apache/turbine/modules/ScheduledJobLoader.java
+++ /dev/null
@@ -1,231 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.services.schedule.JobEntry;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * ScheduledJobs loader class.
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class ScheduledJobLoader
-    extends GenericLoader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScheduledJobLoader.class);
-
-    /** The single instance of this class. */
-    private static ScheduledJobLoader instance =
-        new ScheduledJobLoader(Turbine.getConfiguration()
-            .getInt(TurbineConstants.SCHEDULED_JOB_CACHE_SIZE_KEY,
-                TurbineConstants.SCHEDULED_JOB_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ScheduledJobLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ScheduledJobLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param job Job to be associated with name.
-     */
-    private void addInstance(String name, ScheduledJob job)
-    {
-        if (cache())
-        {
-            this.put(name, job);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external ScheduledJob.
-     *
-     * @param job The JobEntry.
-     * @param name Name of object that will execute the job.
-     * @exception Exception a generic exception.
-     */
-    public void exec(JobEntry job, String name)
-            throws Exception
-    {
-        // Execute job
-        getInstance(name).run(job);
-    }
-
-    /**
-     * Attempts to load and execute the external ScheduledJob.
-     *
-     * HELP! - THIS IS UGLY!
-     *
-     * I want the cache stuff from GenericLoader, BUT, I don't think
-     * the scheduler needs the Rundata object.  The scheduler runs
-     * independently of an HTTP request.  This should not extend
-     * GenericLoader!  Thoughts??
-     *
-     * @param data Turbine information.
-     * @param name Name of object that will execute the job.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        throw new Exception("RunData objects not accepted for Scheduled jobs");
-    }
-
-    /**
-     * Pulls out an instance of the object by name.  Name is just the
-     * single name of the object.
-     *
-     * @param name Name of object instance.
-     * @return An ScheduledJob with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public ScheduledJob getInstance(String name)
-            throws Exception
-    {
-        ScheduledJob job = null;
-
-        // Check if the screen is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            job = (ScheduledJob) this.get(name);
-            log.debug("Found Job " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Job " + name + " from the Assembler Broker");
-
-            try
-            {
-                if (ab != null)
-                {
-                    // Attempt to load the job
-                    job = (ScheduledJob) ab.getAssembler(
-                        AssemblerBrokerService.SCHEDULEDJOB_TYPE, name);
-                }
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                job = null;
-            }
-
-            if (job == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages, GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested ScheduledJob not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, job);
-            }
-        }
-        return job;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static ScheduledJobLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/Screen.java b/src/java/org/apache/turbine/modules/Screen.java
deleted file mode 100644
index 0db7728..0000000
--- a/src/java/org/apache/turbine/modules/Screen.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.InputFilterUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is the base class which defines the Screen modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class Screen
-    extends Assembler
-{
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the screen in RunData
-     * or to write the screen to the output stream referenced in
-     * RunData.
-     * Should revert to abstract when RunData has gone.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return doBuild(data);
-    }
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use ScreenLoader to build a Screen.
-     *
-     * @param pipelineData Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement build(PipelineData pipelineData)
-        throws Exception
-    {
-        return doBuild(pipelineData);
-    }
-
-    /**
-     * If the Layout has not been defined by the Screen then set the
-     * layout to be "DefaultLayout".  The Screen object can also
-     * override this method to provide intelligent determination of
-     * the Layout to execute.  You can also define that logic here as
-     * well if you want it to apply on a global scale.  For example,
-     * if you wanted to allow someone to define Layout "preferences"
-     * where they could dynamically change the Layout for the entire
-     * site.  The information for the request is passed in with the
-     * PipelineData object.
-     *
-     * @param pipelineData Turbine information.
-     * @return A String with the Layout.
-     */
-    public String getLayout(PipelineData pipelineData)
-    {
-        RunData data = (RunData) getRunData(pipelineData);        
-        return data.getLayout();
-    }
-
-    /**
-     * Set the layout for a Screen.
-     *
-     * @param data Turbine information.
-     * @param layout The layout name.
-     */
-    public void setLayout(PipelineData pipelineData, String layout)
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        data.setLayout(layout);
-    }
-
-    
-    
-    
-    
-    /**
-     * A subclass must override this method to build itself.
-     * Subclasses override this method to store the screen in RunData
-     * or to write the screen to the output stream referenced in
-     * RunData.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected abstract ConcreteElement doBuild(RunData data)
-        throws Exception;
-
-    /**
-     * Subclasses can override this method to add additional
-     * functionality.  This method is protected to force clients to
-     * use ScreenLoader to build a Screen.
-     * @deprecated Use PipelineData version instead.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected ConcreteElement build(RunData data)
-        throws Exception
-    {
-        return doBuild(data);
-    }
-
-    /**
-     * If the Layout has not been defined by the Screen then set the
-     * layout to be "DefaultLayout".  The Screen object can also
-     * override this method to provide intelligent determination of
-     * the Layout to execute.  You can also define that logic here as
-     * well if you want it to apply on a global scale.  For example,
-     * if you wanted to allow someone to define Layout "preferences"
-     * where they could dynamically change the Layout for the entire
-     * site.  The information for the request is passed in with the
-     * RunData object.
-     * @deprecated Use PipelineData version instead.
-     *
-     * @param data Turbine information.
-     * @return A String with the Layout.
-     */
-    public String getLayout(RunData data)
-    {
-        return data.getLayout();
-    }
-
-    /**
-     * Set the layout for a Screen.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param layout The layout name.
-     */
-    public void setLayout(RunData data, String layout)
-    {
-        data.setLayout(layout);
-    }
-
-    /**
-     * This function can/should be used in any screen that will output
-     * User entered text.  This will help prevent users from entering
-     * html (<SCRIPT>) tags that will get executed by the browser.
-     *
-     * @param s The string to prepare.
-     * @return A string with the input already prepared.
-     * @deprecated Use InputFilterUtils.prepareText(String s)
-     */
-    public static String prepareText(String s)
-    {
-        return InputFilterUtils.prepareText(s);
-    }
-
-    /**
-     * This function can/should be used in any screen that will output
-     * User entered text.  This will help prevent users from entering
-     * html (<SCRIPT>) tags that will get executed by the browser.
-     *
-     * @param s The string to prepare.
-     * @return A string with the input already prepared.
-     * @deprecated Use InputFilterUtils.prepareTextMinimum(String s)
-     */
-    public static String prepareTextMinimum(String s)
-    {
-        return InputFilterUtils.prepareTextMinimum(s);
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/ScreenLoader.java b/src/java/org/apache/turbine/modules/ScreenLoader.java
deleted file mode 100644
index 657a98d..0000000
--- a/src/java/org/apache/turbine/modules/ScreenLoader.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ecs.ConcreteElement;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.assemblerbroker.AssemblerBrokerService;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.RunData;
-
-/**
- * The purpose of this class is to allow one to load and execute
- * Screen modules.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class ScreenLoader
-    extends GenericLoader
-    implements Loader
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScreenLoader.class);
-
-    /** The single instance of this class. */
-    private static ScreenLoader instance =
-        new ScreenLoader(Turbine.getConfiguration()
-                         .getInt(TurbineConstants.SCREEN_CACHE_SIZE_KEY,
-                                 TurbineConstants.SCREEN_CACHE_SIZE_DEFAULT));
-
-    /** The Assembler Broker Service */
-    private static AssemblerBrokerService ab = TurbineAssemblerBroker.getService();
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ScreenLoader()
-    {
-        super();
-    }
-
-    /**
-     * These ctor's are private to force clients to use getInstance()
-     * to access this class.
-     */
-    private ScreenLoader(int i)
-    {
-        super(i);
-    }
-
-    /**
-     * Adds an instance of an object into the hashtable.
-     *
-     * @param name Name of object.
-     * @param screen Screen to be associated with name.
-     */
-    private void addInstance(String name, Screen screen)
-    {
-        if (cache())
-        {
-            this.put(name, screen);
-        }
-    }
-
-    /**
-     * Attempts to load and execute the external Screen. This is used
-     * when you want to execute a Screen which returns its output via
-     * a MultiPartElement instead of out the data.getPage() value.
-     * This allows you to easily chain the execution of Screen modules
-     * together.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the screen.
-     * @exception Exception a generic exception.
-     */
-    public ConcreteElement eval(RunData data, String name)
-            throws Exception
-    {
-        // Execute screen
-        return getInstance(name).build(data);
-    }
-
-    /**
-     * Attempts to load and execute the external Screen. This is used
-     * when you want to execute a Screen which returns its output via
-     * a MultiPartElement instead of out the data.getPage() value.
-     * This allows you to easily chain the execution of Screen modules
-     * together.
-     *
-     * @param data Turbine information.
-     * @param name Name of object that will execute the screen.
-     * @exception Exception a generic exception.
-     */
-    public ConcreteElement eval(PipelineData pipelineData, String name)
-            throws Exception
-    {
-        // Execute screen
-        return getInstance(name).build(pipelineData);
-    }
-    /**
-     * Attempts to load and execute the Screen. This is used when you
-     * want to execute a Screen which returns its output via the
-     * data.getPage() object.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param name Name of object that will execute the screen.
-     * @exception Exception a generic exception.
-     */
-    public void exec(RunData data, String name)
-            throws Exception
-    {
-        this.eval(data, name);
-    }
-
-    /**
-     * Attempts to load and execute the Screen. This is used when you
-     * want to execute a Screen which returns its output via the
-     * data.getPage() object.
-     *
-     * @param data Turbine information.
-     * @param name Name of object that will execute the screen.
-     * @exception Exception a generic exception.
-     */
-    public void exec(PipelineData pipelineData, String name)
-	throws Exception
-	{
-        this.eval(pipelineData, name);
-	}
-    /**
-     * Pulls out an instance of the object by name.  Name is just the
-     * single name of the object. This is equal to getInstance but
-     * returns an Assembler object and is needed to fulfil the Loader
-     * interface.
-     *
-     * @param name Name of object instance.
-     * @return A Screen with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getInstance(name);
-    }
-
-    /**
-     * Pulls out an instance of the Screen by name.  Name is just the
-     * single name of the Screen.
-     *
-     * @param name Name of requested Screen.
-     * @return A Screen with the specified name, or null.
-     * @exception Exception a generic exception.
-     */
-    public Screen getInstance(String name)
-            throws Exception
-    {
-        Screen screen = null;
-
-        // Check if the screen is already in the cache
-        if (cache() && this.containsKey(name))
-        {
-            screen = (Screen) this.get(name);
-            log.debug("Found Screen " + name + " in the cache!");
-        }
-        else
-        {
-            log.debug("Loading Screen " + name + " from the Assembler Broker");
-
-            try
-            {
-                if (ab != null)
-                {
-                    // Attempt to load the screen
-                    screen = (Screen) ab.getAssembler(
-                        AssemblerBrokerService.SCREEN_TYPE, name);
-                }
-            }
-            catch (ClassCastException cce)
-            {
-                // This can alternatively let this exception be thrown
-                // So that the ClassCastException is shown in the
-                // browser window.  Like this it shows "Screen not Found"
-                screen = null;
-            }
-
-            if (screen == null)
-            {
-                // If we did not find a screen we should try and give
-                // the user a reason for that...
-                // FIX ME: The AssemblerFactories should each add it's
-                // own string here...
-                List packages = Turbine.getConfiguration()
-                    .getList(TurbineConstants.MODULE_PACKAGES);
-
-                ObjectUtils.addOnce(packages,
-                        GenericLoader.getBasePackage());
-
-                throw new ClassNotFoundException(
-                        "\n\n\tRequested Screen not found: " + name +
-                        "\n\tTurbine looked in the following " +
-                        "modules.packages path: \n\t" + packages.toString() + "\n");
-            }
-            else if (cache())
-            {
-                // The new instance is added to the cache
-                addInstance(name, screen);
-            }
-        }
-        return screen;
-    }
-
-    /**
-     * The method through which this class is accessed.
-     *
-     * @return The single instance of this class.
-     */
-    public static ScreenLoader getInstance()
-    {
-        return instance;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/actions/AccessController.java b/src/java/org/apache/turbine/modules/actions/AccessController.java
deleted file mode 100644
index 8559831..0000000
--- a/src/java/org/apache/turbine/modules/actions/AccessController.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-
-/**
- * This action doPerforms an Access Control List and places it into
- * the RunData object, so it is easily available to modules.  The ACL
- * is also placed into the session.  Modules can null out the ACL to
- * force it to be rebuilt based on more information.
- *
- * <p>
- *
- * Turbine uses a User-Role-Permission arrangement for access control.
- * Users are assigned Roles.  Roles are assigned Permissions.  Turbine
- * modules then check the Permission required for an action or
- * information with the set of Permissions currently associated with
- * the session (which are dependent on the user associated with the
- * session.)
- *
- * <p>
- *
- * The criteria for assigning Roles/Permissions is application
- * dependent, in some cases an application may change a User's Roles
- * during the session.  To achieve flexibility, the ACL takes an
- * Object parameter, which the application can use to doPerform the
- * ACL.
- *
- * <p>
- *
- * This action is special in that it should only be executed by the
- * Turbine servlet.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class AccessController
-        extends Action
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(AccessController.class);
-
-    /**
-     * If there is a user and the user is logged in, doPerform will
-     * set the RunData ACL.  The list is first sought from the current
-     * session, otherwise it is loaded through
-     * <code>TurbineSecurity.getACL()</code> and added to the current
-     * session.
-     * @deprecated Use PipelineData version instead.
-     * @see org.apache.turbine.services.security.TurbineSecurity
-     * @param data Turbine information.
-     * @exception TurbineSecurityException problem with the security service.
-     */
-    public void doPerform(RunData data)
-            throws TurbineSecurityException
-    {
-        User user = data.getUser();
-
-        if (!TurbineSecurity.isAnonymousUser(user)
-            && user.hasLoggedIn())
-        {
-            log.debug("Fetching ACL for " + user.getName());
-            AccessControlList acl = (AccessControlList)
-                    data.getSession().getAttribute(
-                            AccessControlList.SESSION_KEY);
-            if (acl == null)
-            {
-                log.debug("No ACL found in Session, building fresh ACL");
-                acl = TurbineSecurity.getACL(user);
-                data.getSession().setAttribute(
-                        AccessControlList.SESSION_KEY, acl);
-
-                log.debug("ACL is " + acl);
-            }
-            data.setACL(acl);
-        }
-    }
-    
-    /**
-     * If there is a user and the user is logged in, doPerform will
-     * set the RunData ACL.  The list is first sought from the current
-     * session, otherwise it is loaded through
-     * <code>TurbineSecurity.getACL()</code> and added to the current
-     * session.
-     *
-     * @see org.apache.turbine.services.security.TurbineSecurity
-     * @param data Turbine information.
-     * @exception TurbineSecurityException problem with the security service.
-     */
-    public void doPerform(PipelineData pipelineData)
-    	throws TurbineSecurityException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/actions/DefaultAction.java b/src/java/org/apache/turbine/modules/actions/DefaultAction.java
deleted file mode 100644
index e59a89f..0000000
--- a/src/java/org/apache/turbine/modules/actions/DefaultAction.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-// Turbine Modules
-
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is a Default Action module that doesn't do much.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultAction extends Action
-{
-    /**
-     * Execute the action.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    public void doPerform(RunData data)
-            throws Exception
-    {
-        data.setMessage(data.getScreen() + " has been executed!");
-    }
-    
-    /**
-     * Execute the action.
-     *
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    public void doPerform(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/InitContextsAction.java b/src/java/org/apache/turbine/modules/actions/InitContextsAction.java
deleted file mode 100644
index 50f2ba4..0000000
--- a/src/java/org/apache/turbine/modules/actions/InitContextsAction.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Properties;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * Used to initialize JNDI contexts.
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class InitContextsAction
-        extends Action
-{
-    /**
-     * This action will place the contexts defined in the
-     * TurbineResources instance (if any) into the data.contexts
-     * Hashtable.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data The RunData object for the current request.
-     * @exception NamingException could not create InitialContext
-     */
-    public void doPerform(RunData data)
-            throws NamingException
-    {
-        Configuration conf = Turbine.getConfiguration();
-
-        // Context properties are specified in lines in the properties
-        // file that begin with "context.contextname.", allowing
-        // multiple named contexts to be used.  Everything after the
-        // "contextname." is the name of the property that will be
-        // used by the InitialContext class to create a new context
-        // instance.
-
-        Hashtable contextPropsList = new Hashtable();
-        for (Iterator contextKeys = conf.getKeys("context."); 
-                contextKeys.hasNext();)
-        {
-            String key = (String) contextKeys.next();
-            int start = key.indexOf(".") + 1;
-            int end = key.indexOf(".", start);
-            String contextName = key.substring(start, end);
-            Properties contextProps = null;
-            if (contextPropsList.containsKey(contextName))
-            {
-                contextProps = (Properties) contextPropsList.get(contextName);
-            }
-            else
-            {
-                contextProps = new Properties();
-            }
-            contextProps.put(key.substring(end + 1),
-                             conf.getString(key));
-            contextPropsList.put(contextName, contextProps);
-        }
-        for (Iterator contextPropsKeys = contextPropsList.keySet().iterator(); 
-                contextPropsKeys.hasNext();)
-        {
-            String key = (String) contextPropsKeys.next();
-            Properties contextProps = (Properties) contextPropsList.get(key);
-            InitialContext context = new InitialContext(contextProps);
-            data.getJNDIContexts().put(key, context);
-        }
-    }
-    
-    /**
-     * This action will place the contexts defined in the
-     * TurbineResources instance (if any) into the data.contexts
-     * Hashtable.
-     *
-     * @param pipelineData The PipelineRunData object for the current request.
-     * @exception NamingException could not create InitialContext
-     */
-    public void doPerform(PipelineData pipelineData)
-    throws NamingException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);        
-    }
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/LoginUser.java b/src/java/org/apache/turbine/modules/actions/LoginUser.java
deleted file mode 100644
index dadf02a..0000000
--- a/src/java/org/apache/turbine/modules/actions/LoginUser.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This is where we authenticate the user logging into the system
- * against a user in the database. If the user exists in the database
- * that users last login time will be updated.
- *
- * @deprecated Use PipelineData version instead.
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LoginUser
-        extends Action
-{
-    /** CGI Parameter for the user name */
-    public static final String CGI_USERNAME = "username";
-
-    /** CGI Parameter for the password */
-    public static final String CGI_PASSWORD = "password";
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LoginUser.class);
-
-    /**
-     * Updates the user's LastLogin timestamp, sets their state to
-     * "logged in" and calls RunData.setUser() .  If the user cannot
-     * be authenticated (database error?) the user is assigned
-     * anonymous status and, if tr.props contains a TEMPLATE_LOGIN,
-     * the screenTemplate is set to this, otherwise the screen is set
-     * to SCREEN_LOGIN
-     *
-     * @param     data Turbine information.
-     * @exception TurbineSecurityException could not get instance of the
-     *            anonymous user
-     */
-    public void doPerform(RunData data)
-            throws TurbineSecurityException
-    {
-        String username = data.getParameters().getString(CGI_USERNAME, "");
-        String password = data.getParameters().getString(CGI_PASSWORD, "");
-
-        if (StringUtils.isEmpty(username))
-        {
-            return;
-        }
-
-        try
-        {
-            // Authenticate the user and get the object.
-            User user = TurbineSecurity.getAuthenticatedUser(
-                    username, password);
-
-            // Store the user object.
-            data.setUser(user);
-
-            // Mark the user as being logged in.
-            user.setHasLoggedIn(Boolean.TRUE);
-
-            // Set the last_login date in the database.
-            user.updateLastLogin();
-
-            // This only happens if the user is valid; otherwise, we
-            // will get a valueBound in the User object when we don't
-            // want to because the username is not set yet.  Save the
-            // User object into the session.
-            data.save();
-
-            /*
-             * If the setPage("template.vm") method has not
-             * been used in the template to authenticate the
-             * user (usually Login.vm), then the user will
-             * be forwarded to the template that is specified
-             * by the "template.home" property as listed in
-             * TR.props for the webapp.
-             */
-
-        }
-        catch (Exception e)
-        {
-            Configuration conf = Turbine.getConfiguration();
-
-            if (e instanceof DataBackendException)
-            {
-                log.error(e);
-            }
-
-            // Set Error Message and clean out the user.
-            data.setMessage(conf.getString(TurbineConstants.LOGIN_ERROR, ""));
-            data.setUser (TurbineSecurity.getAnonymousUser());
-
-            String loginTemplate = conf.getString(
-                    TurbineConstants.TEMPLATE_LOGIN);
-
-            if (StringUtils.isNotEmpty(loginTemplate))
-            {
-                // We're running in a templating solution
-                data.setScreenTemplate(loginTemplate);
-            }
-            else
-            {
-                data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-            }
-        }
-    }
-    
-    
-    /**
-     * Updates the user's LastLogin timestamp, sets their state to
-     * "logged in" and calls RunData.setUser() .  If the user cannot
-     * be authenticated (database error?) the user is assigned
-     * anonymous status and, if tr.props contains a TEMPLATE_LOGIN,
-     * the screenTemplate is set to this, otherwise the screen is set
-     * to SCREEN_LOGIN
-     *
-     * @param     pipelineData Turbine information.
-     * @exception TurbineSecurityException could not get instance of the
-     *            anonymous user
-     */
-    public void doPerform(PipelineData pipelineData)
-            throws TurbineSecurityException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);                
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/LogoutUser.java b/src/java/org/apache/turbine/modules/actions/LogoutUser.java
deleted file mode 100644
index bd896d6..0000000
--- a/src/java/org/apache/turbine/modules/actions/LogoutUser.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Action;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This action removes a user from the session. It makes sure to save
- * the User object in the session.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class LogoutUser
-        extends Action
-{
-    /**
-     * Clears the RunData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anthing except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception TurbineSecurityException a problem occured in the security
-     *            service.
-     */
-    public void doPerform(RunData data)
-            throws TurbineSecurityException
-    {
-        User user = data.getUser();
-
-        if (!TurbineSecurity.isAnonymousUser(user))
-        {
-            // Make sure that the user has really logged in...
-            if (!user.hasLoggedIn())
-            {
-                return;
-            }
-
-            user.setHasLoggedIn(Boolean.FALSE);
-            TurbineSecurity.saveUser(user);
-        }
-
-        Configuration conf = Turbine.getConfiguration();
-
-        data.setMessage(conf.getString(TurbineConstants.LOGOUT_MESSAGE));
-
-        // This will cause the acl to be removed from the session in
-        // the Turbine servlet code.
-        data.setACL(null);
-
-        // Retrieve an anonymous user.
-        data.setUser(TurbineSecurity.getAnonymousUser());
-        data.save();
-
-        // In the event that the current screen or related navigations
-        // require acl info, we cannot wait for Turbine to handle
-        // regenerating acl.
-        data.getSession().removeAttribute(AccessControlList.SESSION_KEY);
-
-        // If this action name is the value of action.logout then we are
-        // being run before the session validator, so we don't need to
-        // set the screen (we assume that the session validator will handle
-        // that). This is basically still here simply to preserve old behaviour
-        // - it is recommended that action.logout is set to "LogoutUser" and
-        // that the session validator does handle setting the screen/template
-        // for a logged out (read not-logged-in) user.
-        if (!conf.getString(TurbineConstants.ACTION_LOGOUT_KEY,
-                            TurbineConstants.ACTION_LOGOUT_DEFAULT)
-            .equals(TurbineConstants.ACTION_LOGOUT_DEFAULT))
-        {
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-    }
-    
-    /**
-     * Clears the RunData user object back to an anonymous status not
-     * logged in, and with a null ACL.  If the tr.props ACTION_LOGIN
-     * is anthing except "LogoutUser", flow is transfered to the
-     * SCREEN_HOMEPAGE
-     *
-     * If this action name is the value of action.logout then we are
-     * being run before the session validator, so we don't need to
-     * set the screen (we assume that the session validator will handle
-     * that). This is basically still here simply to preserve old behaviour
-     * - it is recommended that action.logout is set to "LogoutUser" and
-     * that the session validator does handle setting the screen/template
-     * for a logged out (read not-logged-in) user.
-     *
-     * @param data Turbine information.
-     * @exception TurbineSecurityException a problem occured in the security
-     *            service.
-     */
-    public void doPerform(PipelineData pipelineData)
-            throws TurbineSecurityException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);                
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/actions/VelocityAction.java b/src/java/org/apache/turbine/modules/actions/VelocityAction.java
deleted file mode 100644
index 4b3d603..0000000
--- a/src/java/org/apache/turbine/modules/actions/VelocityAction.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.screens.TemplateScreen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.velocity.VelocityActionEvent;
-import org.apache.velocity.context.Context;
-
-/**
- * This class provides a convenience methods for Velocity Actions
- * to use. Since this class is abstract, it should only be extended
- * and not used directly.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class VelocityAction extends VelocityActionEvent
-{
-  /**
-   * You SHOULD NOT override this method and implement it in your
-   * action.
-   * @deprecated Use PipelineData version instead.
-   * @param data Turbine information.
-   * @throws Exception a generic exception.
-   */
-  public void doPerform(RunData data)
-      throws Exception
-  {
-    doPerform(data, getContext(data));
-  }
-
-  /**
-   * You SHOULD NOT override this method and implement it in your
-   * action.
-   *
-   * @param data Turbine information.
-   * @throws Exception a generic exception.
-   */
-  public void doPerform(PipelineData pipelineData)
-      throws Exception
-  {
-      doPerform(pipelineData, getContext(pipelineData));
-  }
-
-  
-  /**
-   * Initialize the module.
-   * 
-   * @throws Exception a generic exception.
-   */
-    public void initialize()
-        throws Exception
-    {
-        initialized = true;
-    }
-
-  /**
-   * You SHOULD override this method and implement it in your
-   * action.
-   * @deprecated Use PipelineData version instead.
-   * @param data Turbine information.
-   * @param context Context for web pages.
-   * @throws Exception a generic exception.
-   */
-  public abstract void doPerform(RunData data,
-                   Context context)
-      throws Exception;
-
-  /**
-   * You SHOULD override this method and implement it in your
-   * action.
-   * 
-   * This should become abstract when the RunData version is 
-   * removed. For compatibility reasons this method will default
-   * to using the RunData method unles it is overidden, which it
-   * should be.
-   * 
-   * @param data Turbine information.
-   * @param context Context for web pages.
-   * @throws Exception a generic exception.
-   */
-  public void doPerform(PipelineData pipelineData,
-                   Context context)
-      throws Exception
-  {
-      RunData data = (RunData) getRunData(pipelineData);
-      doPerform(data, context);
-  }
-
-  
-  /**
-   * Sets up the context and then calls super.perform(); thus,
-   * subclasses don't have to worry about getting a context
-   * themselves!  If a subclass throws an exception then depending
-   * on whether action.event.bubbleexception is true, then it bubbles
-   * it farther up, or traps it there.
-   *
-   * @deprecated Use PipelineData version instead.
-   * @param data Turbine information.
-   * @throws Exception a generic exception.
-   */
-  protected void perform(RunData data)
-      throws Exception
-  {
-    try {
-      super.perform(data);
-    }
-    catch (Exception e){
-      if(bubbleUpException){
-      throw e;
-      }
-
-    }
-  }
-
-  /**
-   * Sets up the context and then calls super.perform(); thus,
-   * subclasses don't have to worry about getting a context
-   * themselves!  If a subclass throws an exception then depending
-   * on whether action.event.bubbleexception is true, then it bubbles
-   * it farther up, or traps it there.
-   *
-   * @param data Turbine information.
-   * @throws Exception a generic exception.
-   */
-  protected void perform(PipelineData pipelineData)
-      throws Exception
-  {
-    try {
-      super.perform(pipelineData);
-    }
-    catch (Exception e){
-      if(bubbleUpException){
-      throw e;
-      }
-
-    }
-  }
-
-  
-  
-  /**
-   * This method is used when you want to short circuit an Action
-   * and change the template that will be executed next.
-   *
-   * @deprecated Use PipelineData version instead.
-   * @param data Turbine information.
-   * @param template The template that will be executed next.
-   */
-  public void setTemplate(RunData data,
-              String template)
-  {
-    TemplateScreen.setTemplate(data, template);
-  }
-
-  /**
-   * This method is used when you want to short circuit an Action
-   * and change the template that will be executed next.
-   *
-   * @param data Turbine information.
-   * @param template The template that will be executed next.
-   */
-  public void setTemplate(PipelineData pipelineData,
-              String template)
-  {
-      TemplateScreen.setTemplate(pipelineData, template);
-  }
-
-  
-  
-  /**
-   * Return the Context needed by Velocity.
-   *
-   * @deprecated Use PipelineData version instead.
-   * @param data Turbine information.
-   * @return Context, a context for web pages.
-   */
-  protected Context getContext(RunData data)
-  {
-    return TurbineVelocity.getContext(data);
-  }
-  
-  /**
-   * Return the Context needed by Velocity.
-   *
-   * @param data Turbine information.
-   * @return Context, a context for web pages.
-   */
-  protected Context getContext(PipelineData pipelineData)
-  {
-      return TurbineVelocity.getContext(pipelineData);
-  }
-
-}
diff --git a/src/java/org/apache/turbine/modules/actions/VelocitySecureAction.java b/src/java/org/apache/turbine/modules/actions/VelocitySecureAction.java
deleted file mode 100644
index 0cbe6bc..0000000
--- a/src/java/org/apache/turbine/modules/actions/VelocitySecureAction.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.apache.turbine.modules.actions;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * VelocitySecure action.
- *
- * Always performs a Security Check that you've defined before
- * executing the doBuildtemplate().  You should extend this class and
- * add the specific security check needed.  If you have a number of
- * screens that need to perform the same check, you could make a base
- * screen by extending this class and implementing the isAuthorized().
- * Then each action that needs to perform the same check could extend
- * your base action.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class VelocitySecureAction extends VelocityAction
-{
-    /**
-     * Implement this to add information to the context.
-     *
-     * @deprecated Use the PipelineData version instead.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @throws Exception a generic exception.
-     */
-    public abstract void doPerform(RunData data, Context context)
-            throws Exception;
-
-    /**
-     * Implement this to add information to the context.
-     * Should revert to abstract when RunData has gone.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @throws Exception a generic exception.
-     */
-    public void doPerform(PipelineData pipelineData, Context context)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data, context);
-    }
-
-    
-    /**
-     * This method overrides the method in WebMacroSiteAction to
-     * perform a security check first.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    protected void perform(RunData data) throws Exception
-    {
-        if (isAuthorized(data))
-        {
-            super.perform(data);
-        }
-    }
-    
-    /**
-     * This method overrides the method in WebMacroSiteAction to
-     * perform a security check first.
-     *
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    protected void perform(PipelineData pipelineData) throws Exception
-    {
-        if (isAuthorized(pipelineData))
-        {
-            super.perform(pipelineData);
-        }
-    }
-
-    
-    
-
-    /**
-     * Implement this method to perform the security check needed.
-     * You should set the template in this method that you want the
-     * user to be sent to if they're unauthorized.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return True if the user is authorized to access the screen.
-     * @throws Exception a generic exception.
-     */
-    protected abstract boolean isAuthorized(RunData data)
-            throws Exception;
-    
-    /**
-     * Implement this method to perform the security check needed.
-     * You should set the template in this method that you want the
-     * user to be sent to if they're unauthorized.
-     * Should revert to abstract when RunData has gone.
-     * @param data Turbine information.
-     * @return True if the user is authorized to access the screen.
-     * @throws Exception a generic exception.
-     */
-    protected boolean isAuthorized(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return isAuthorized(data);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/actions/package.html b/src/java/org/apache/turbine/modules/actions/package.html
deleted file mode 100644
index 1900402..0000000
--- a/src/java/org/apache/turbine/modules/actions/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Action class implementations.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/actions/sessionvalidator/DefaultSessionValidator.java b/src/java/org/apache/turbine/modules/actions/sessionvalidator/DefaultSessionValidator.java
deleted file mode 100644
index f0c34de..0000000
--- a/src/java/org/apache/turbine/modules/actions/sessionvalidator/DefaultSessionValidator.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.apache.turbine.modules.actions.sessionvalidator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The SessionValidator attempts to retrieve the User object from the
- * Servlet API session that is associated with the request.  If the
- * data cannot be retrieved, it is handled here.  If the user has not
- * been marked as being logged into the system, the user is rejected
- * and the screen is set to the screen.homepage value in
- * TurbineResources.properties.
- *
- * <p>
- *
- * Other systems generally have a database table which stores this
- * information, but we take advantage of the Servlet API here to save
- * a hit to the database for each and every connection that a user
- * makes.
- *
- * <p>
- *
- * This action is special in that it should only be executed by the
- * Turbine servlet.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultSessionValidator
-    extends SessionValidator
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DefaultSessionValidator.class);
-
-    /**
-     * Execute the action.  The default is to populate the RunData
-     * object and, if the user is unknown, to force a login screen (as
-     * set in the tr.props).
-     *
-     * @deprecated Use PipelineData version instead.
-     * @see org.apache.turbine.modules.screens.error.InvalidState
-     * @param data Turbine RunData context information.
-     * @throws TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(RunData data)
-            throws TurbineException
-    {
-        Configuration conf = Turbine.getConfiguration();
-
-        // Pull user from session.
-        data.populate();
-
-        // The user may have not logged in, so create a "guest/anonymous" user.
-        if (data.getUser() == null)
-        {
-            log.debug("Fixing up empty User Object!");
-            data.setUser(TurbineSecurity.getAnonymousUser());
-            data.save();
-        }
-
-        // Make sure the User has logged into the system.
-        if (!data.getUser().hasLoggedIn())
-        {
-            // only set the message if nothing else has already set it
-            // (e.g. the LogoutUser action).
-            if (StringUtils.isEmpty(data.getMessage()))
-            {
-                data.setMessage(conf.getString(TurbineConstants.LOGIN_MESSAGE));
-            }
-
-            // set the screen to be the login page
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_LOGIN));
-
-            // We're not doing any actions buddy! (except action.login which
-            // will have been performed already)
-            data.setAction(null);
-        }
-
-        if (!data.hasScreen())
-        {
-            data.setMessage(conf.getString(
-                    TurbineConstants.LOGIN_MESSAGE_NOSCREEN));
-            data.setScreen(conf.getString(TurbineConstants.SCREEN_HOMEPAGE));
-        }
-
-        if (data.getParameters().containsKey("_session_access_counter"))
-        {
-            // See comments in screens.error.InvalidState.
-            if (data.getParameters().getInt("_session_access_counter") 
-                    < (((Integer) data.getUser().getTemp(
-                    "_session_access_counter")).intValue() - 1))
-            {
-                data.getUser().setTemp("prev_screen", data.getScreen());
-                data.getUser().setTemp("prev_parameters", data.getParameters());
-                data.setScreen(conf.getString(
-                        TurbineConstants.SCREEN_INVALID_STATE));
-                data.setAction("");
-            }
-        }
-    }
-    
-    /**
-     * Execute the action.  The default is to populate the RunData
-     * object and, if the user is unknown, to force a login screen (as
-     * set in the tr.props).
-     *
-     * @see org.apache.turbine.modules.screens.error.InvalidState
-     * @param pipelineData Turbine PipelineData context information.
-     * @throws TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(PipelineData pipelineData)
-            throws TurbineException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/sessionvalidator/SessionValidator.java b/src/java/org/apache/turbine/modules/actions/sessionvalidator/SessionValidator.java
deleted file mode 100644
index 0988ed6..0000000
--- a/src/java/org/apache/turbine/modules/actions/sessionvalidator/SessionValidator.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.apache.turbine.modules.actions.sessionvalidator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.Action;
-
-/**
- * The SessionValidator attempts to retrive the User object from the
- * Servlet API session that is associated with the request.  If the
- * data cannot be retrieved, it is handled here.  If the user has not
- * been marked as being logged into the system, the user is rejected
- * and the screen is set to the screen.homepage value in
- * TurbineResources.properties.
- *
- * <p>
- *
- * Other systems generally have a database table which stores this
- * information, but we take advantage of the Servlet API here to save
- * a hit to the database for each and every connection that a user
- * makes.
- *
- * <p>
- *
- * This action is special in that it should only be executed by the
- * Turbine servlet.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public abstract class SessionValidator extends Action
-{
-}
diff --git a/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSecureSessionValidator.java b/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSecureSessionValidator.java
deleted file mode 100644
index 2567a1b..0000000
--- a/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSecureSessionValidator.java
+++ /dev/null
@@ -1,238 +0,0 @@
-package org.apache.turbine.modules.actions.sessionvalidator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * SessionValidator that requires login for use with Template Services
- * like Velocity or WebMacro.
- *
- * <br>
- *
- * Templating services requires a different Session Validator
- * because of the way it handles screens.  If you use the WebMacro or
- * Velocity Service with the DefaultSessionValidator, users will be able to
- * bypass login by directly addressing the template using
- * template/index.wm.  This is because the Page class looks for the
- * keyword "template" in the Path information and if it finds it will
- * reset the screen using it's lookup mechanism and thereby bypass
- * Login.
- *
- * Note that you will need to set the template.login property to the
- * login template.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TemplateSecureSessionValidator
-    extends SessionValidator
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(
-            TemplateSecureSessionValidator.class);
-
-    /**
-     * doPerform is virtually identical to DefaultSessionValidator
-     * except that it calls template methods instead of bare screen
-     * methods. For example, it uses <code>setScreenTemplate</code> to
-     * load the tr.props TEMPLATE_LOGIN instead of the default's
-     * setScreen to TurbineConstants.SCREEN_LOGIN.
-     * @deprecated Use PipelineData version instead.
-     * @see DefaultSessionValidator
-     * @param data Turbine information.
-     * @throws TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(RunData data)
-            throws TurbineException
-    {
-        Configuration conf = Turbine.getConfiguration();
-
-        // Pull user from session.
-        data.populate();
-
-        // The user may have not logged in, so create a "guest/anonymous" user.
-        if (data.getUser() == null)
-        {
-            log.debug("Fixing up empty User Object!");
-            data.setUser(TurbineSecurity.getAnonymousUser());
-            data.save();
-        }
-
-        // This is the secure sessionvalidator, so user must be logged in.
-        if (!data.getUser().hasLoggedIn())
-        {
-            log.debug("User is not logged in!");
-
-            // only set the message if nothing else has already set it
-            // (e.g. the LogoutUser action).
-            if (StringUtils.isEmpty(data.getMessage()))
-            {
-                data.setMessage(conf.getString(TurbineConstants.LOGIN_MESSAGE));
-            }
-
-            // Set the screen template to the login page.
-            String loginTemplate =
-                conf.getString(TurbineConstants.TEMPLATE_LOGIN);
-
-            log.debug("Sending User to the Login Screen (" 
-                    + loginTemplate + ")");
-            data.getTemplateInfo().setScreenTemplate(loginTemplate);
-
-            // We're not doing any actions buddy! (except action.login which
-            // will have been performed already)
-            data.setAction(null);
-        }
-
-        log.debug("Login Check finished!");
-
-        // Make sure we have some way to return a response.
-        if (!data.hasScreen() && StringUtils.isEmpty(
-                data.getTemplateInfo().getScreenTemplate()))
-        {
-            String template = conf.getString(
-                    TurbineConstants.TEMPLATE_HOMEPAGE);
-
-            if (StringUtils.isNotEmpty(template))
-            {
-                data.getTemplateInfo().setScreenTemplate(template);
-            }
-            else
-            {
-                data.setScreen(conf.getString(
-                        TurbineConstants.SCREEN_HOMEPAGE));
-            }
-        }
-
-        // The session_access_counter can be placed as a hidden field in
-        // forms.  This can be used to prevent a user from using the
-        // browsers back button and submitting stale data.
-        // FIXME!! a template needs to be written to use this with templates.
-
-        if (data.getParameters().containsKey("_session_access_counter")
-                && !TurbineSecurity.isAnonymousUser(data.getUser()))
-        {
-            // See comments in screens.error.InvalidState.
-            if (data.getParameters().getInt("_session_access_counter") 
-                    < (((Integer) data.getUser().getTemp(
-                    "_session_access_counter")).intValue() - 1))
-            {
-                if (data.getTemplateInfo().getScreenTemplate() != null)
-                {
-                    data.getUser().setTemp("prev_template",
-                            data.getTemplateInfo().getScreenTemplate()
-                            .replace('/', ','));
-                    data.getTemplateInfo().setScreenTemplate(conf.getString(
-                            TurbineConstants.TEMPLATE_INVALID_STATE));
-                }
-                else
-                {
-                    data.getUser().setTemp("prev_screen",
-                                           data.getScreen().replace('/', ','));
-                    data.setScreen(conf.getString(
-                            TurbineConstants.SCREEN_INVALID_STATE));
-                }
-                data.getUser().setTemp("prev_parameters", data.getParameters());
-                data.setAction("");
-            }
-        }
-
-        // We do not want to allow both a screen and template parameter.
-        // The template parameter is dominant.
-        if (data.getTemplateInfo().getScreenTemplate() != null)
-        {
-            data.setScreen(null);
-        }
-    }
-    
-    /**
-     * doPerform is virtually identical to DefaultSessionValidator
-     * except that it calls template methods instead of bare screen
-     * methods. For example, it uses <code>setScreenTemplate</code> to
-     * load the tr.props TEMPLATE_LOGIN instead of the default's
-     * setScreen to TurbineConstants.SCREEN_LOGIN.
-     *
-     * @see DefaultSessionValidator
-     * @param pipelineData Turbine information.
-     * @throws TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(PipelineData pipelineData)
-    throws TurbineException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSessionValidator.java b/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSessionValidator.java
deleted file mode 100644
index e74c867..0000000
--- a/src/java/org/apache/turbine/modules/actions/sessionvalidator/TemplateSessionValidator.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.apache.turbine.modules.actions.sessionvalidator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * SessionValidator for use with the Template Service, the
- * TemplateSessionValidator is virtually identical to the
- * TemplateSecureValidator except that it does not transfer to the
- * login page when it detects a null user (or a user not logged in).
- *
- * <p>The Template Service requires a different Session Validator
- * because of the way it handles screens.
- *
- * <p>Note that you will need to set the template.login property to the
- * login template.
- *
- * @see TemplateSecureSessionValidator
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TemplateSessionValidator
-    extends SessionValidator
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplateSessionValidator.class);
-
-    /**
-     * Execute the action.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(RunData data)
-            throws TurbineException
-    {
-        Configuration conf = Turbine.getConfiguration();
-
-        // Pull user from session.
-        data.populate();
-
-        // The user may have not logged in, so create a "guest/anonymous" user.
-        if (data.getUser() == null)
-        {
-            log.debug("Fixing up empty User Object!");
-            data.setUser(TurbineSecurity.getAnonymousUser());
-            data.save();
-        }
-
-        // make sure we have some way to return a response
-        if (!data.hasScreen() && StringUtils.isEmpty(
-                data.getTemplateInfo().getScreenTemplate()))
-        {
-            String template = conf.getString(
-                    TurbineConstants.TEMPLATE_HOMEPAGE);
-
-            if (StringUtils.isNotEmpty(template))
-            {
-                data.getTemplateInfo().setScreenTemplate(template);
-            }
-            else
-            {
-                data.setScreen(conf.getString(
-                        TurbineConstants.SCREEN_HOMEPAGE));
-            }
-        }
-        // the session_access_counter can be placed as a hidden field in
-        // forms.  This can be used to prevent a user from using the
-        // browsers back button and submitting stale data.
-        else if (data.getParameters().containsKey("_session_access_counter")
-                && !TurbineSecurity.isAnonymousUser(data.getUser()))
-        {
-            // See comments in screens.error.InvalidState.
-            if (data.getParameters().getInt("_session_access_counter") 
-                    < (((Integer) data.getUser().getTemp(
-                    "_session_access_counter")).intValue() - 1))
-            {
-                if (data.getTemplateInfo().getScreenTemplate() != null)
-                {
-                    data.getUser().setTemp("prev_template",
-                            data.getTemplateInfo().getScreenTemplate()
-                            .replace('/', ','));
-                    data.getTemplateInfo().setScreenTemplate(conf.getString(
-                            TurbineConstants.TEMPLATE_INVALID_STATE));
-                }
-                else
-                {
-                    data.getUser().setTemp("prev_screen",
-                                           data.getScreen().replace('/', ','));
-                    data.setScreen(conf.getString(
-                            TurbineConstants.SCREEN_INVALID_STATE));
-                }
-                data.getUser().setTemp("prev_parameters", data.getParameters());
-                data.setAction("");
-            }
-        }
-
-        // we do not want to allow both a screen and template parameter.
-        // The template parameter is dominant.
-        if (data.getTemplateInfo().getScreenTemplate() != null)
-        {
-            data.setScreen(null);
-        }
-    }
-    
-    /**
-     * Execute the action.
-     *
-     * @param pipelineData Turbine information.
-     * @exception TurbineException The anonymous user could not be obtained
-     *         from the security service
-     */
-    public void doPerform(PipelineData pipelineData)
-    throws TurbineException
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doPerform(data);
-    }
-
-
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/actions/sessionvalidator/package.html b/src/java/org/apache/turbine/modules/actions/sessionvalidator/package.html
deleted file mode 100644
index 0be8755..0000000
--- a/src/java/org/apache/turbine/modules/actions/sessionvalidator/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Session validator classes to be used with Turbine apps that use security.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/layouts/DirectResponseLayout.java b/src/java/org/apache/turbine/modules/layouts/DirectResponseLayout.java
deleted file mode 100644
index 7a57dcc..0000000
--- a/src/java/org/apache/turbine/modules/layouts/DirectResponseLayout.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.apache.turbine.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.Layout;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This layout allows an action to manipulate the ServletOutputStream directly. 
- * It requires that data.declareDirectResponse() has been called to indicate 
- * that the OutputStream is being handled elsewhere.
- *
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DirectResponseLayout extends Layout
-{
-    /**
-     * Ensures that a direct response has been declared.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception TurbineException if a direct response has not been declared.
-     */
-    public void doBuild(RunData data)
-        throws Exception
-    {
-        if (!data.isOutSet())
-        {
-            throw new TurbineException(
-                "data.declareDirectResponse() has not been called");
-        }
-    }
-    
-    /**
-     * Ensures that a direct response has been declared.
-     *
-     * @param data Turbine information.
-     * @exception TurbineException if a direct response has not been declared.
-     */
-    public void doBuild(PipelineData pipelineData)
-    throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doBuild(data);
-    }
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/layouts/JspLayout.java b/src/java/org/apache/turbine/modules/layouts/JspLayout.java
deleted file mode 100644
index 2ed1925..0000000
--- a/src/java/org/apache/turbine/modules/layouts/JspLayout.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.apache.turbine.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Layout;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.jsp.TurbineJsp;
-import org.apache.turbine.services.jsp.util.JspNavigation;
-import org.apache.turbine.services.jsp.util.JspScreenPlaceholder;
-import org.apache.turbine.util.RunData;
-
-/**
- * This Layout module allows JSP templates to be used as layouts. Since
- * dynamic content is supposed to be primarily located in screens and
- * navigations there should be relatively few reasons to subclass this Layout.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class JspLayout
-    extends Layout
-{
-    /** The prefix for lookup up layout pages */
-    private String prefix = TurbineConstants.LAYOUT_PREFIX + "/";
-
-    /**
-     * Method called by LayoutLoader.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data RunData
-     * @throws Exception generic exception
-     */
-    public void doBuild(RunData data)
-        throws Exception
-    {
-        data.getResponse().setContentType("text/html");
-        data.declareDirectResponse();
-
-        // variable to reference the screen in the layout template
-        data.getRequest()
-            .setAttribute(TurbineConstants.SCREEN_PLACEHOLDER,
-                          new JspScreenPlaceholder(data));
-
-        // variable to reference the navigations in the layout template
-        data.getRequest().setAttribute(
-            TurbineConstants.NAVIGATION_PLACEHOLDER,
-            new JspNavigation(data));
-
-        // Grab the layout template set in the TemplatePage.
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        TurbineJsp.handleRequest(data, prefix + templateName, true);
-    }
-    
-    /**
-     * Method called by LayoutLoader.
-     *
-     * @param data PipelineData
-     * @throws Exception generic exception
-     */
-    public void doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        data.getResponse().setContentType("text/html");
-        data.declareDirectResponse();
-
-        // variable to reference the screen in the layout template
-        data.getRequest()
-            .setAttribute(TurbineConstants.SCREEN_PLACEHOLDER,
-                          new JspScreenPlaceholder(data));
-
-        // variable to reference the navigations in the layout template
-        data.getRequest().setAttribute(
-            TurbineConstants.NAVIGATION_PLACEHOLDER,
-            new JspNavigation(data));
-
-        // Grab the layout template set in the TemplatePage.
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        TurbineJsp.handleRequest(pipelineData, prefix + templateName, true);
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/layouts/VelocityDirectLayout.java b/src/java/org/apache/turbine/modules/layouts/VelocityDirectLayout.java
deleted file mode 100644
index ca5bc1e..0000000
--- a/src/java/org/apache/turbine/modules/layouts/VelocityDirectLayout.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.apache.turbine.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Layout;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateNavigation;
-import org.apache.turbine.util.template.TemplateScreen;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This Layout module allows Velocity templates
- * to be used as layouts. It will stream directly the output of
- * the layout and navigation templates to the output writer without
- * using a screen. Use this if you have a large page to output
- * and won't buffer it in the memory.
- *
- * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityDirectLayout
-    extends Layout
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(VelocityDirectLayout.class);
-
-    /** The prefix for lookup up layout pages */
-    private String prefix = TurbineConstants.LAYOUT_PREFIX + "/";
-
-    /**
-     * Method called by LayoutLoader.
-     *
-     * @deprecated Use the PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public void doBuild(RunData data)
-        throws Exception
-    {
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(data);
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, 
-                    new TemplateScreen(data));
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        // Set the locale and content type
-        data.getResponse().setLocale(data.getLocale());
-        data.getResponse().setContentType(data.getContentType());
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Finally, generate the layout template and send it to the browser
-        TurbineVelocity.handleRequest(context,
-                prefix + templateName, data.getOut());
-    }
-    
-    /**
-     * Method called by LayoutLoader.
-     *
-     *
-     * @param data PipelineData
-     * @throws Exception generic exception
-     */
-    public void doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(pipelineData);
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, 
-                    new TemplateScreen(data));
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        // Set the locale and content type
-        data.getResponse().setLocale(data.getLocale());
-        data.getResponse().setContentType(data.getContentType());
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Finally, generate the layout template and send it to the browser
-        TurbineVelocity.handleRequest(context,
-                prefix + templateName, data.getOut());
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/layouts/VelocityOnlyLayout.java b/src/java/org/apache/turbine/modules/layouts/VelocityOnlyLayout.java
deleted file mode 100644
index f16d87b..0000000
--- a/src/java/org/apache/turbine/modules/layouts/VelocityOnlyLayout.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.apache.turbine.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Layout;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateNavigation;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This Layout module allows Velocity templates to be used as layouts.
- * Since dynamic content is supposed to be primarily located in
- * screens and navigations there should be relatively few reasons to
- * subclass this Layout.
- *
- * To get the same functionality as with VelocityECSLayout, you can use two 
- * supplied VelocityMacros, TurbineHtmlHead and TurbineHtmlBodyAttributes
- * in your templates. These are used to put HtmlPageAttributes into a page
- * before rendering.
- *
- * Use these macros should be used in the Layout template like this:
- *
- * ... set things like style sheets, scripts here.
- * &lt;html&gt;
- * #TurbineHtmlHead()
- * &lt;body #TurbineHtmlBodyAttributes() &gt;
- *  .... your body information
- * &lt;/body&gt;
- * &lt;/html&gt;
- *
- * As the layout template is rendered _after_ the screen template, you
- * can of course, add information to the $page tool in your screen template. 
- * This will be added correctly to the &lt;head&gt;...&lt;/head&gt; and
- * &lt;body&gt; tags.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityOnlyLayout
-    extends Layout
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(VelocityOnlyLayout.class);
-
-    /** The prefix for lookup up layout pages */
-    private String prefix = TurbineConstants.LAYOUT_PREFIX + "/";
-
-    /**
-     * Build the layout.  Also sets the ContentType and Locale headers
-     * of the HttpServletResponse object.
-     * @deprecated Use PipelineData version
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public void doBuild(RunData data)
-        throws Exception
-    {
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(data);
-
-        String screenName = data.getScreen();
-
-        log.debug("Loading Screen " + screenName);
-
-        // First, generate the screen and put it in the context so
-        // we can grab it the layout template.
-        ConcreteElement results =
-            ScreenLoader.getInstance().eval(data, screenName);
-
-        String returnValue = (results == null) ? "" : results.toString();
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, returnValue);
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        // Set the locale and content type
-        data.getResponse().setLocale(data.getLocale());
-        data.getResponse().setContentType(data.getContentType());
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Finally, generate the layout template and send it to the browser
-        data.getOut().print(TurbineVelocity
-                .handleRequest(context, prefix + templateName));
-    }
-    
-    /**
-     * Build the layout.  Also sets the ContentType and Locale headers
-     * of the HttpServletResponse object.
-     *
-     *
-     * @param data PipelineData
-     * @throws Exception generic exception
-     */
-    public void doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(pipelineData);
-
-        String screenName = data.getScreen();
-
-        log.debug("Loading Screen " + screenName);
-
-        // First, generate the screen and put it in the context so
-        // we can grab it the layout template.
-        ConcreteElement results =
-            ScreenLoader.getInstance().eval(data, screenName);
-
-        String returnValue = (results == null) ? "" : results.toString();
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, returnValue);
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        // Set the locale and content type
-        data.getResponse().setLocale(data.getLocale());
-        data.getResponse().setContentType(data.getContentType());
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Finally, generate the layout template and send it to the browser
-        data.getOut().print(TurbineVelocity
-                .handleRequest(context, prefix + templateName));
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/layouts/VelocityXslLayout.java b/src/java/org/apache/turbine/modules/layouts/VelocityXslLayout.java
deleted file mode 100644
index 24d90c1..0000000
--- a/src/java/org/apache/turbine/modules/layouts/VelocityXslLayout.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.apache.turbine.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.StringReader;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Layout;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.services.xslt.TurbineXSLT;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.template.TemplateNavigation;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This Layout module allows Velocity XML templates to be used as layouts.
- * <br><br>
- * Once the (XML) screen and navigation templates have been inserted into
- * the layout template the result is transformed with a XSL stylesheet.
- * The stylesheet (with the same name than the screen template) is loaded
- * and executed by the XSLT service, so it is important that you correctly
- * set up your XSLT service.  If the named stylsheet does not exist the
- * default.xsl stylesheet is executed.  If default.xsl does not exist
- * the XML is merely echoed.
- * <br><br>
- * Since dynamic content is supposed to be primarily located in
- * screens and navigations there should be relatively few reasons to
- * subclass this Layout.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class VelocityXslLayout extends Layout
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(VelocityXslLayout.class);
-
-    /** The prefix for lookup up layout pages */
-    private String prefix = TurbineConstants.LAYOUT_PREFIX + "/";
-
-    /**
-     * Build the layout.  Also sets the ContentType and Locale headers
-     * of the HttpServletResponse object.
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public void doBuild(RunData data)
-        throws Exception
-    {
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(data);
-
-        data.getResponse().setContentType("text/html");
-
-        String screenName = data.getScreen();
-
-        log.debug("Loading Screen " + screenName);
-
-        // First, generate the screen and put it in the context so
-        // we can grab it the layout template.
-        ConcreteElement results =
-            ScreenLoader.getInstance().eval(data, screenName);
-
-        String returnValue = (results == null) ? "" : results.toString();
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, returnValue);
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Now, generate the layout template.
-        String temp = TurbineVelocity.handleRequest(context,
-                prefix + templateName);
-
-        // Finally we do a transformation and send the result
-        // back to the browser
-        TurbineXSLT.transform(
-            data.getTemplateInfo().getScreenTemplate(),
-                new StringReader(temp), data.getOut());
-    }
-    
-    /**
-     * Build the layout.  Also sets the ContentType and Locale headers
-     * of the HttpServletResponse object.
-     *
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    public void doBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        // Get the context needed by Velocity.
-        Context context = TurbineVelocity.getContext(pipelineData);
-
-        data.getResponse().setContentType("text/html");
-
-        String screenName = data.getScreen();
-
-        log.debug("Loading Screen " + screenName);
-
-        // First, generate the screen and put it in the context so
-        // we can grab it the layout template.
-        ConcreteElement results =
-            ScreenLoader.getInstance().eval(pipelineData, screenName);
-
-        String returnValue = (results == null) ? "" : results.toString();
-
-        // variable for the screen in the layout template
-        context.put(TurbineConstants.SCREEN_PLACEHOLDER, returnValue);
-
-        // variable to reference the navigation screen in the layout template
-        context.put(TurbineConstants.NAVIGATION_PLACEHOLDER, 
-                    new TemplateNavigation(data));
-
-        // Grab the layout template set in the VelocityPage.
-        // If null, then use the default layout template
-        // (done by the TemplateInfo object)
-        String templateName = data.getTemplateInfo().getLayoutTemplate();
-
-        log.debug("Now trying to render layout " + templateName);
-
-        // Now, generate the layout template.
-        String temp = TurbineVelocity.handleRequest(context,
-                prefix + templateName);
-
-        // Finally we do a transformation and send the result
-        // back to the browser
-        TurbineXSLT.transform(
-            data.getTemplateInfo().getScreenTemplate(),
-                new StringReader(temp), data.getOut());
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/layouts/package.html b/src/java/org/apache/turbine/modules/layouts/package.html
deleted file mode 100644
index bf7be8b..0000000
--- a/src/java/org/apache/turbine/modules/layouts/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Layout class implementations.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/navigations/BaseJspNavigation.java b/src/java/org/apache/turbine/modules/navigations/BaseJspNavigation.java
deleted file mode 100644
index 5b15237..0000000
--- a/src/java/org/apache/turbine/modules/navigations/BaseJspNavigation.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.apache.turbine.modules.navigations;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.jsp.TurbineJsp;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * Base JSP navigation that should be subclassed by Navigation that want to
- * use JSP.  Subclasses should override the doBuildTemplate() method.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class BaseJspNavigation
-        extends TemplateNavigation
-{
-    /** The prefix for lookup up navigation pages */
-    private String prefix = TurbineConstants.NAVIGATION_PREFIX + "/";
-
-    /**
-     * Method to be overidden by subclasses to include data in beans, etc.
-     * @deprecated Use PipelineData version instead.
-     * @param data the Rundata object
-     * @throws Exception a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-        throws Exception
-    {
-    }
-
-    /**
-     * Method to be overidden by subclasses to include data in beans, etc.
-     *
-     * @param data the PipelineData object
-     * @throws Exception a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-    }
-
-    
-    
-    /**
-     * Method that sets up beans and forward the request to the JSP.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data the Rundata object
-     * @return null - the JSP sends the information
-     * @throws Exception a generic exception.
-     */
-    public ConcreteElement buildTemplate(RunData data)
-        throws Exception
-    {
-        // get the name of the JSP we want to use
-        String templateName = data.getTemplateInfo().getNavigationTemplate();
-
-        // navigations are used by a layout
-        TurbineJsp.handleRequest(data, prefix + templateName);
-        return null;
-    }
-    
-    /**
-     * Method that sets up beans and forward the request to the JSP.
-     *
-     * @param data the PipelineData object
-     * @return null - the JSP sends the information
-     * @throws Exception a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        // get the name of the JSP we want to use
-        String templateName = data.getTemplateInfo().getNavigationTemplate();
-
-        // navigations are used by a layout
-        TurbineJsp.handleRequest(pipelineData, prefix + templateName);
-        return null;
-    }    
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/navigations/TemplateNavigation.java b/src/java/org/apache/turbine/modules/navigations/TemplateNavigation.java
deleted file mode 100644
index 9afd854..0000000
--- a/src/java/org/apache/turbine/modules/navigations/TemplateNavigation.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.turbine.modules.navigations;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.modules.Navigation;
-import org.apache.turbine.pipeline.PipelineData;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * Base Template Navigation.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class TemplateNavigation
-        extends Navigation
-{
-    /**
-     * WebMacro Navigations extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    protected abstract void doBuildTemplate(RunData data)
-            throws Exception;
-    
-    /**
-     * WebMacro Navigations extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @param data Turbine information.
-     * @throws Exception a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-            throws Exception
-    {
-	    RunData data = (RunData) getRunData(pipelineData);
-	    doBuildTemplate(data);
-    }
-
-
-    /**
-     * This Builds the WebMacro/FreeMarker/etc template.
-     * @deprecated Use PipelineData version
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @throws Exception a generic exception.
-     */
-    public abstract ConcreteElement buildTemplate(RunData data)
-            throws Exception;
-
-    /**
-     * This Builds the WebMacro/FreeMarker/etc template.
-     * Should revert to abstract when RunData goes. 
-     * @param pipelineData Turbine information.
-     * @return A ConcreteElement.
-     * @throws Exception a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-    throws Exception
-	{
-	    RunData data = (RunData) getRunData(pipelineData);
-	    return buildTemplate(data);
-	}    
-
-    /**
-     * Calls doBuildTemplate() and then buildTemplate().
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @throws Exception a generic exception.
-     */
-    protected ConcreteElement doBuild(RunData data)
-            throws Exception
-    {
-        doBuildTemplate(data);
-        return buildTemplate(data);
-    }
-
-    /**
-     * Calls doBuildTemplate() and then buildTemplate().
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @throws Exception a generic exception.
-     */
-    protected ConcreteElement doBuild(PipelineData pipelineData)
-            throws Exception
-    {
-	    RunData data = (RunData) getRunData(pipelineData);
-        return doBuild(data);
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/modules/navigations/VelocityNavigation.java b/src/java/org/apache/turbine/modules/navigations/VelocityNavigation.java
deleted file mode 100644
index d91d922..0000000
--- a/src/java/org/apache/turbine/modules/navigations/VelocityNavigation.java
+++ /dev/null
@@ -1,197 +0,0 @@
-package org.apache.turbine.modules.navigations;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.StringElement;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * VelocityNavigation.  This screen relies on the VelocityPage
- * being set as the default page.  The doBuildTemplate() assumes the
- * user has put the template filename in the RunData parameter and set
- * it to the value of the template file to execute.  Specialized
- * Navigations screens should extend this class and overide the
- * doBuildTemplate( data , context) method.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityNavigation
-        extends TemplateNavigation
-{
-    /** The prefix for lookup up navigation pages */
-    private String prefix = TurbineConstants.NAVIGATION_PREFIX + "/";
-
-    /**
-     * Velocity Navigations extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data,
-                                   Context context)
-            throws Exception
-    {
-    }
-    
-    /**
-     * Velocity Navigations extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData,
-                                   Context context)
-            throws Exception
-    {
-    }
-
-    /**
-     * Needs to be implemented to make TemplateNavigation like us.
-     * The actual method that you should override is the one with the
-     * context in the parameter list.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-            throws Exception
-    {
-        doBuildTemplate(data, TurbineVelocity.getContext(data));
-    }
-
-    
-    /**
-     * Needs to be implemented to make TemplateNavigation like us.
-     * The actual method that you should override is the one with the
-     * context in the parameter list.
-     *
-     * @param pipelineData Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-            throws Exception
-    {
-        doBuildTemplate(pipelineData, TurbineVelocity.getContext(pipelineData));
-    }
-
-    /**
-     * This Builds the Velocity template.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(RunData data)
-            throws Exception
-    {
-        Context context = TurbineVelocity.getContext(data);
-
-        String navigationTemplate = data.getTemplateInfo().getNavigationTemplate();
-        String templateName
-                = TurbineTemplate.getNavigationTemplateName(navigationTemplate);
-
-        StringElement output = new StringElement();
-        output.setFilterState(false);
-        output.addElement(TurbineVelocity
-                .handleRequest(context, prefix + templateName));
-        return output;
-    }
-
-    /**
-     * This Builds the Velocity template.
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = getRunData(pipelineData);
-        Context context = TurbineVelocity.getContext(pipelineData);
-
-        String navigationTemplate = data.getTemplateInfo().getNavigationTemplate();
-        String templateName
-                = TurbineTemplate.getNavigationTemplateName(navigationTemplate);
-
-        StringElement output = new StringElement();
-        output.setFilterState(false);
-        output.addElement(TurbineVelocity
-                .handleRequest(context, prefix + templateName));
-        return output;
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/navigations/package.html b/src/java/org/apache/turbine/modules/navigations/package.html
deleted file mode 100644
index ae03e14..0000000
--- a/src/java/org/apache/turbine/modules/navigations/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Navigation class implementations.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/package.html b/src/java/org/apache/turbine/modules/package.html
deleted file mode 100644
index 66e2b73..0000000
--- a/src/java/org/apache/turbine/modules/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Modules (Action, Screen, Layout, Navigation, Page) classes for the Turbine view.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/pages/DefaultPage.java b/src/java/org/apache/turbine/modules/pages/DefaultPage.java
deleted file mode 100644
index abfac7f..0000000
--- a/src/java/org/apache/turbine/modules/pages/DefaultPage.java
+++ /dev/null
@@ -1,404 +0,0 @@
-package org.apache.turbine.modules.pages;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ecs.Doctype;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.ActionLoader;
-import org.apache.turbine.modules.LayoutLoader;
-import org.apache.turbine.modules.Page;
-import org.apache.turbine.modules.Screen;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * When building sites using templates, Screens need only be defined
- * for templates which require dynamic (database or object) data.
- *
- * <p>
- *
- * This page can be used on sites where the number of Screens can be
- * much less than the number of templates.  The templates can be
- * grouped in directories with common layouts.  Screen modules are
- * then expected to be placed in packages corresponding with the
- * templates' directories and follow a specific naming scheme.
- *
- * <p>
- *
- * The template parameter is parsed and and a Screen whose package
- * matches the templates path and shares the same name minus any
- * extension and beginning with a capital letter is searched for.  If
- * not found, a Screen in a package matching the template's path with
- * name Default is searched for.  If still not found, a Screen with
- * name Default is looked for in packages corresponding to parent
- * directories in the template's path until a match is found.
- *
- * <p>
- *
- * For example if data.getParameters().getString("template") returns
- * /about_us/directions/driving.wm, the search follows
- * about_us.directions.Driving, about_us.directions.Default,
- * about_us.Default, Default, VelocitySiteScreen.
- *
- * <p>
- *
- * Only one Layout module is used, since it is expected that any
- * dynamic content will be placed in navigations and screens.  The
- * layout template to be used is found in a similar way to the Screen.
- * For example the following paths will be searched in the layouts
- * subdirectory: /about_us/directions/driving.wm,
- * /about_us/directions/default.wm, /about_us/default.wm, /default.wm.
- *
- * <p>
- *
- * This approach allows a site with largely static content to be
- * updated and added to regularly by those with little Java
- * experience.
- *
- * <p>
- *
- * The code is an almost a complete clone of the FreeMarkerSitePage
- * written by John McNally.  I've only modified it for Template use.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultPage
-    extends Page
-{
-    /** Logging */
-    protected Log log = LogFactory.getLog(this.getClass());
-
-    /**
-     * Builds the Page.
-     *
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    public void doBuild(RunData data)
-            throws Exception
-    {
-        // Template pages can use this to set up the context, so it is
-        // available to the Action and Screen.  It does nothing here.
-        doBuildBeforeAction(data);
-
-        // If an action has been defined, execute it here.  Actions
-        // can re-define the template definition.
-        if (data.hasAction())
-        {
-            ActionLoader.getInstance().exec(data, data.getAction());
-        }
-
-        // if a redirect was setup in data, don't do anything else
-        if (StringUtils.isNotEmpty(data.getRedirectURI()))
-        {
-            return;
-        }
-
-        // Set the default doctype from the value given in
-        // TurbineResources.properties.
-        setDefaultDoctype(data);
-
-        // Template pages can use this to set up default templates and
-        // associated class modules.  It does nothing here.
-        doBuildAfterAction(data);
-
-        String screenName = data.getScreen();
-
-        log.debug("Building " + screenName);
-
-        // Ask the Screen for its Layout and then execute the Layout.
-        // The Screen can override the getLayout() method to re-define
-        // the Layout depending on data passed in via the
-        // data.parameters object.
-        ScreenLoader sl = ScreenLoader.getInstance();
-        Screen aScreen = sl.getInstance(screenName);
-        String layout = aScreen.getLayout(data);
-
-        // If the Layout has been set to be null, attempt to execute
-        // the Screen that has been defined.
-        if (layout != null)
-        {
-            LayoutLoader.getInstance().exec(data, layout);
-        }
-        else
-        {
-            ScreenLoader.getInstance().exec(data, screenName);
-        }
-
-        // Do any post build actions (overridable by subclasses -
-        // does nothing here).
-        doPostBuild(data);
-    }
-
-    /**
-     * Builds the Page.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    public void doBuild(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        // Template pages can use this to set up the context, so it is
-        // available to the Action and Screen.  It does nothing here.
-        doBuildBeforeAction(pipelineData);
-
-        // If an action has been defined, execute it here.  Actions
-        // can re-define the template definition.
-        if (data.hasAction())
-        {
-            ActionLoader.getInstance().exec(pipelineData, data.getAction());
-        }
-
-        // if a redirect was setup in data, don't do anything else
-        if (StringUtils.isNotEmpty(data.getRedirectURI()))
-        {
-            return;
-        }
-
-        // Set the default doctype from the value given in
-        // TurbineResources.properties.
-        setDefaultDoctype(data);
-
-        // Template pages can use this to set up default templates and
-        // associated class modules.  It does nothing here.
-        doBuildAfterAction(pipelineData);
-
-        String screenName = data.getScreen();
-
-        log.debug("Building " + screenName);
-
-        // Ask the Screen for its Layout and then execute the Layout.
-        // The Screen can override the getLayout() method to re-define
-        // the Layout depending on data passed in via the
-        // data.parameters object.
-        ScreenLoader sl = ScreenLoader.getInstance();
-        Screen aScreen = sl.getInstance(screenName);
-        String layout = aScreen.getLayout(pipelineData);
-
-        // If the Layout has been set to be null, attempt to execute
-        // the Screen that has been defined.
-        if (layout != null)
-        {
-            LayoutLoader.getInstance().exec(pipelineData, layout);
-        }
-        else
-        {
-            ScreenLoader.getInstance().exec(pipelineData, screenName);
-        }
-
-        // Do any post build actions (overridable by subclasses -
-        // does nothing here).
-        doPostBuild(pipelineData);
-    }
-
-    
-    
-    /**
-     * Can be used by template Pages to stuff the Context into the
-     * RunData so that it is available to the Action module and the
-     * Screen module via getContext().  It does nothing here.
-     *
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildBeforeAction(RunData data)
-            throws Exception
-    {
-    }
-
-    /**
-     * Can be overridden by template Pages to set up data needed to
-     * process a template.  It does nothing here.
-     *
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildAfterAction(RunData data)
-            throws Exception
-    {
-    }
-
-    /**
-     * Can be overridden to perform actions when the request is
-     * fully processed. It does nothing here.
-     * @deprecated Use PipelineData version instead
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doPostBuild(RunData data)
-            throws Exception
-    {
-    }
-
-    
-    /**
-     * Can be used by template Pages to stuff the Context into the
-     * RunData so that it is available to the Action module and the
-     * Screen module via getContext().  It does nothing here.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildBeforeAction(PipelineData pipelineData)
-            throws Exception
-    {
-    }
-
-    /**
-     * Can be overridden by template Pages to set up data needed to
-     * process a template.  It does nothing here.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildAfterAction(PipelineData pipelineData)
-            throws Exception
-    {
-    }
-
-    /**
-     * Can be overridden to perform actions when the request is
-     * fully processed. It does nothing here.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doPostBuild(PipelineData pipelineData)
-            throws Exception
-    {
-    }
-
-    
-    
-    /**
-     * Set the default Doctype.  If Doctype is set to null, it will
-     * not be added.  The default Doctype can be set in
-     * TurbineResources by using the single strings: Html40Strict,
-     * Html40Transitional, or Html40Frameset.  Additionally the
-     * default can be supplied as two strings giving the dtd and uri.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    private void setDefaultDoctype(RunData data)
-            throws Exception
-    {
-        String errMsg =
-                "default.doctype property not set properly in TurbineResources.properties!";
-        List doctypeProperty =
-            Turbine.getConfiguration().getList(TurbineConstants.DEFAULT_DOCUMENT_TYPE_KEY);
-
-        if (doctypeProperty != null)
-        {
-            switch(doctypeProperty.size())
-            {
-            case 0:
-                {
-                    // Don't add a doctype.
-                    break;
-                }
-            case 1:
-                {
-                    String doc = (String) doctypeProperty.get(0);
-                    if (doc.equalsIgnoreCase(TurbineConstants.DOCUMENT_TYPE_HTML40TRANSITIONAL))
-                    {
-                        data.getPage().setDoctype(new Doctype.Html40Transitional());
-                    }
-                    else if (doc.equalsIgnoreCase(TurbineConstants.DOCUMENT_TYPE_HTML40STRICT))
-                    {
-                        data.getPage().setDoctype(new Doctype.Html40Strict());
-                    }
-                    else if (doc.equalsIgnoreCase(TurbineConstants.DOCUMENT_TYPE_HTML40FRAMESET))
-                    {
-                        data.getPage().setDoctype(new Doctype.Html40Frameset());
-                    }
-                    else
-                    {
-                        throw new TurbineException(errMsg);
-                    }
-                    break;
-                }
-            case 2:
-                {
-                    data.getPage()
-                        .setDoctype(new Doctype()
-                                    .setIdentifier((String) doctypeProperty.get(0))
-                                    .setUri((String) doctypeProperty.get(1)));
-                    break;
-                }
-            default:
-                {
-                    throw new TurbineException(errMsg);
-                }
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/pages/JspPage.java b/src/java/org/apache/turbine/modules/pages/JspPage.java
deleted file mode 100644
index b67b916..0000000
--- a/src/java/org/apache/turbine/modules/pages/JspPage.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.turbine.modules.pages;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.jsp.TurbineJsp;
-import org.apache.turbine.util.RunData;
-
-/**
- * Extends TemplatePage to add some convenience objects to the request.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Revision$
- */
-public class JspPage
-    extends TemplatePage
-{
-    /**
-     * Stuffs some useful objects into the request so that
-     * it is available to the Action module and the Screen module
-     */
-    protected void doBuildBeforeAction(RunData data)
-        throws Exception
-    {
-        TurbineJsp.addDefaultObjects(data);
-
-        try
-        {
-            //We try to set the buffer size from defaults
-            data.getResponse().setBufferSize(TurbineJsp.getDefaultBufferSize());
-        }
-        catch (IllegalStateException ise)
-        {
-            // If the response was already commited, we die silently
-            // No logger here?
-        }
-    }
-    
-    /**
-     * Stuffs some useful objects into the request so that
-     * it is available to the Action module and the Screen module
-     */
-    protected void doBuildBeforeAction(PipelineData pipelineData)
-        throws Exception
-    {
-        TurbineJsp.addDefaultObjects(pipelineData);
-
-        try
-        {
-            RunData data = (RunData) getRunData(pipelineData);
-            //We try to set the buffer size from defaults
-            data.getResponse().setBufferSize(TurbineJsp.getDefaultBufferSize());
-        }
-        catch (IllegalStateException ise)
-        {
-            // If the response was already commited, we die silently
-            // No logger here?
-        }
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/pages/TemplatePage.java b/src/java/org/apache/turbine/modules/pages/TemplatePage.java
deleted file mode 100644
index bee02da..0000000
--- a/src/java/org/apache/turbine/modules/pages/TemplatePage.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.turbine.modules.pages;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * When building sites using templates, Screens need only be defined
- * for templates which require dynamic (database or object) data.
- *
- * <p>
- *
- * This page can be used on sites where the number of Screens can be
- * much less than the number of templates.  The templates can be
- * grouped in directories with common layouts.  Screen modules are
- * then expected to be placed in packages corresponding with the
- * templates' directories and follow a specific naming scheme.
- *
- * <p>
- *
- * The template parameter is parsed and and a Screen whose package
- * matches the templates path and shares the same name minus any
- * extension and beginning with a capital letter is searched for.  If
- * not found, a Screen in a package matching the template's path with
- * name Default is searched for.  If still not found, a Screen with
- * name Default is looked for in packages corresponding to parent
- * directories in the template's path until a match is found.
- *
- * <p>
- *
- * For example if data.getParameters().getString("template") returns
- * /about_us/directions/driving.wm, the search follows
- * about_us.directions.Driving, about_us.directions.Default,
- * about_us.Default, Default, WebMacroSiteScreen (i.e. the default
- * screen set in TurbineResources).
- *
- * <p>
- *
- * Only one Layout module is used, since it is expected that any
- * dynamic content will be placed in navigations and screens.  The
- * layout template to be used is found in a similar way to the Screen.
- * For example the following paths will be searched in the layouts
- * subdirectory: /about_us/directions/driving.wm,
- * /about_us/directions/default.wm, /about_us/default.wm, /default.wm,
- * where wm is the value of the template.default.extension property.
- *
- * <p>
- *
- * This approach allows a site with largely static content to be
- * updated and added to regularly by those with little Java
- * experience.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TemplatePage
-    extends DefaultPage
-{
-    /**
-     * Works with TemplateService to set up default templates and
-     * corresponding class modules.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildAfterAction(RunData data)
-        throws Exception
-    {
-        // The Template Service at this point must fetch the Screen class
-        // to match a given template. If the Screen class has already been
-        // set by an action, skip this, because the user has the already
-        // specified the Screen class he wants to use.
-        if (!data.hasScreen())
-        {
-            // This is effectively getting the "template" parameter
-            // from the parameter parser in rundata. This is coming
-            // from the request for a template.
-            String template = data.getTemplateInfo().getScreenTemplate();
-
-            // Get the layout template and the correct Screen.
-            String layoutTemplate =
-                    TurbineTemplate.getLayoutTemplateName(template);
-            data.getTemplateInfo().setLayoutTemplate(layoutTemplate);
-
-            String screen = TurbineTemplate.getScreenName(template);
-
-            if (screen == null)
-            {
-                String errMsg = "Couldn't map Template "
-                    + template + " to any Screen class!";
-                log.error(errMsg);
-                throw new TurbineException(errMsg);
-            }
-            data.setScreen(screen);
-        }
-    }
-    
-    /**
-     * Works with TemplateService to set up default templates and
-     * corresponding class modules.
-     *
-     * @param pipelineData Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildAfterAction(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);        
-        doBuildAfterAction(data);
-    }
-
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/pages/VelocityPage.java b/src/java/org/apache/turbine/modules/pages/VelocityPage.java
deleted file mode 100644
index 2bf5f23..0000000
--- a/src/java/org/apache/turbine/modules/pages/VelocityPage.java
+++ /dev/null
@@ -1,133 +0,0 @@
-package org.apache.turbine.modules.pages;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.services.velocity.VelocityService;
-
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * Extends TemplatePage to set the template Context.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityPage
-    extends TemplatePage
-{
-    /**
-     * Stuffs the Context into the RunData so that it is available to
-     * the Action module and the Screen module via getContext().
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildBeforeAction(RunData data)
-        throws Exception
-    {
-        Context context = TurbineVelocity.getContext(data);
-        data.getTemplateInfo()
-            .setTemplateContext(VelocityService.CONTEXT, context);
-    }
-
-    /**
-     * Allows the VelocityService to peform post-request actions.
-     * (releases the (non-global) tools in the context for reuse later)
-     * @deprecated. Use PipelineData version instead.
-     * 
-     */
-    protected void doPostBuild(RunData data)
-        throws Exception
-    {
-        Context context = TurbineVelocity.getContext(data);
-        TurbineVelocity.requestFinished(context);
-    }
-    
-    
-    /**
-     * Stuffs the Context into the RunData so that it is available to
-     * the Action module and the Screen module via getContext().
-     * 
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildBeforeAction(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        Context context = TurbineVelocity.getContext(pipelineData);
-        data.getTemplateInfo()
-            .setTemplateContext(VelocityService.CONTEXT, context);
-    }
-
-    /**
-     * Allows the VelocityService to peform post-request actions.
-     * (releases the (non-global) tools in the context for reuse later)
-     */
-    protected void doPostBuild(PipelineData pipelineData)
-        throws Exception
-    {
-        Context context = TurbineVelocity.getContext(pipelineData);
-        TurbineVelocity.requestFinished(context);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/pages/package.html b/src/java/org/apache/turbine/modules/pages/package.html
deleted file mode 100644
index 574d340..0000000
--- a/src/java/org/apache/turbine/modules/pages/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Page class implementations.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java b/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java
deleted file mode 100644
index 0a48dc1..0000000
--- a/src/java/org/apache/turbine/modules/screens/BaseJspScreen.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.jsp.TurbineJsp;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-
-/**
- * Base JSP Screen that should be subclassed by screens that want to
- * use JSP.  Subclasses should override the doBuildTemplate() method.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author Frank Y. Kim
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class BaseJspScreen
-        extends TemplateScreen
-{
-    /** The prefix for lookup up screen pages */
-    private String prefix = TurbineConstants.SCREEN_PREFIX + "/";
-
-    /**
-     * Method that sets up beans and forward the request to the JSP.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return null - the JSP sends the information.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(RunData data)
-            throws Exception
-    {
-        String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-        // get the name of the JSP we want to use
-        String templateName
-            = TurbineTemplate.getScreenTemplateName(screenTemplate);
-
-        // The Template Service could not find the Screen
-        if (StringUtils.isEmpty(templateName))
-        {
-            log.error("Screen " + screenTemplate + " not found!");
-            throw new Exception("Could not find screen for " + screenTemplate);
-        }
-
-        // let service know whether we are using a layout
-        TurbineJsp.handleRequest(data, prefix + templateName,
-                                 getLayout(data) == null);
-
-        return null;
-    }
-
-    /**
-     * Method that sets up beans and forward the request to the JSP.
-     *
-     * @param data Turbine information.
-     * @return null - the JSP sends the information.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-        // get the name of the JSP we want to use
-        String templateName
-            = TurbineTemplate.getScreenTemplateName(screenTemplate);
-
-        // The Template Service could not find the Screen
-        if (StringUtils.isEmpty(templateName))
-        {
-            log.error("Screen " + screenTemplate + " not found!");
-            throw new Exception("Could not find screen for " + screenTemplate);
-        }
-
-        // let service know whether we are using a layout
-        TurbineJsp.handleRequest(pipelineData, prefix + templateName,
-                                 getLayout(pipelineData) == null);
-
-        return null;
-    }
-    
-    /**
-     * Method to be overidden by subclasses to include data in beans, etc.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data, the Rundata object
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-        throws Exception
-    {
-    }
-    
-    /**
-     * Method to be overidden by subclasses to include data in beans, etc.
-     *
-     * @param data, the Rundata object
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/screens/Error.java b/src/java/org/apache/turbine/modules/screens/Error.java
deleted file mode 100644
index ee33ed2..0000000
--- a/src/java/org/apache/turbine/modules/screens/Error.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.html.B;
-import org.apache.ecs.html.H3;
-import org.apache.ecs.html.H4;
-import org.apache.ecs.html.PRE;
-import org.apache.ecs.html.TD;
-import org.apache.ecs.html.TR;
-import org.apache.ecs.html.Table;
-import org.apache.turbine.modules.Screen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * This is a sample Error Screen module.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class Error extends Screen
-{
-    /**
-     * Build screen.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return ConcreteElement the page with all the error information.
-     * @throws Exception a generic exception.
-     */
-    public ConcreteElement doBuild(RunData data) throws Exception
-    {
-        data.setTitle("There has been an error!");
-
-        Table table = new Table().setBorder(0);
-        boolean hasValues = false;
-        for (Iterator it = data.getParameters().keySet().iterator();
-             it.hasNext();)
-        {
-            String key = (String) it.next();
-            String value = data.getParameters().getString(key);
-            TR tr =
-                new TR().addElement(
-                    new TD().addElement(new B(key))).addElement(
-                    new TD().addElement(" = " + value));
-            table.addElement(tr);
-            hasValues = true;
-        }
-
-        Table table2 = new Table().setBorder(0);
-        Map varDebug = data.getDebugVariables();
-
-        boolean hasValues2 = false;
-        for (Iterator i = varDebug.keySet().iterator(); i.hasNext();)
-        {
-            String key = (String) i.next();
-            String value = varDebug.get(key).toString();
-            TR tr =
-                new TR().addElement(
-                    new TD().addElement(new B(key))).addElement(
-                    new TD().addElement(" = " + value));
-            table2.addElement(tr);
-            hasValues2 = true;
-        }
-
-        data.getPage().getBody().addElement(
-            new H3(
-                data.getTitle()
-                    + " Please review the exception below "
-                    + "for more information."));
-
-        if (hasValues)
-        {
-            data.getPage().getBody().addElement(
-                new H4().addElement("Get/Post Data:"));
-            data.getPage().getBody().addElement(table);
-        }
-
-        if (hasValues2)
-        {
-            data.getPage().getBody().addElement(
-                new H4().addElement("Debugging Data:"));
-            data.getPage().getBody().addElement(table2);
-        }
-
-        String trace = data.getStackTrace();
-        if (trace != null)
-        {
-            data
-                .getPage()
-                .getBody()
-                .addElement(new H4().addElement("The exception is:"))
-                .addElement(new PRE(trace))
-                .addElement(new PRE(data.getStackTraceException().toString()));
-        }
-        return null;
-    }
-    
-    
-    /**
-     * Build screen.
-     *
-     * @param data Turbine information.
-     * @return ConcreteElement the page with all the error information.
-     * @throws Exception a generic exception.
-     */
-    public ConcreteElement doBuild(PipelineData pipelineData) throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return doBuild(data);
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/screens/JspErrorScreen.java b/src/java/org/apache/turbine/modules/screens/JspErrorScreen.java
deleted file mode 100644
index 410c678..0000000
--- a/src/java/org/apache/turbine/modules/screens/JspErrorScreen.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * Directs errors at the Jsp error template defined in template.error.
- *
- * @author <a href="mailto:ingo@raleigh.ibm.com">Ingo Schuster</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class JspErrorScreen
-    extends BaseJspScreen
-{
-    /**
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-        throws Exception
-    {
-        String errorTemplate = Turbine.getConfiguration()
-            .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                       TurbineConstants.TEMPLATE_ERROR_JSP);
-
-        setTemplate(data, errorTemplate);
-    }
-    
-    /**
-     * @param data Turbine information.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-            RunData data = (RunData) getRunData(pipelineData);
-            doBuildTemplate(data);
-    }    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/RawScreen.java b/src/java/org/apache/turbine/modules/screens/RawScreen.java
deleted file mode 100644
index 70424dc..0000000
--- a/src/java/org/apache/turbine/modules/screens/RawScreen.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-// Turbine stuff.
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.turbine.modules.Screen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * Base class for writing Screens that output binary data.  This class
- * is provided as a helper class for those who want to write Screens
- * that output raw binary data.  For example, it may be extended into
- * a Screen that outputs a SVG file or a SWF (Flash Player format)
- * movie.  The only thing one has to do is to implement the two
- * methods <code>getContentType(RunData data)</code> and
- * <code>doOutput(RunData data)</code> (see below).
- *
- * <p> You migth want to take a look at the ImageServer screen class
- * contained in the TDK.<br>
- *
- * @author <a href="mailto:rkoenig@chez.com">Regis Koenig</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class RawScreen extends Screen
-{
-    /**
-     * Build the Screen.  This method actually makes a call to the
-     * doOutput() method in order to generate the Screen content.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    protected final ConcreteElement doBuild(RunData data)
-            throws Exception
-    {
-        data.getResponse().setContentType(getContentType(data));
-        data.declareDirectResponse();
-        doOutput(data);
-        return null;
-    }
-
-    /**
-     * Build the Screen.  This method actually makes a call to the
-     * doOutput() method in order to generate the Screen content.
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    protected final ConcreteElement doBuild(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return doBuild(data);
-    }
-
-    
-    /**
-     * Set the content type.  This method should be overidden to
-     * actually set the real content-type header of the output.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A String with the content type.
-     */
-    protected abstract String getContentType(RunData data);
-
-    /**
-     * Set the content type.  This method should be overidden to
-     * actually set the real content-type header of the output.
-     *
-     * @param data Turbine information.
-     * @return A String with the content type.
-     */
-    protected String getContentType(PipelineData pipelineData)
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return getContentType(data);
-    }
-
-    
-    /**
-     * Actually output the dynamic content.  The OutputStream can be
-     * accessed like this: <pre>OutputStream out =
-     * data.getResponse().getOutputStream();</pre>.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected abstract void doOutput(RunData data)
-            throws Exception;
-
-    /**
-     * Actually output the dynamic content.  The OutputStream can be
-     * accessed like this: <pre>OutputStream out =
-     * data.getResponse().getOutputStream();</pre>.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doOutput(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doOutput(data);
-    }
-
-    
-    /**
-     * The layout must be set to null.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A null String.
-     */
-    public final String getLayout(RunData data)
-    {
-        return null;
-    }
-    
-    /**
-     * The layout must be set to null.
-     *
-     * @param data Turbine information.
-     * @return A null String.
-     */
-    public final String getLayout(PipelineData pipelineData)
-    {
-        return null;
-    }
-    
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/TemplateScreen.java b/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
deleted file mode 100644
index 658e822..0000000
--- a/src/java/org/apache/turbine/modules/screens/TemplateScreen.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.modules.Screen;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.pipeline.PipelineData;
-
-import org.apache.turbine.services.template.TurbineTemplate;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * Template Screen.
- *
- * Base Template Screens should extend this class and override the
- * buildTemplate() method.  Users of the particular service can then
- * override the doBuildTemplate() for any specific pre-processing.
- * You can also override the doBuild() method in order to add extra
- * functionality to your system, but you need to make sure to at least
- * duplicate the existing functionality in order for things to work.
- * Look at the code for the doBuild() method to get an idea of what is
- * going on there (it is quite simple really).
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class TemplateScreen
-    extends Screen
-{
-    /** Logging */
-    protected Log log = LogFactory.getLog(this.getClass());
-
-    /**
-     * This method should be overidden by subclasses that wish to add
-     * specific business logic.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception A generic exception.
-     */
-    protected abstract void doBuildTemplate(RunData data)
-            throws Exception;
-
-    /**
-     * This method should be overidden by subclasses that wish to add
-     * specific business logic.
-     * Should revert to abstract when RunData has gone.
-     * @param data Turbine information.
-     * @exception Exception A generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-    throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doBuildTemplate(data);
-    }
-
-    
-    /**
-     * This method should be implemented by Base template classes.  It
-     * should contain the specific template service code to generate
-     * the template.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception A generic exception.
-     */
-    public abstract ConcreteElement buildTemplate(RunData data)
-            throws Exception;
-
-    /**
-     * This method should be implemented by Base template classes.  It
-     * should contain the specific template service code to generate
-     * the template.
-     * Should revert to abstract when RunData goes.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception A generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-    throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return buildTemplate(data);
-    }
-
-    
-    /**
-     * This method can be overridden to write code that executes when
-     * the template has been built (called from a finally clause, so
-     * executes regardless of whether an exception is thrown or not)
-     * 
-     * @deprecated Use PipelineData version instead.
-     */
-    protected void doPostBuildTemplate(RunData data)
-    {
-        // empty
-    }
-
-    /**
-     * This method can be overridden to write code that executes when
-     * the template has been built (called from a finally clause, so
-     * executes regardless of whether an exception is thrown or not)
-     */
-    protected void doPostBuildTemplate(PipelineData pipelineData)
-    {
-        // empty
-    }
-
-    
-    /**
-     * This method is called by the Screenloader to construct the
-     * Screen.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception A generic exception.
-     */
-    protected ConcreteElement doBuild(RunData data)
-            throws Exception
-    {
-        ConcreteElement out = null;
-
-        try
-        {
-            doBuildTemplate(data);
-            out = buildTemplate(data);
-        }
-        finally
-        {
-            doPostBuildTemplate(data);
-        }
-
-        return out;
-    }
-
-    /**
-     * This method is called by the Screenloader to construct the
-     * Screen.
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception A generic exception.
-     */
-    protected ConcreteElement doBuild(PipelineData pipelineData)
-            throws Exception
-    {
-        ConcreteElement out = null;
-
-        try
-        {
-            doBuildTemplate(pipelineData);
-            out = buildTemplate(pipelineData);
-        }
-        finally
-        {
-            doPostBuildTemplate(pipelineData);
-        }
-
-        return out;
-    }
-
-    
-    
-    /**
-     * This method is used when you want to short circuit a Screen and
-     * change the template that will be executed next. <b>Note that the current
-     * context will be applied to the next template that is executed.
-     * If you want to have the context executed for the next screen,
-     * to be the same one as the next screen, then you should use the
-     * TemplateScreen.doRedirect() method.</b>
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param template The name of the next template.
-     */
-    public static void setTemplate(RunData data, String template)
-    {
-        data.getTemplateInfo().setScreenTemplate(template);
-        try
-        {
-            // We have do call getScreenTemplate because of the path
-            // separator.
-            data.getTemplateInfo().setLayoutTemplate(
-                    TurbineTemplate.getLayoutTemplateName(
-                            data.getTemplateInfo().getScreenTemplate()));
-        }
-        catch (Exception e)
-        {
-            // Nothing to do.
-        }
-    }
-
-    /**
-     * This method is used when you want to short circuit a Screen and
-     * change the template that will be executed next. <b>Note that the current
-     * context will be applied to the next template that is executed.
-     * If you want to have the context executed for the next screen,
-     * to be the same one as the next screen, then you should use the
-     * TemplateScreen.doRedirect() method.</b>
-     *
-     * @param data Turbine information.
-     * @param template The name of the next template.
-     */
-    public static void setTemplate(PipelineData pipelineData, String template)
-    {
-        //Map runDataMap = (Map) pipelineData.get(RunData.class);
-        //RunData data = (RunData)runDataMap.get(RunData.class);
-        RunData data = (RunData)pipelineData;
-        setTemplate(data, template);
-    }
-    
-    /**
-     * You can call this within a Screen to cause an internal redirect
-     * to happen.  It essentially allows you to stop execution in one
-     * Screen and instantly execute another Screen.  Don't worry, this
-     * does not do a HTTP redirect and also if you have anything added
-     * in the Context, it will get carried over.
-     *
-     * <p>
-     *
-     * This class is useful if you have a Screen that submits to
-     * another Screen and you want it to do error validation before
-     * executing the other Screen.  If there is an error, you can
-     * doRedirect() back to the original Screen.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param screen Name of screen to redirect to.
-     * @param template Name of template.
-     * @exception Exception A generic exception.
-     */
-    public void doRedirect(RunData data, String screen, String template)
-            throws Exception
-    {
-        log.debug("doRedirect(data, " + screen + ", " + template + ")");
-        setTemplate(data, template);
-        ScreenLoader.getInstance().exec(data, screen);
-    }
-
-    /**
-     * You can call this within a Screen to cause an internal redirect
-     * to happen.  It essentially allows you to stop execution in one
-     * Screen and instantly execute another Screen.  Don't worry, this
-     * does not do a HTTP redirect and also if you have anything added
-     * in the Context, it will get carried over.
-     *
-     * <p>
-     *
-     * This class is useful if you have a Screen that submits to
-     * another Screen and you want it to do error validation before
-     * executing the other Screen.  If there is an error, you can
-     * doRedirect() back to the original Screen.
-     *
-     * @param data Turbine information.
-     * @param screen Name of screen to redirect to.
-     * @param template Name of template.
-     * @exception Exception A generic exception.
-     */
-    public void doRedirect(PipelineData pipelineData, String screen, String template)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        log.debug("doRedirect(data, " + screen + ", " + template + ")");
-        setTemplate(data, template);
-        ScreenLoader.getInstance().exec(pipelineData, screen);
-    }
-
-    
-    
-    /**
-     * You can call this within a Screen to cause an internal redirect
-     * to happen.  It essentially allows you to stop execution in one
-     * Screen and instantly execute another Screen.  Don't worry, this
-     * does not do a HTTP redirect and also if you have anything added
-     * in the Context, it will get carried over.
-     *
-     * <p>
-     *
-     * This class is useful if you have a Screen that submits to
-     * another Screen and you want it to do error validation before
-     * executing the other Screen.  If there is an error, you can
-     * doRedirect() back to the original Screen.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param template Name of template.
-     * @exception Exception A generic exception.
-     */
-    public void doRedirect(RunData data, String template)
-            throws Exception
-    {
-        doRedirect(data, TurbineTemplate.getScreenName(template), template);
-    }
-    
-    /**
-     * You can call this within a Screen to cause an internal redirect
-     * to happen.  It essentially allows you to stop execution in one
-     * Screen and instantly execute another Screen.  Don't worry, this
-     * does not do a HTTP redirect and also if you have anything added
-     * in the Context, it will get carried over.
-     *
-     * <p>
-     *
-     * This class is useful if you have a Screen that submits to
-     * another Screen and you want it to do error validation before
-     * executing the other Screen.  If there is an error, you can
-     * doRedirect() back to the original Screen.
-     *
-     * @param data Turbine information.
-     * @param template Name of template.
-     * @exception Exception A generic exception.
-     */
-    public void doRedirect(PipelineData pipelineData, String template)
-            throws Exception
-    {
-        doRedirect(pipelineData, template);
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/VelocityDirectScreen.java b/src/java/org/apache/turbine/modules/screens/VelocityDirectScreen.java
deleted file mode 100644
index 62a209c..0000000
--- a/src/java/org/apache/turbine/modules/screens/VelocityDirectScreen.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * VelocityDirectScreen is a screen class which returns its output
- * directly to the output stream. It can be used if buffering an
- * output screen isn't possible or the result doesn't fit in the
- * memory.
- * <p>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityDirectScreen
-    extends VelocityScreen
-{
-    /** The prefix for lookup up screen pages */
-    private String prefix = TurbineConstants.SCREEN_PREFIX + "/";
-
-    /**
-     * This builds the Velocity template.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(RunData data)
-        throws Exception
-    {
-        Context context = TurbineVelocity.getContext(data);
-
-        String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-        String templateName
-            = TurbineTemplate.getScreenTemplateName(screenTemplate);
-
-        // The Template Service could not find the Screen
-        if (StringUtils.isEmpty(templateName))
-        {
-            log.error("Screen " + screenTemplate + " not found!");
-            throw new Exception("Could not find screen for " + screenTemplate);
-        }
-
-        try
-        {
-            TurbineVelocity.handleRequest(context,
-                                          prefix + templateName,
-                                          data.getOut());
-
-        }
-        catch (Exception e)
-        {
-            // If there is an error, build a $processingException and
-            // attempt to call the error.vm template in the screens
-            // directory.
-            context.put (TurbineConstants.PROCESSING_EXCEPTION_PLACEHOLDER, e.toString());
-            context.put (TurbineConstants.STACK_TRACE_PLACEHOLDER, ExceptionUtils.getStackTrace(e));
-
-            templateName = Turbine.getConfiguration()
-                .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                           TurbineConstants.TEMPLATE_ERROR_VM);
-
-            TurbineVelocity.handleRequest(context,
-                    prefix + templateName,
-                    data.getOut());
-        }
-
-        return null;
-    }
-    
-    /**
-     * This builds the Velocity template.
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-            RunData data = (RunData) getRunData(pipelineData);
-            Context context = TurbineVelocity.getContext(pipelineData);
-
-            String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-            String templateName
-                = TurbineTemplate.getScreenTemplateName(screenTemplate);
-
-            // The Template Service could not find the Screen
-            if (StringUtils.isEmpty(templateName))
-            {
-                log.error("Screen " + screenTemplate + " not found!");
-                throw new Exception("Could not find screen for " + screenTemplate);
-            }
-
-            try
-            {
-                TurbineVelocity.handleRequest(context,
-                                              prefix + templateName,
-                                              data.getOut());
-
-            }
-            catch (Exception e)
-            {
-                // If there is an error, build a $processingException and
-                // attempt to call the error.vm template in the screens
-                // directory.
-                context.put (TurbineConstants.PROCESSING_EXCEPTION_PLACEHOLDER, e.toString());
-                context.put (TurbineConstants.STACK_TRACE_PLACEHOLDER, ExceptionUtils.getStackTrace(e));
-
-                templateName = Turbine.getConfiguration()
-                    .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                               TurbineConstants.TEMPLATE_ERROR_VM);
-
-                TurbineVelocity.handleRequest(context,
-                        prefix + templateName,
-                        data.getOut());
-            }
-
-            return null;
-    }
-}
diff --git a/src/java/org/apache/turbine/modules/screens/VelocityErrorScreen.java b/src/java/org/apache/turbine/modules/screens/VelocityErrorScreen.java
deleted file mode 100644
index ea3d211..0000000
--- a/src/java/org/apache/turbine/modules/screens/VelocityErrorScreen.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * VelocityErrorScreen screen - directs errors at the velocity
- * error template defined in template.error.
- *
- * @author <a href="mailto:gonzalo.diethelm@sonda.com">Gonzalo Diethelm</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityErrorScreen
-    extends VelocityScreen
-{
-    /**
-     * Implement this to add information to the context.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuildTemplate(RunData data, Context context)
-            throws Exception
-    {
-        context.put (TurbineConstants.PROCESSING_EXCEPTION_PLACEHOLDER,
-                     data.getStackTraceException().toString());
-        context.put (TurbineConstants.STACK_TRACE_PLACEHOLDER,
-                     data.getStackTrace());
-
-        String errorTemplate = Turbine.getConfiguration()
-            .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                       TurbineConstants.TEMPLATE_ERROR_VM);
-
-        setTemplate(data, errorTemplate);
-    }
-    
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param pipelineData Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData, Context context)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doBuildTemplate(data);
-    }
-
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/VelocityScreen.java b/src/java/org/apache/turbine/modules/screens/VelocityScreen.java
deleted file mode 100644
index ca7a0ba..0000000
--- a/src/java/org/apache/turbine/modules/screens/VelocityScreen.java
+++ /dev/null
@@ -1,327 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.lang.exception.ExceptionUtils;
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.StringElement;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-import org.apache.turbine.services.velocity.TurbineVelocity;
-
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * Base Velocity Screen.  The buildTemplate() assumes the template
- * parameter has been set in the RunData object.  This provides the
- * ability to execute several templates from one Screen.
- *
- * <p>
- *
- * If you need more specific behavior in your application, extend this
- * class and override the doBuildTemplate() method.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityScreen
-    extends TemplateScreen
-{
-    /** The prefix for lookup up screen pages */
-    private String prefix = TurbineConstants.SCREEN_PREFIX + "/";
-
-    /**
-     * Velocity Screens extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data,
-                                   Context context)
-            throws Exception
-    {
-    }
-
-    /**
-     * Velocity Screens extending this class should overide this
-     * method to perform any particular business logic and add
-     * information to the context.
-     *
-     * @param pipelineData Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData,
-                                   Context context)
-            throws Exception
-    {
-    }
-
-    
-    /**
-     * Needs to be implemented to make TemplateScreen like us.  The
-     * actual method that you should override is the one with the
-     * context in the parameter list.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-            throws Exception
-    {
-        doBuildTemplate(data, TurbineVelocity.getContext(data));
-    }
-
-    /**
-     * Needs to be implemented to make TemplateScreen like us.  The
-     * actual method that you should override is the one with the
-     * context in the parameter list.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-            throws Exception
-    {
-        doBuildTemplate(pipelineData, TurbineVelocity.getContext(pipelineData));
-    }
-
-    
-    
-    /**
-     * This builds the Velocity template.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(RunData data)
-        throws Exception
-    {
-        String screenData = null;
-        
-        Context context = TurbineVelocity.getContext(data);
-
-        String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-        String templateName
-            = TurbineTemplate.getScreenTemplateName(screenTemplate);
-        
-        // The Template Service could not find the Screen
-        if (StringUtils.isEmpty(templateName))
-        {
-            log.error("Screen " + screenTemplate + " not found!");
-            throw new Exception("Could not find screen for " + screenTemplate);
-        }
-        
-        try
-        {
-            // if a layout has been defined return the results, otherwise
-            // send the results directly to the output stream.
-            if (getLayout(data) == null)
-            {
-                TurbineVelocity.handleRequest(context,
-                        prefix + templateName,
-                        data.getResponse().getOutputStream());
-            }
-            else
-            {
-                screenData = TurbineVelocity
-                        .handleRequest(context, prefix + templateName);
-            }
-        }
-        catch (Exception e)
-        {
-            // If there is an error, build a $processingException and
-            // attempt to call the error.vm template in the screens
-            // directory.
-            context.put (TurbineConstants.PROCESSING_EXCEPTION_PLACEHOLDER, e.toString());
-            context.put (TurbineConstants.STACK_TRACE_PLACEHOLDER, ExceptionUtils.getStackTrace(e));
-            
-            templateName = Turbine.getConfiguration()
-                .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                           TurbineConstants.TEMPLATE_ERROR_VM);
-            
-            screenData = TurbineVelocity.handleRequest(
-                context, prefix + templateName);
-        }
-        
-        // package the response in an ECS element
-        StringElement output = new StringElement();
-        output.setFilterState(false);
-
-        if (screenData != null)
-        {
-            output.addElement(screenData);
-        }
-        return output;
-    }
-
-    /**
-     * This builds the Velocity template.
-     *
-     * @param data Turbine information.
-     * @return A ConcreteElement.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement buildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        String screenData = null;
-        
-        Context context = TurbineVelocity.getContext(pipelineData);
-
-        String screenTemplate = data.getTemplateInfo().getScreenTemplate();
-        String templateName
-            = TurbineTemplate.getScreenTemplateName(screenTemplate);
-        
-        // The Template Service could not find the Screen
-        if (StringUtils.isEmpty(templateName))
-        {
-            log.error("Screen " + screenTemplate + " not found!");
-            throw new Exception("Could not find screen for " + screenTemplate);
-        }
-        
-        try
-        {
-            // if a layout has been defined return the results, otherwise
-            // send the results directly to the output stream.
-            if (getLayout(pipelineData) == null)
-            {
-                TurbineVelocity.handleRequest(context,
-                        prefix + templateName,
-                        data.getResponse().getOutputStream());
-            }
-            else
-            {
-                screenData = TurbineVelocity
-                        .handleRequest(context, prefix + templateName);
-            }
-        }
-        catch (Exception e)
-        {
-            // If there is an error, build a $processingException and
-            // attempt to call the error.vm template in the screens
-            // directory.
-            context.put (TurbineConstants.PROCESSING_EXCEPTION_PLACEHOLDER, e.toString());
-            context.put (TurbineConstants.STACK_TRACE_PLACEHOLDER, ExceptionUtils.getStackTrace(e));
-            
-            templateName = Turbine.getConfiguration()
-                .getString(TurbineConstants.TEMPLATE_ERROR_KEY,
-                           TurbineConstants.TEMPLATE_ERROR_VM);
-            
-            screenData = TurbineVelocity.handleRequest(
-                context, prefix + templateName);
-        }
-        
-        // package the response in an ECS element
-        StringElement output = new StringElement();
-        output.setFilterState(false);
-
-        if (screenData != null)
-        {
-            output.addElement(screenData);
-        }
-        return output;
-    }
-    
-    
-    /**
-     * Return the Context needed by Velocity.
-     *
-     * @param data Turbine information.
-     * @return A Context.
-     *
-     * @deprecated Use TurbineVelocity.getContext(data)
-     */
-    public static Context getContext(RunData data)
-    {
-        return TurbineVelocity.getContext(data);
-    }
-    
-    /**
-     * Return the Context needed by Velocity.
-     *
-     * @param data Turbine information.
-     * @return A Context.
-     *
-     * @deprecated Use TurbineVelocity.getContext(pipelineData)
-     */
-    public static Context getContext(PipelineData pipelineData)
-    {
-        return TurbineVelocity.getContext(pipelineData);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java b/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
deleted file mode 100644
index 3f5d4cb..0000000
--- a/src/java/org/apache/turbine/modules/screens/VelocitySecureScreen.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * VelocitySecureScreen
- *
- * Always performs a Security Check that you've defined before
- * executing the doBuildtemplate().  You should extend this class and
- * add the specific security check needed.  If you have a number of
- * screens that need to perform the same check, you could make a base
- * screen by extending this class and implementing the isAuthorized().
- * Then each screen that needs to perform the same check could extend
- * your base screen.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class VelocitySecureScreen
-        extends VelocityScreen
-{
-    /**
-     * Implement this to add information to the context.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected abstract void doBuildTemplate(RunData data,
-                                            Context context)
-            throws Exception;
-
-    /**
-     * Implement this to add information to the context.
-     *
-     * @param data Turbine information.
-     * @param context Context for web pages.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData,
-                                            Context context)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        doBuildTemplate(data);
-    }
-
-    
-    /**
-     * This method overrides the method in VelocityScreen to
-     * perform a security check first.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(RunData data)
-        throws Exception
-    {
-        if (isAuthorized(data))
-        {
-            doBuildTemplate(data, TurbineVelocity.getContext(data));
-        }
-    }
-
-    /**
-     * This method overrides the method in VelocityScreen to
-     * perform a security check first.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    protected void doBuildTemplate(PipelineData pipelineData)
-        throws Exception
-    {
-        if (isAuthorized(pipelineData))
-        {
-            doBuildTemplate(pipelineData, TurbineVelocity.getContext(pipelineData));
-        }
-    }
-
-    
-    
-    /**
-     * Implement this method to perform the security check needed.
-     * You should set the template in this method that you want the
-     * user to be sent to if they're unauthorized.  See the
-     * VelocitySecurityCheck utility.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data Turbine information.
-     * @return True if the user is authorized to access the screen.
-     * @exception Exception, a generic exception.
-     */
-    protected abstract boolean isAuthorized(RunData data)
-            throws Exception;
-    
-    /**
-     * Implement this method to perform the security check needed.
-     * You should set the template in this method that you want the
-     * user to be sent to if they're unauthorized.  See the
-     * VelocitySecurityCheck utility.
-     *
-     * @param data Turbine information.
-     * @return True if the user is authorized to access the screen.
-     * @exception Exception, a generic exception.
-     */
-    protected boolean isAuthorized(PipelineData pipelineData)
-    throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return isAuthorized(data);
-    }
-
-    
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/error/InvalidState.java b/src/java/org/apache/turbine/modules/screens/error/InvalidState.java
deleted file mode 100644
index 899a586..0000000
--- a/src/java/org/apache/turbine/modules/screens/error/InvalidState.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.turbine.modules.screens.error;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.ElementContainer;
-
-import org.apache.ecs.html.A;
-
-import org.apache.turbine.modules.Screen;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.uri.TurbineURI;
-
-/**
- * Users will get this screen if the screen on their browser is in an
- * invalid state.  For example, if they hit "Back" or "Reload" and
- * then try to submit old form data.
- *
- * If you want one of your screens to check for invalid state
- * then add a hidden form field called "_session_access_counter"
- * with the value currently stored in the session.  The
- * SessionValidator action will check to see if it is an old
- * value and redirect you to this screen.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class InvalidState
-    extends Screen
-{
-    /**
-     * Build the Screen.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement doBuild(RunData data)
-            throws Exception
-    {
-        ElementContainer body = new ElementContainer();
-        ElementContainer message = new ElementContainer();
-
-        StringBuffer sb = new StringBuffer();
-        sb.append("<b>There has been an error.</b>")
-                .append("<p>")
-                .append("- If you used the browser \"Back\" or \"Reload\"")
-                .append(" buttons please use the navigation buttons we provide")
-                .append(" within the screen.")
-                .append("<p>")
-                .append("Please click ");
-
-        message.addElement(sb.toString());
-        ParameterParser pp;
-        pp = (ParameterParser) data.getUser().getTemp("prev_parameters");
-        pp.remove("_session_access_counter");
-
-        TurbineURI back = new TurbineURI(data,(String) data.getUser().getTemp("prev_screen"));
-        back.addPathInfo(pp);
-        message.addElement(new A().setHref(back.getRelativeLink()).addElement("here"));
-
-        message.addElement(" to return the the screen you were working on.");
-
-        body.addElement(message);
-        return body;
-    }
-    
-    /**
-     * Build the Screen.
-     *
-     * @param data Turbine information.
-     * @exception Exception, a generic exception.
-     */
-    public ConcreteElement doBuild(PipelineData pipelineData)
-            throws Exception
-    {
-        RunData data = (RunData) getRunData(pipelineData);
-        return doBuild(data);
-    }	
-    
-}
diff --git a/src/java/org/apache/turbine/modules/screens/error/package.html b/src/java/org/apache/turbine/modules/screens/error/package.html
deleted file mode 100644
index 82478c8..0000000
--- a/src/java/org/apache/turbine/modules/screens/error/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Error Screen classes. 
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/modules/screens/package.html b/src/java/org/apache/turbine/modules/screens/package.html
deleted file mode 100644
index 0e3f5f7..0000000
--- a/src/java/org/apache/turbine/modules/screens/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Screen class implementations.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/om/OMTool.java b/src/java/org/apache/turbine/om/OMTool.java
deleted file mode 100644
index b2aa487..0000000
--- a/src/java/org/apache/turbine/om/OMTool.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package org.apache.turbine.om;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.pool.Recyclable;
-
-/**
- * A Pull tool to make om objects available to a template
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class OMTool implements ApplicationTool, Recyclable
-{
-    // private RunData data;
-    private HashMap omMap;
-
-    // note the following could be a static attribute to reduce memory
-    // footprint. Might require a service to front load the
-    // PullHelpers to avoid MT issues. A multiple write is not so bad
-    // though
-
-    /** The cache of PullHelpers. **/
-    private static Map pullMap = new HashMap();
-
-    /**
-     *  The Factory responsible for retrieving the
-     *  objects from storage
-     */
-    private RetrieverFactory omFactory;
-
-    public OMTool()throws Exception
-    {
-        omMap = new HashMap();
-        //String className = Turbine.getConfiguration()
-        //       .getString("tool.om.factory");
-        //        RetrieverFactory omFactory =
-        //            (RetrieverFactory)Class.forName(className).newInstance();
-    }
-
-    /**
-     * Prepares tool for a single request
-     */
-    public void init(Object runData)
-    {
-        // data = (RunData)runData;
-    }
-
-    /**
-     * Implementation of ApplicationTool interface is not needed for this
-     * method as the tool is request scoped
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /**
-     * Inner class to present a nice interface to the template designer
-     */
-    private class PullHelper
-    {
-        String omName;
-
-        private PullHelper(String omName)
-        {
-            this.omName = omName;
-        }
-
-        public Object setKey(String key)
-            throws Exception
-        {
-            Object om = null;
-
-            String inputKey = omName + key;
-            if (omMap.containsKey(inputKey))
-            {
-                om = omMap.get(inputKey);
-            }
-            else
-            {
-                om = omFactory.getInstance(omName).retrieve(key);
-                omMap.put(inputKey, om);
-            }
-
-            return om;
-        }
-    }
-
-    public Object get(String omName) throws Exception
-    {
-        if (!pullMap.containsKey(omName))
-        {
-            // MT could overwrite a PullHelper, but that is not a problem
-            // should still synchronize to avoid two threads adding at
-            // same time
-            synchronized (this.getClass())
-            {
-                pullMap.put(omName, new OMTool.PullHelper(omName));
-            }
-        }
-
-        return pullMap.get(omName);
-    }
-
-    public Object get(String omName, String key) throws Exception
-    {
-        return ((OMTool.PullHelper) get(omName)).setKey(key);
-    }
-
-
-    public String getName()
-    {
-        return "om";
-    }
-
-
-    // ****************** Recyclable implementation ************************
-
-    private boolean disposed;
-
-    /**
-     * Recycles the object for a new client. Recycle methods with
-     * parameters must be added to implementing object and they will be
-     * automatically called by pool implementations when the object is
-     * taken from the pool for a new client. The parameters must
-     * correspond to the parameters of the constructors of the object.
-     * For new objects, constructors can call their corresponding recycle
-     * methods whenever applicable.
-     * The recycle methods must call their super.
-     */
-    public void recycle()
-    {
-        disposed = false;
-    }
-
-    /**
-     * Disposes the object after use. The method is called
-     * when the object is returned to its pool.
-     * The dispose method must call its super.
-     */
-    public void dispose()
-    {
-        omMap.clear();
-        // data = null;
-        disposed = true;
-    }
-
-    /**
-     * Checks whether the recyclable has been disposed.
-     * @return true, if the recyclable is disposed.
-     */
-    public boolean isDisposed()
-    {
-        return disposed;
-    }
-}
-
-
-
-
-
-
-
-
diff --git a/src/java/org/apache/turbine/om/Retrievable.java b/src/java/org/apache/turbine/om/Retrievable.java
deleted file mode 100644
index 9d390eb..0000000
--- a/src/java/org/apache/turbine/om/Retrievable.java
+++ /dev/null
@@ -1,84 +0,0 @@
-package org.apache.turbine.om;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface specifies methods for uniquely identifying an object.
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id$
- */
-public interface Retrievable
-{
-    /**
-     * get an id that differentiates this object from others
-     * of its class.
-     *
-     * @return The id value
-     */
-    String getQueryKey();
-
-    /**
-     * set an id that differentiates this object from others
-     * of its class.
-     *
-     * @param key The new id value
-     *
-     * @throws Exception A problem occured while setting the id.
-     */
-    void setQueryKey(String key)
-        throws Exception;
-
-}
diff --git a/src/java/org/apache/turbine/om/Retriever.java b/src/java/org/apache/turbine/om/Retriever.java
deleted file mode 100644
index e365f1b..0000000
--- a/src/java/org/apache/turbine/om/Retriever.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.turbine.om;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface marks a class that has a retrieve(String) method.
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id$
- */
-public interface Retriever
-{
-    /**
-     * Gets an object of the same type as the object implementing
-     * this method according to the key.
-     *
-     * @return the object that matches the key
-     */
-    Object retrieve(String key)
-        throws Exception;
-}
diff --git a/src/java/org/apache/turbine/om/RetrieverFactory.java b/src/java/org/apache/turbine/om/RetrieverFactory.java
deleted file mode 100644
index fe1bd81..0000000
--- a/src/java/org/apache/turbine/om/RetrieverFactory.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.apache.turbine.om;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- *
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @version $Id$
- */
-public interface RetrieverFactory
-{
-    /**
-     * Gets an object capable of retrieving objects of type "className"
-     *
-     * @return the object that matches the key
-     */
-    Retriever getInstance(String className)
-        throws Exception;
-}
diff --git a/src/java/org/apache/turbine/om/security/Group.java b/src/java/org/apache/turbine/om/security/Group.java
deleted file mode 100644
index f8a8e3c..0000000
--- a/src/java/org/apache/turbine/om/security/Group.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a Group of Users in the system that are associated
- * with specific entity or resource. The users belonging to the Group may have
- * various Roles. The Permissions to perform actions upon the resource depend
- * on the Roles in the Group that they are assigned.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface Group extends SecurityEntity
-{
-    /**
-     * The name of the <a href="#global">global group</a>
-     */
-    String GLOBAL_GROUP_NAME = "global";
-
-    /**
-     * Makes changes made to the Group attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    void save()
-        throws TurbineSecurityException;
-
-    /**
-     * Removes a group from the system.
-     *
-     * @throws TurbineSecurityException if the Group could not be removed.
-     */
-    void remove()
-        throws TurbineSecurityException;
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Group name.
-     * @throws TurbineSecurityException if the Group could not be renamed.
-     */
-    void rename(String name)
-        throws TurbineSecurityException;
-
-    /**
-     * Grants a Role in this Group to an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Role.
-     */
-    void grant(User user, Role role)
-        throws TurbineSecurityException;
-
-    /**
-     * Grants Roles in this Group to an User.
-     *
-     * @param user An User.
-     * @param roleSet A RoleSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Roles.
-     */
-    void grant(User user, RoleSet roleSet)
-        throws TurbineSecurityException;
-
-    /**
-     * Revokes a Role in this Group from an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Role.
-     */
-    void revoke(User user, Role role)
-        throws TurbineSecurityException;
-
-    /**
-     * Revokes Roles in this group from an User.
-     *
-     * @param user An User.
-     * @param roleSet a RoleSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Roles.
-     */
-    void revoke(User user, RoleSet roleSet)
-        throws TurbineSecurityException;
-
-}
diff --git a/src/java/org/apache/turbine/om/security/Permission.java b/src/java/org/apache/turbine/om/security/Permission.java
deleted file mode 100644
index ce2961b..0000000
--- a/src/java/org/apache/turbine/om/security/Permission.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents the permissions that a Role has to access
- * certain pages/functions within the system.  The class implements
- * Comparable so that when Permissions are added to a Set, they will
- * be in alphabetical order by name.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface Permission extends SecurityEntity
-{
-    /**
-     * Makes changes made to the Permission attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    void save()
-        throws TurbineSecurityException;
-
-    /**
-     * Removes a permission from the system.
-     *
-     * @throws TurbineSecurityException if the Permission could not be removed.
-     */
-    void remove()
-        throws TurbineSecurityException;
-
-    /**
-     * Renames the permission.
-     *
-     * @param name The new Permission name.
-     * @throws TurbineSecurityException if the Permission could not be renamed.
-     */
-    void rename(String name)
-        throws TurbineSecurityException;
-}
diff --git a/src/java/org/apache/turbine/om/security/Role.java b/src/java/org/apache/turbine/om/security/Role.java
deleted file mode 100644
index 5501ad0..0000000
--- a/src/java/org/apache/turbine/om/security/Role.java
+++ /dev/null
@@ -1,165 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a role played by the User associated with the
- * current Session.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface Role extends SecurityEntity
-{
-    /**
-     * Returns the set of Permissions associated with this Role.
-     *
-     * @return A PermissionSet.
-     * @exception Exception A generic exception.
-     */
-    PermissionSet getPermissions()
-        throws Exception;
-
-    /**
-     * Sets the Permissions associated with this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     */
-    void setPermissions(PermissionSet permissionSet);
-
-    // These following methods are wrappers around TurbineSecurity
-
-    /**
-     * Creates a new Role in the system.
-     *
-     * @param name The name of the new Role.
-     * @return An object representing the new Role.
-     * @throws TurbineSecurityException if the Role could not be created.
-     */
-    Role create(String name)
-        throws TurbineSecurityException;
-
-    /**
-     * Makes changes made to the Role attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    void save()
-        throws TurbineSecurityException;
-
-    /**
-     * Removes a role from the system.
-     *
-     * @throws TurbineSecurityException if the Role could not be removed.
-     */
-    void remove()
-        throws TurbineSecurityException;
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Role name.
-     * @throws TurbineSecurityException if the Role could not be renamed.
-     */
-    void rename(String name)
-        throws TurbineSecurityException;
-
-    /**
-     * Grants a Permission to this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permission.
-     */
-    void grant(Permission permission)
-        throws TurbineSecurityException;
-
-    /**
-     * Grants Permissions from a PermissionSet to this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permissions.
-     */
-    void grant(PermissionSet permissionSet)
-        throws TurbineSecurityException;
-
-    /**
-     * Revokes a Permission from this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permission.
-     */
-    void revoke(Permission permission)
-        throws TurbineSecurityException;
-
-    /**
-     * Revokes Permissions from a PermissionSet from this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permissions.
-     */
-    void revoke(PermissionSet permissionSet)
-        throws TurbineSecurityException;
-}
diff --git a/src/java/org/apache/turbine/om/security/SecurityEntity.java b/src/java/org/apache/turbine/om/security/SecurityEntity.java
deleted file mode 100644
index b1c41ad..0000000
--- a/src/java/org/apache/turbine/om/security/SecurityEntity.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This class represents a Group of Users in the system that are associated
- * with specific entity or resource. The users belonging to the Group may have
- * various Roles. The Permissions to perform actions upon the resource depend
- * on the Roles in the Group that they are assigned.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @version $Id$
- */
-
-public interface SecurityEntity
-{
-    /**
-     * Get the Name of the SecurityEntity.
-     *
-     * @return The Name of the SecurityEntity.
-     */
-    String getName();
-
-    /**
-     * Sets the Name of the SecurityEntity.
-     *
-     * @param name Name of the SecurityEntity.
-     */
-    void setName(String name);
-
-    /**
-     * Get the Id of the SecurityEntity.
-     *
-     * @return The Id of the SecurityEntity.
-     */
-    int getId();
-
-    /**
-     * Get the Id of the SecurityEntity as an
-     * Integer object.
-     *
-     * @return The Id of the SecurityEntity.
-     */
-    Integer getIdAsObj();
-
-    /**
-     * Sets the Id of the SecurityEntity.
-     *
-     * @param id The new Id of the SecurityEntity
-     */
-    void setId(int id);
-}
diff --git a/src/java/org/apache/turbine/om/security/SecurityObject.java b/src/java/org/apache/turbine/om/security/SecurityObject.java
deleted file mode 100644
index e9a652b..0000000
--- a/src/java/org/apache/turbine/om/security/SecurityObject.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.torque.om.BaseObject;
-
-/**
- * This class represents a generic object used in the Access Control Lists.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public abstract class SecurityObject extends BaseObject implements Comparable
-{
-    /** The name of this object. */
-    private String name;
-
-    /** The id of this object */
-    private int id;
-
-    /** The attributes of this object. */
-    private Map attributes;
-
-    /**
-     * Constructs a new SecurityObject
-     */
-    public SecurityObject()
-    {
-        this("");
-    }
-
-    /**
-     * Constructs a new SecurityObject with the specified name.
-     *
-     * @param name The name of the new object.
-     */
-    public SecurityObject(String name)
-    {
-        setName(name);
-        setId(0);
-        setAttributes(Collections.synchronizedMap(new HashMap()));
-    }
-
-    /**
-     * Returns a Map containing this object's attributes.
-     *
-     * @return the object's attributes.
-     */
-    public Map getAttributes()
-    {
-        return attributes;
-    }
-
-    /**
-     * Replaces this object's attributes with the specified Map.
-     *
-     * @param attributes The new attributes of the object.
-     */
-    public void setAttributes(Map attributes)
-    {
-        this.attributes = attributes;
-    }
-
-    /**
-     * Retrieves the value of specific attribute of this object.
-     *
-     * @param name the name of the attribute
-     * @return the value of the attribute
-     */
-    public Object getAttribute(String name)
-    {
-        return attributes.get(name);
-    }
-
-    /**
-     * Sets the value of specific attribute of this object.
-     *
-     * @param name the name of the attribute
-     * @param value the value of the attribute
-     */
-    public void setAttribute(String name, Object value)
-    {
-        attributes.put(name, value);
-    }
-
-    /**
-     * Returns the name of this object.
-     *
-     * @return The name of the object.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Sets the name of this object.
-     *
-     * @param name The name of the object.
-     */
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    /**
-     * Unused. There is an ID column in the 
-     * database scheme but it doesn't seem
-     * to be used.
-     *
-     * @return 0
-     */
-    public int getId()
-    {
-        return id;
-    }
-            
-    /**
-     * Unused. There is an ID column in the 
-     * database scheme but it doesn't seem
-     * to be used.
-     *
-     * @return null
-     */
-    public Integer getIdAsObj()
-    {
-        return new Integer(id);
-    }
-
-    /**
-     * Unused. There is an ID column in the 
-     * database scheme but it doesn't seem
-     * to be used.
-     *
-     * @param id The id of the User.
-     */
-    public void setId(int id)
-    {
-        this.id = id;
-    }
-
-    /**
-     * Used for ordering SecurityObjects.
-     *
-     * @param obj The Object to compare to.
-     * @return -1 if the name of the other object is lexically greater than this
-     *         group, 1 if it is lexically lesser, 0 if they are equal.
-     */
-    public int compareTo(Object obj)
-    {
-        if (this.getClass() != obj.getClass())
-        {
-            throw new ClassCastException();
-        }
-        String name1 = ((SecurityObject) obj).getName();
-        String name2 = this.getName();
-
-        return name2.compareTo(name1);
-    }
-
-    /**
-     * Returns a textual representation of this object, consisted by
-     * it's name and attributes.
-     *
-     * @return  a textual representation of this group.
-     */
-    public String toString()
-    {
-        return (getName() + ':' + getAttributes().toString());
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/TurbineGroup.java b/src/java/org/apache/turbine/om/security/TurbineGroup.java
deleted file mode 100644
index 5233dd7..0000000
--- a/src/java/org/apache/turbine/om/security/TurbineGroup.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-import java.util.Iterator;
-
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a Group of Users in the system that are associated
- * with specific entity or resource. The users belonging to the Group may have
- * various Roles. The Permissions to perform actions upon the resource depend
- * on the Roles in the Group that they are assigned.
- *
- * <a name="global">
- * <p> Certain Roles that the Users may have in the system may are not related
- * to any specific resource nor entity.
- * They are assigned within a special group named 'global' that can be
- * referenced in the code as {@link #GLOBAL_GROUP_NAME}.
- * <br>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class TurbineGroup extends SecurityObject implements Group
-{
-    /**
-     * Constructs a new Group.
-     */
-    public TurbineGroup()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new Group with the specified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TurbineGroup(String name)
-    {
-        super(name);
-    }
-
-    // These following methods are wrappers around TurbineSecurity
-
-    /**
-     * Makes changes made to the Group attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while saving data.
-     */
-    public void save() throws TurbineSecurityException
-    {
-        TurbineSecurity.saveGroup(this);
-    }
-
-    /**
-     * not implemented
-     *
-     * @param conn
-     * @throws Exception
-     */
-    public void save(Connection conn) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * not implemented
-     *
-     * @param dbname
-     * @throws Exception
-     */
-    public void save(String dbname) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * Removes a group from the system.
-     *
-     * @throws TurbineSecurityException if the Group could not be removed.
-     */
-    public void remove() throws TurbineSecurityException
-    {
-        TurbineSecurity.removeGroup(this);
-    }
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Group name.
-     * @throws TurbineSecurityException if the Group could not be renamed.
-     */
-    public void rename(String name) throws TurbineSecurityException
-    {
-        TurbineSecurity.renameGroup(this, name);
-    }
-
-    /**
-     * Grants a Role in this Group to an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Role.
-     */
-    public void grant(User user, Role role) throws TurbineSecurityException
-    {
-        TurbineSecurity.grant(user, this, role);
-    }
-
-    /**
-     * Grants Roles in this Group to an User.
-     *
-     * @param user An User.
-     * @param roleSet A RoleSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Roles.
-     */
-    public void grant(User user, RoleSet roleSet)
-            throws TurbineSecurityException
-    {
-        for (Iterator roles = roleSet.iterator(); roles.hasNext();)
-        {
-            TurbineSecurity.grant(user, this, (Role) roles.next());
-        }
-    }
-
-    /**
-     * Revokes a Role in this Group from an User.
-     *
-     * @param user An User.
-     * @param role A Role.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Role.
-     */
-    public void revoke(User user, Role role) throws TurbineSecurityException
-    {
-        TurbineSecurity.revoke(user, this, role);
-    }
-
-    /**
-     * Revokes Roles in this group from an User.
-     *
-     * @param user An User.
-     * @param roleSet a RoleSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Roles.
-     */
-    public void revoke(User user, RoleSet roleSet)
-            throws TurbineSecurityException
-    {
-        for (Iterator roles = roleSet.iterator(); roles.hasNext();)
-        {
-            TurbineSecurity.revoke(user, this, (Role) roles.next());
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/TurbinePermission.java b/src/java/org/apache/turbine/om/security/TurbinePermission.java
deleted file mode 100644
index 5999605..0000000
--- a/src/java/org/apache/turbine/om/security/TurbinePermission.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents the permissions that a Role has to access
- * certain pages/functions within the system.  The class implements
- * Comparable so that when Permissions are added to a Set, they will
- * be in alphabetical order by name.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class TurbinePermission extends SecurityObject implements Permission
-{
-    /**
-     * Constructs a new TurbinePermission.
-     */
-    public TurbinePermission()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new TurbinePermission with the sepcified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TurbinePermission(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * Makes changes made to the Permission attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while saving data.
-     */
-    public void save() throws TurbineSecurityException
-    {
-        TurbineSecurity.savePermission(this);
-    }
-
-    /**
-     * not implemented
-     *
-     * @param conn
-     * @throws Exception
-     */
-    public void save(Connection conn) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * not implemented
-     *
-     * @param dbname
-     * @throws Exception
-     */
-    public void save(String dbname) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * Removes a permission from the system.
-     *
-     * @throws TurbineSecurityException if the Permission could not be removed.
-     */
-    public void remove() throws TurbineSecurityException
-    {
-        TurbineSecurity.removePermission(this);
-    }
-
-    /**
-     * Renames the permission.
-     *
-     * @param name The new Permission name.
-     * @throws TurbineSecurityException if the Permission could not be renamed.
-     */
-    public void rename(String name) throws TurbineSecurityException
-    {
-        TurbineSecurity.renamePermission(this, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/TurbineRole.java b/src/java/org/apache/turbine/om/security/TurbineRole.java
deleted file mode 100644
index 6c808e9..0000000
--- a/src/java/org/apache/turbine/om/security/TurbineRole.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-import java.util.Iterator;
-
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-
-/**
- * This class represents a role played by the User associated with the
- * current Session.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class TurbineRole extends SecurityObject implements Role
-{
-    /**
-     * Constructs a new Role
-     */
-    public TurbineRole()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new Role with the sepcified name.
-     *
-     * @param name The name of the new object.
-     */
-    public TurbineRole(String name)
-    {
-        super(name);
-    }
-
-    /** The permissions for this role. */
-    private PermissionSet permissionSet = null;
-
-    /**
-     * Returns the set of Permissions associated with this Role.
-     *
-     * @return A PermissionSet.
-     * @exception Exception a generic exception.
-     */
-    public PermissionSet getPermissions()
-            throws Exception
-    {
-        return permissionSet;
-    }
-
-    /**
-     * Sets the Permissions associated with this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     */
-    public void setPermissions(PermissionSet permissionSet)
-    {
-        this.permissionSet = permissionSet;
-    }
-
-    // These following methods are wrappers around TurbineSecurity
-
-    /**
-     * Creates a new Role in the system.
-     *
-     * @param name The name of the new Role.
-     * @return An object representing the new Role.
-     * @throws TurbineSecurityException if the Role could not be created.
-     */
-    public Role create(String name)
-            throws TurbineSecurityException
-    {
-        //Role role = new Role(name);
-        Role role = new TurbineRole(name);
-        TurbineSecurity.addRole(role);
-        return role;
-    }
-
-    /**
-     * Makes changes made to the Role attributes permanent.
-     *
-     * @throws TurbineSecurityException if there is a problem while
-     *  saving data.
-     */
-    public void save()
-            throws TurbineSecurityException
-    {
-        TurbineSecurity.saveRole(this);
-    }
-
-    /**
-     * not implemented
-     *
-     * @param conn
-     * @throws Exception
-     */
-    public void save(Connection conn) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * not implemented
-     *
-     * @param dbname
-     * @throws Exception
-     */
-    public void save(String dbname) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * Removes a role from the system.
-     *
-     * @throws TurbineSecurityException if the Role could not be removed.
-     */
-    public void remove()
-            throws TurbineSecurityException
-    {
-        TurbineSecurity.removeRole(this);
-    }
-
-    /**
-     * Renames the role.
-     *
-     * @param name The new Role name.
-     * @throws TurbineSecurityException if the Role could not be renamed.
-     */
-    public void rename(String name)
-            throws TurbineSecurityException
-    {
-        TurbineSecurity.renameRole(this, name);
-    }
-
-    /**
-     * Grants a Permission to this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permission.
-     */
-    public void grant(Permission permission)
-            throws TurbineSecurityException
-    {
-        TurbineSecurity.grant(this, permission);
-    }
-
-    /**
-     * Grants Permissions from a PermissionSet to this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while assigning
-     * the Permissions.
-     */
-    public void grant(PermissionSet permissionSet)
-            throws TurbineSecurityException
-    {
-        for (Iterator permissions = permissionSet.iterator(); permissions.hasNext();)
-        {
-            TurbineSecurity.grant(this, (Permission) permissions.next());
-        }
-    }
-
-    /**
-     * Revokes a Permission from this Role.
-     *
-     * @param permission A Permission.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permission.
-     */
-    public void revoke(Permission permission)
-            throws TurbineSecurityException
-    {
-        TurbineSecurity.revoke(this, permission);
-    }
-
-    /**
-     * Revokes Permissions from a PermissionSet from this Role.
-     *
-     * @param permissionSet A PermissionSet.
-     * @throws TurbineSecurityException if there is a problem while unassigning
-     * the Permissions.
-     */
-    public void revoke(PermissionSet permissionSet)
-            throws TurbineSecurityException
-    {
-        for (Iterator permissions = permissionSet.iterator(); permissions.hasNext();)
-        {
-            TurbineSecurity.revoke(this, (Permission) permissions.next());
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/TurbineUser.java b/src/java/org/apache/turbine/om/security/TurbineUser.java
deleted file mode 100644
index 2538f38..0000000
--- a/src/java/org/apache/turbine/om/security/TurbineUser.java
+++ /dev/null
@@ -1,702 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-
-import java.util.Date;
-import java.util.Hashtable;
-
-import javax.servlet.http.HttpSessionBindingEvent;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.security.TurbineSecurity;
-
-/**
- * A generic implementation of User interface.
- *
- * This basic implementation contains the functionality that is
- * expected to be common among all User implementations.
- * You are welcome to extend this class if you wish to have
- * custom functionality in your user objects (like accessor methods
- * for custom attributes). <b>Note</b> that implementing a different scheme
- * of user data storage normally involves writing an implementation of
- * {@link org.apache.turbine.services.security.UserManager} interface.
- *
- * @author <a href="mailto:josh@stonecottage.com">Josh Lucas</a>
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineUser extends SecurityObject implements User
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineUser.class);
-
-    /** The date on which the user account was created. */
-    private Date createDate = null;
-
-    /** The date on which the user last accessed the application. */
-    private Date lastAccessDate = null;
-
-    /** This is data that will survive a servlet engine restart. */
-    private Hashtable permStorage = null;
-
-    /** This is data that will not survive a servlet engine restart. */
-    private Hashtable tempStorage = null;
-
-    /**
-     * Constructor.
-     *
-     * Create a new User and set the createDate.
-     */
-    public TurbineUser()
-    {
-        super();
-        createDate = new Date();
-        setHasLoggedIn(Boolean.FALSE);
-    }
-
-    /**
-     * Gets the access counter for a user during a session.
-     *
-     * @return The access counter for the user for the session.
-     */
-    public int getAccessCounterForSession()
-    {
-        try
-        {
-            return ((Integer) getTemp(User.SESSION_ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Gets the access counter for a user from perm storage.
-     *
-     * @return The access counter for the user.
-     */
-    public int getAccessCounter()
-    {
-        try
-        {
-            return ((Integer) getPerm(User.ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Gets the create date for this User.  This is the time at which
-     * the user object was created.
-     *
-     * @return A Java Date with the date of creation for the user.
-     */
-    public java.util.Date getCreateDate()
-    {
-        return createDate;
-    }
-
-    /**
-     * Gets the last access date for this User.  This is the last time
-     * that the user object was referenced.
-     *
-     * @return A Java Date with the last access date for the user.
-     */
-    public java.util.Date getLastAccessDate()
-    {
-        if (lastAccessDate == null)
-        {
-            setLastAccessDate();
-        }
-        return lastAccessDate;
-    }
-
-    /**
-     * Get last login date/time for this user.
-     *
-     * @return A Java Date with the last login date for the user.
-     */
-    public java.util.Date getLastLogin()
-    {
-        return (java.util.Date) getPerm(User.LAST_LOGIN);
-    }
-
-    /**
-     * Get password for this user.
-     *
-     * @return A String with the password for the user.
-     */
-    public String getPassword()
-    {
-        return (String) getPerm(User.PASSWORD);
-    }
-
-    /**
-     * Get an object from permanent storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name, or null if not found.
-     */
-    public Object getPerm(String name)
-    {
-        return getPerm(name,null);
-    }
-
-    /**
-     * Get an object from permanent storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getPerm(String name, Object def)
-    {
-        Object val;
-        try
-        {
-            val = getPermStorage().get(name);
-            if (val == null)
-            {
-                val = def;
-            }
-        }
-        catch (Exception e)
-        {
-            val = def;
-        }
-        return val;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getPermStorage()
-    {
-        if (permStorage == null)
-        {
-            permStorage = new Hashtable(10);
-        }
-        return permStorage;
-    }
-
-    /**
-     * Get an object from temporary storage; return null if the
-     * object can't be found.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name)
-    {
-        return getTemp(name, null);
-    }
-
-    /**
-     * Get an object from temporary storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name, Object def)
-    {
-        Object val;
-        try
-        {
-            val = getTempStorage().get(name);
-            if (val == null)
-            {
-                val = def;
-            }
-
-        }
-        catch (Exception e)
-        {
-            val = def;
-        }
-        return val;
-    }
-
-
-    /**
-     * Returns the first name for this user.
-     *
-     * @return A String with the user's first name.
-     */
-    public String getFirstName()
-    {
-        String tmp = null;
-        try
-        {
-            tmp = (String) getPerm(User.FIRST_NAME);
-            if(tmp.length() == 0)
-            {
-                tmp = null;
-            }
-        }
-        catch (Exception e)
-        {
-        }
-        return tmp;
-    }
-
-    /**
-     * Returns the last name for this user.
-     *
-     * @return A String with the user's last name.
-     */
-    public String getLastName()
-    {
-        String tmp = null;
-        try
-        {
-            tmp = (String) getPerm(User.LAST_NAME);
-            if (tmp.length() == 0)
-                tmp = null;
-        }
-        catch (Exception e)
-        {
-        }
-        return tmp;
-    }
-
-    /**
-     * The user is considered logged in if they have not timed out.
-     *
-     * @return Whether the user has logged in.
-     */
-    public boolean hasLoggedIn()
-    {
-        Boolean loggedIn = getHasLoggedIn();
-        return (loggedIn != null && loggedIn.booleanValue());
-    }
-
-    /**
-     * Returns the email address for this user.
-     *
-     * @return A String with the user's email address.
-     */
-    public String getEmail()
-    {
-        return (String) getPerm(User.EMAIL);
-    }
-
-    /**
-     * Increments the permanent hit counter for the user.
-     */
-    public void incrementAccessCounter()
-    {
-        setAccessCounter(getAccessCounter() + 1);
-    }
-
-    /**
-     * Increments the session hit counter for the user.
-     */
-    public void incrementAccessCounterForSession()
-    {
-        setAccessCounterForSession(getAccessCounterForSession() + 1);
-    }
-
-    /**
-     * Remove an object from temporary storage and return the object.
-     *
-     * @param name The name of the object to remove.
-     * @return An Object.
-     */
-    public Object removeTemp(String name)
-    {
-        return getTempStorage().remove(name);
-    }
-
-    /**
-     * Sets the access counter for a user, saved in perm storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounter(int cnt)
-    {
-        setPerm(User.ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * Sets the session access counter for a user, saved in temp
-     * storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounterForSession(int cnt)
-    {
-        setTemp(User.SESSION_ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * Sets the last access date for this User. This is the last time
-     * that the user object was referenced.
-     */
-    public void setLastAccessDate()
-    {
-        lastAccessDate = new java.util.Date();
-    }
-
-    /**
-     * Sets the create date for this User. This is the time at which
-     * the user object was created.
-     *
-     * @param date The create date.
-     */
-    public void setCreateDate(java.util.Date date)
-    {
-        createDate = date;
-    }
-
-    /**
-     * Set last login date/time.
-     *
-     * @param date The last login date.
-     */
-    public void setLastLogin(java.util.Date date)
-    {
-        setPerm(User.LAST_LOGIN, date);
-    }
-
-    /**
-     * Set password.
-     *
-     * @param password The new password.
-     */
-    public void setPassword(String password)
-    {
-        setPerm(User.PASSWORD, password);
-    }
-
-    /**
-     * Put an object into permanent storage. If the value is null,
-     * it will convert that to a "" because the underlying storage
-     * mechanism within TurbineUser is currently a Hashtable and
-     * null is not a valid value.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setPerm(String name, Object value)
-    {
-        getPermStorage().put(name, (value == null) ? "" : value);
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param permStorage A Hashtable.
-     */
-    public void setPermStorage(Hashtable permStorage)
-    {
-        this.permStorage = permStorage;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getTempStorage()
-    {
-        if (tempStorage == null)
-        {
-            tempStorage = new Hashtable(10);
-        }
-        return tempStorage;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    public void setTempStorage(Hashtable tempStorage)
-    {
-        this.tempStorage = tempStorage;
-    }
-
-    /**
-     * This gets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value as a boolean.  This is private because you
-     * should use hasLoggedIn() instead.
-     *
-     * @return True if someone has logged in.
-     */
-    private Boolean getHasLoggedIn()
-    {
-        return (Boolean) getTemp(User.HAS_LOGGED_IN);
-    }
-
-    /**
-     * This sets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value.
-     *
-     * @param value Whether someone has logged in or not.
-     */
-    public void setHasLoggedIn(Boolean value)
-    {
-        setTemp(User.HAS_LOGGED_IN, value);
-    }
-
-    /**
-     * Put an object into temporary storage. If the value is null,
-     * it will convert that to a "" because the underlying storage
-     * mechanism within TurbineUser is currently a Hashtable and
-     * null is not a valid value.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setTemp(String name, Object value)
-    {
-        getTempStorage().put(name, (value == null) ? "" : value);
-    }
-
-
-    /**
-     * Sets the first name for this user.
-     *
-     * @param firstName User's first name.
-     */
-    public void setFirstName(String firstName)
-    {
-        setPerm(User.FIRST_NAME, firstName);
-    }
-
-    /**
-     * Sets the last name for this user.
-     *
-     * @param lastName User's last name.
-     */
-    public void setLastName(String lastName)
-    {
-        setPerm(User.LAST_NAME, lastName);
-    }
-
-    /**
-     * Sets the email address.
-     *
-     * @param address The email address.
-     */
-    public void setEmail(String address)
-    {
-        setPerm(User.EMAIL, address);
-    }
-
-    /**
-     * This method reports whether or not the user has been confirmed
-     * in the system by checking the User.CONFIRM_VALUE
-     * column in the users record to see if it is equal to
-     * User.CONFIRM_DATA.
-     *
-     * @return True if the user has been confirmed.
-     */
-    public boolean isConfirmed()
-    {
-        String value = getConfirmed();
-        return (value != null && value.equals(User.CONFIRM_DATA));
-    }
-
-    /**
-     * Sets the confirmation value. The value should
-     * be either a random string or User.CONFIRM_DATA
-     *
-     * @param value The confirmation key value.
-     */
-    public void setConfirmed(String value)
-    {
-        String val = "";
-        if (value != null)
-        {
-            val = value;
-        }
-        setPerm(User.CONFIRM_VALUE, val);
-    }
-
-    /**
-     * Gets the confirmation value.
-     *
-     * @return status The confirmation value for this User
-     */
-    public String getConfirmed()
-    {
-        return (String) getPerm(User.CONFIRM_VALUE);
-    }
-
-    /**
-     * Updates the last login date in the database.
-     *
-     * @exception Exception a generic exception.
-     */
-    public void updateLastLogin()
-            throws Exception
-    {
-        setPerm(User.LAST_LOGIN, new java.util.Date());
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Bound to the session.
-     *
-     * @param hsbe The HttpSessionBindingEvent.
-     */
-    public void valueBound(HttpSessionBindingEvent hsbe)
-    {
-        // Currently we have no need for this method.
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Unbound from the session.
-     *
-     * @param hsbe The HttpSessionBindingEvent.
-     */
-    public void valueUnbound(HttpSessionBindingEvent hsbe)
-    {
-        try
-        {
-            if (hasLoggedIn())
-            {
-                TurbineSecurity.saveOnSessionUnbind(this);
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("TurbineUser.valueUnbound(): " + e.getMessage(), e);
-        }
-    }
-
-    /**
-     * Saves this object to the data store.
-     */
-    public void save()
-            throws Exception
-    {
-        if (TurbineSecurity.accountExists(this))
-        {
-            TurbineSecurity.saveUser(this);
-        }
-        else
-        {
-            TurbineSecurity.addUser(this, getPassword());
-        }
-    }
-
-    /**
-     * not implemented
-     *
-     * @param conn
-     * @throws Exception
-     */
-    public void save(Connection conn) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * not implemented
-     *
-     * @param dbname
-     * @throws Exception
-     */
-    public void save(String dbname) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * Returns the name of this user.  This will be the user name/
-     * login name.
-     *
-     * @return The name of the user.
-     */
-    public String getName()
-    {
-        return (String) getPerm(User.USERNAME);
-    }
-
-    /**
-     * Sets the name of this user.  This will be the user name/
-     * login name.
-     *
-     * @param name The name of the object.
-     */
-    public void setName(String name)
-    {
-        setPerm(User.USERNAME, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/User.java b/src/java/org/apache/turbine/om/security/User.java
deleted file mode 100644
index fb03e18..0000000
--- a/src/java/org/apache/turbine/om/security/User.java
+++ /dev/null
@@ -1,400 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import java.util.Hashtable;
-
-import javax.servlet.http.HttpSessionBindingListener;
-
-/**
- * This interface represents functionality that all users of the
- * Turbine system require.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface User
-    extends HttpSessionBindingListener, Serializable, SecurityEntity
-{
-    /** The 'perm storage' key name for the first name. */
-    String FIRST_NAME = "FIRST_NAME";
-
-    /** The 'perm storage' key name for the last name. */
-    String LAST_NAME = "LAST_NAME";
-
-    /** The 'perm storage' key name for the last_login field. */
-    String LAST_LOGIN = "LAST_LOGIN";
-
-    /** The 'perm storage' key name for the password field. */
-    String PASSWORD = "PASSWORD_VALUE";
-
-    /** The 'perm storage' key name for the username field. */
-    String USERNAME = "LOGIN_NAME";
-
-    /** The 'perm storage' key for the confirm_value field. */
-    String CONFIRM_VALUE = "CONFIRM_VALUE";
-
-    /** The 'perm storage' key for the email field. */
-    String EMAIL = "EMAIL";
-
-    /** This is the value that is stored in the database for confirmed users */
-    String CONFIRM_DATA = "CONFIRMED";
-
-    /** The 'perm storage' key name for the access counter. */
-    String ACCESS_COUNTER = "_access_counter";
-
-    /** The 'temp storage' key name for the session access counter */
-    String SESSION_ACCESS_COUNTER = "_session_access_counter";
-
-    /** The 'temp storage' key name for the 'has logged in' flag */
-    String HAS_LOGGED_IN = "_has_logged_in";
-
-    /** The session key for the User object. */
-    String SESSION_KEY = "turbine.user";
-
-    /**
-     * Gets the access counter for a user from perm storage.
-     *
-     * @return The access counter for the user.
-     */
-    int getAccessCounter();
-
-    /**
-     * Gets the access counter for a user during a session.
-     *
-     * @return The access counter for the user for the session.
-     */
-    int getAccessCounterForSession();
-
-    /**
-     * Gets the last access date for this User. This is the last time
-     * that the user object was referenced.
-     *
-     * @return A Java Date with the last access date for the user.
-     */
-    java.util.Date getLastAccessDate();
-
-    /**
-     * Gets the create date for this User.  This is the time at which
-     * the user object was created.
-     *
-     * @return A Java Date with the date of creation for the user.
-     */
-    java.util.Date getCreateDate();
-
-    /**
-     * Returns the user's last login date.
-     *
-     * @return A Java Date with the last login date for the user.
-     */
-    java.util.Date getLastLogin();
-
-    /**
-     * Returns the user's password. This method should not be used by
-     * the application directly, because it's meaning depends upon
-     * the implementation of UserManager that manages this particular
-     * user object. Some implementations will use this attribute for
-     * storing a password encrypted in some way, other will not use
-     * it at all, when user entered password is presented to some external
-     * authority (like NT domain controller) to validate it.
-     * See also {@link org.apache.turbine.services.security.UserManager#authenticate(User,String)}.
-     *
-     * @return A String with the password for the user.
-     */
-    String getPassword();
-
-    /**
-     * Get an object from permanent storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    Object getPerm(String name);
-
-    /**
-     * Get an object from permanent storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    Object getPerm(String name, Object def);
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    Hashtable getPermStorage();
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    Hashtable getTempStorage();
-
-    /**
-     * Get an object from temporary storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    Object getTemp(String name);
-
-    /**
-     * Get an object from temporary storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    Object getTemp(String name, Object def);
-
-    /**
-     * Returns the first name for this user.
-     *
-     * @return A String with the user's first name.
-     */
-
-    String getFirstName();
-
-    /**
-     * Returns the last name for this user.
-     *
-     * @return A String with the user's last name.
-     */
-    String getLastName();
-
-    /**
-     * Returns the email address for this user.
-     *
-     * @return A String with the user's email address.
-     */
-    String getEmail();
-
-    /**
-     * This sets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value.
-     *
-     * @param value Whether someone has logged in or not.
-     */
-    void setHasLoggedIn(Boolean value);
-
-    /**
-     * The user is considered logged in if they have not timed out.
-     *
-     * @return True if the user has logged in.
-     */
-    boolean hasLoggedIn();
-
-    /**
-     * Increments the permanent hit counter for the user.
-     */
-    void incrementAccessCounter();
-
-    /**
-     * Increments the session hit counter for the user.
-     */
-    void incrementAccessCounterForSession();
-
-    /**
-     * Remove an object from temporary storage and return the object.
-     *
-     * @param name The name of the object to remove.
-     * @return An Object.
-     */
-    Object removeTemp(String name);
-
-    /**
-     * Sets the access counter for a user, saved in perm storage.
-     *
-     * @param cnt The new count.
-     */
-    void setAccessCounter(int cnt);
-
-    /**
-     * Sets the session access counter for a user, saved in temp
-     * storage.
-     *
-     * @param cnt The new count.
-     */
-    void setAccessCounterForSession(int cnt);
-
-    /**
-     * Sets the last access date for this User. This is the last time
-     * that the user object was referenced.
-     */
-    void setLastAccessDate();
-
-    /**
-     * Set last login date/time.
-     *
-     * @param lastLogin The last login date.
-     */
-    void setLastLogin(java.util.Date lastLogin);
-
-    /**
-     * Set password. Application should not use this method
-     * directly, see {@link #getPassword()}.
-     * See also {@link org.apache.turbine.services.security.UserManager#changePassword(User,String,String)}.
-     *
-     * @param password The new password.
-     */
-
-    void setPassword(String password);
-
-    /**
-     * Put an object into permanent storage.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    void setPerm(String name,
-                 Object value);
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    void setPermStorage(Hashtable storage);
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    void setTempStorage(Hashtable storage);
-
-    /**
-     * Put an object into temporary storage.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    void setTemp(String name, Object value);
-
-    /**
-     * Sets the first name for this user.
-     *
-     * @param firstName User's first name.
-     */
-    void setFirstName(String firstName);
-
-    /**
-     * Sets the last name for this user.
-     *
-     * @param lastName User's last name.
-     */
-    void setLastName(String lastName);
-
-    /**
-     * Sets the creation date for this user.
-     *
-     * @param date Creation date
-     */
-    void setCreateDate(java.util.Date date);
-
-    /**
-     * Sets the email address.
-     *
-     * @param address The email address.
-     */
-    void setEmail(String address);
-
-    /**
-     * This method reports whether or not the user has been confirmed
-     * in the system by checking the TurbineUserPeer.CONFIRM_VALUE
-     * column to see if it is equal to CONFIRM_DATA.
-     *
-     * @return True if the user has been confirmed.
-     */
-    boolean isConfirmed();
-
-    /**
-     * Sets the confirmation value.
-     *
-     * @param value The confirmation key value.
-     */
-    void setConfirmed(String value);
-
-    /**
-     * Gets the confirmation value.
-     *
-     * @return The confirmed value
-     */
-    String getConfirmed();
-
-    /**
-     * Updates the last login date in the database.
-     *
-     * @exception Exception A generic exception.
-     */
-    void updateLastLogin()
-        throws Exception;
-}
diff --git a/src/java/org/apache/turbine/om/security/package.html b/src/java/org/apache/turbine/om/security/package.html
deleted file mode 100644
index cd18c88..0000000
--- a/src/java/org/apache/turbine/om/security/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Security object definitions for the Security Service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/om/security/peer/GroupPeer.java b/src/java/org/apache/turbine/om/security/peer/GroupPeer.java
deleted file mode 100644
index 39b3e11..0000000
--- a/src/java/org/apache/turbine/om/security/peer/GroupPeer.java
+++ /dev/null
@@ -1,278 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import com.workingdogs.village.Record;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.om.NumberKey;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.SecurityObject;
-import org.apache.turbine.om.security.TurbineGroup;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.GroupSet;
-
-/**
- * This class handles all the database access for the Group table.
- * This table contains all the Groups that a given member can play.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class GroupPeer extends BasePeer
-{
-    /** The map builder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    /** The table name for this peer. */
-    private static final String TABLE_NAME = MAP_BUILDER.getTableGroup();
-
-    /** The column name for the Group id field. */
-    public static final String GROUP_ID = MAP_BUILDER.getGroup_GroupId();
-
-    /** The column name for the name field. */
-    public static final String NAME = MAP_BUILDER.getGroup_Name();
-
-    /** The column name for the ObjectData field */
-    public static final String OBJECTDATA = MAP_BUILDER.getGroup_ObjectData();
-
-    /**
-     * Retrieves/assembles a GroupSet of all of the Groups.
-     *
-     * @return A GroupSet.
-     * @exception Exception a generic exception.
-     */
-    public static GroupSet retrieveSet() throws Exception
-    {
-        return retrieveSet(new Criteria());
-    }
-
-    /**
-     * Retrieves/assembles a GroupSet based on the Criteria passed in
-     *
-     * @param criteria The criteria to use.
-     * @throws Exception a generic exception.
-     * @return a GroupSet
-     */
-    public static GroupSet retrieveSet(Criteria criteria) throws Exception
-    {
-        List results = GroupPeer.doSelect(criteria);
-        GroupSet rs = new GroupSet();
-        for (int i = 0; i < results.size(); i++)
-        {
-            rs.add((Group) results.get(i));
-        }
-        return rs;
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria object containing data that is used to create
-     *        the SELECT statement.
-     * @return Vector containing Group objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria) throws TorqueException
-    {
-        try
-        {
-            criteria.addSelectColumn(GROUP_ID)
-                    .addSelectColumn(NAME)
-                    .addSelectColumn(OBJECTDATA);
-
-            if (criteria.getOrderByColumns() == null
-                    || criteria.getOrderByColumns().size() == 0)
-            {
-                criteria.addAscendingOrderByColumn(NAME);
-            }
-
-            // Place any checks here to intercept criteria which require
-            // custom SQL.  For example:
-            // if ( criteria.containsKey("SomeTable.SomeColumn") )
-            // {
-            //     String whereSql = "SomeTable.SomeColumn IN (Select ...";
-            //     criteria.add("SomeTable.SomeColumn",
-            //                  whereSQL, criteria.CUSTOM);
-            // }
-
-            // BasePeer returns a Vector of Value (Village) arrays.  The
-            // array order follows the order columns were placed in the
-            // Select clause.
-            List rows = BasePeer.doSelect(criteria);
-            List results = new ArrayList();
-
-            // Populate the object(s).
-            for (int i = 0; i < rows.size(); i++)
-            {
-                Group obj = TurbineSecurity.getGroupInstance(null);
-                Record row = (Record) rows.get(i);
-                ((SecurityObject) obj).setPrimaryKey(
-                        new NumberKey(row.getValue(1).asInt()));
-                ((SecurityObject) obj).setName(row.getValue(2).asString());
-                byte[] objectData = row.getValue(3).asBytes();
-                Map temp = (Map) ObjectUtils.deserialize(objectData);
-                if (temp != null)
-                {
-                    ((SecurityObject) obj).setAttributes(temp);
-                }
-                results.add(obj);
-            }
-
-            return results;
-        }
-        catch (Exception ex)
-        {
-            throw new TorqueException(ex);
-        }
-    }
-
-    /**
-     * Issues an update based on a criteria.
-     *
-     * @param criteria object containing data that is used to create
-     *        the UPDATE statement.
-     * @exception TorqueException a generic exception.
-     */
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        Criteria selectCriteria = new Criteria(2);
-        selectCriteria.put(GROUP_ID, criteria.remove(GROUP_ID));
-        BasePeer.doUpdate(selectCriteria, criteria);
-    }
-
-    /**
-     * Checks if a Group is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param group The Group to be checked.
-     * @return <code>true</code> if given Group exists in the system.
-     * @throws DataBackendException when more than one Group with
-     *         the same name exists.
-     * @throws Exception a generic exception.
-     */
-    public static boolean checkExists(Group group)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addSelectColumn(GROUP_ID);
-        criteria.add(NAME, ((SecurityObject) group).getName());
-        List results = BasePeer.doSelect(criteria);
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple groups named '"
-                    + ((TurbineGroup) group).getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return TABLE_NAME;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of the column
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Builds a criteria object based upon an Group object
-     *
-     * @param group object to build the Criteria
-     * @return the Criteria
-     */
-    public static Criteria buildCriteria(Group group)
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(NAME, ((SecurityObject) group).getName());
-        if (!((BaseObject) group).isNew())
-        {
-            criteria.add(GROUP_ID, ((BaseObject) group).getPrimaryKey());
-        }
-        // Causing the removal and updating of a group to
-        // crap out.
-        //criteria.add(OBJECTDATA, group.getAttributes());
-        return criteria;
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/PermissionPeer.java b/src/java/org/apache/turbine/om/security/peer/PermissionPeer.java
deleted file mode 100644
index 408ed4e..0000000
--- a/src/java/org/apache/turbine/om/security/peer/PermissionPeer.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.om.NumberKey;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.SecurityObject;
-import org.apache.turbine.om.security.TurbineRole;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.PermissionSet;
-import com.workingdogs.village.Record;
-
-/**
- * This class handles all the database access for the PERMISSION
- * table.  This table contains all the permissions that are used in
- * the system.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class PermissionPeer extends BasePeer
-{
-    /** The map builder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    /** The table name for this peer. */
-    private static final String TABLE_NAME = MAP_BUILDER.getTablePermission();
-
-    /** The column name for the permission id field. */
-    public static final String PERMISSION_ID
-            = MAP_BUILDER.getPermission_PermissionId();
-
-    /** The column name for the name field. */
-    public static final String NAME = MAP_BUILDER.getPermission_Name();
-
-    /** The column name for the ObjectData field */
-    public static final String OBJECTDATA
-            = MAP_BUILDER.getPermission_ObjectData();
-
-    /**
-     * Retrieves/assembles a PermissionSet
-     *
-     * @param criteria The criteria to use.
-     * @return A PermissionSet.
-     * @exception Exception a generic exception.
-     */
-    public static PermissionSet retrieveSet(Criteria criteria)
-        throws Exception
-    {
-        List results = PermissionPeer.doSelect(criteria);
-        PermissionSet ps = new PermissionSet();
-        for (int i = 0; i < results.size(); i++)
-        {
-            ps.add((Permission) results.get(i));
-        }
-        return ps;
-    }
-
-    /**
-     * Retrieves a set of Permissions associated with a particular Role.
-     *
-     * @param role The role to query permissions of.
-     * @return A set of permissions associated with the Role.
-     * @exception Exception a generic exception.
-     */
-    public static PermissionSet retrieveSet(Role role)
-            throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(RolePermissionPeer.ROLE_ID,
-                ((TurbineRole) role).getPrimaryKey());
-        criteria.addJoin(RolePermissionPeer.PERMISSION_ID,
-                PermissionPeer.PERMISSION_ID);
-        return retrieveSet(criteria);
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the SELECT statement.
-     * @return Vector containing Permission objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria)
-            throws TorqueException
-    {
-        try
-        {
-            criteria.addSelectColumn(PERMISSION_ID)
-                    .addSelectColumn(NAME)
-                    .addSelectColumn(OBJECTDATA);
-
-            if (criteria.getOrderByColumns() == null
-                    || criteria.getOrderByColumns().size() == 0)
-            {
-                criteria.addAscendingOrderByColumn(NAME);
-            }
-
-            // Place any checks here to intercept criteria which require
-            // custom SQL.  For example:
-            // if ( criteria.containsKey("SomeTable.SomeColumn") )
-            // {
-            //     String whereSql = "SomeTable.SomeColumn IN (Select ...";
-            //     criteria.add("SomeTable.SomeColumn",
-            //                  whereSQL, criteria.CUSTOM);
-            // }
-
-            // BasePeer returns a Vector of Value (Village) arrays.  The
-            // array order follows the order columns were placed in the
-            // Select clause.
-            List rows = BasePeer.doSelect(criteria);
-            List results = new ArrayList();
-
-            // Populate the object(s).
-            for (int i = 0; i < rows.size(); i++)
-            {
-                Permission obj = TurbineSecurity.getPermissionInstance(null);
-                Record row = (Record) rows.get(i);
-                ((SecurityObject) obj).setPrimaryKey(
-                        new NumberKey(row.getValue(1).asInt()));
-                ((SecurityObject) obj).setName(row.getValue(2).asString());
-                byte[] objectData = row.getValue(3).asBytes();
-                Map temp = (Map) ObjectUtils.deserialize(objectData);
-                if (temp != null)
-                {
-                    ((SecurityObject) obj).setAttributes(temp);
-                }
-                results.add(obj);
-            }
-
-            return results;
-        }
-        catch (Exception ex)
-        {
-            throw new TorqueException(ex);
-        }
-    }
-
-    /**
-     * Builds a criteria object based upon an Permission object
-     *
-     * @param permission object to build the criteria
-     * @return the Criteria
-     */
-    public static Criteria buildCriteria(Permission permission)
-    {
-        Criteria criteria = new Criteria();
-        if (!((BaseObject) permission).isNew())
-        {
-            criteria.add(PERMISSION_ID,
-                    ((BaseObject) permission).getPrimaryKey());
-        }
-        criteria.add(NAME, ((SecurityObject) permission).getName());
-
-        /*
-         * This is causing the the removal and updating of
-         * a permission to crap out. This addition to the
-         * criteria produces something like:
-         *
-         * where OBJECTDATA = {}
-         *
-         * Is the NAME even necessary. Wouldn't
-         * criteria.add(PERMISSION_ID, N) be enough to
-         * generate a where clause that would remove the
-         * permission?
-         *
-         * criteria.add(OBJECTDATA, permission.getAttributes());
-         */
-        return criteria;
-    }
-
-    /**
-     * Issues an update based on a criteria.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the UPDATE statement.
-     * @exception TorqueException a generic exception.
-     */
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        Criteria selectCriteria = new Criteria(2);
-        selectCriteria.put(PERMISSION_ID, criteria.remove(PERMISSION_ID));
-        BasePeer.doUpdate(selectCriteria, criteria);
-    }
-
-    /**
-     * Checks if a Permission is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param permission The Permission to be checked.
-     * @return <code>true</code> if given Permission exists in the system.
-     * @throws DataBackendException when more than one Permission with
-     *         the same name exists.
-     * @throws Exception a generic exception.
-     */
-    public static boolean checkExists(Permission permission)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addSelectColumn(PERMISSION_ID);
-        criteria.add(NAME, ((SecurityObject) permission).getName());
-        List results = BasePeer.doSelect(criteria);
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple permissions named '"
-                    + ((SecurityObject) permission).getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return TABLE_NAME;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Pass in two Vector's of Permission Objects.  It will return a
-     * new Vector with the difference of the two Vectors: C = (A - B).
-     *
-     * @param some Vector B in C = (A - B).
-     * @param all Vector A in C = (A - B).
-     * @return Vector C in C = (A - B).
-     */
-    public static final Vector getDifference(Vector some, Vector all)
-    {
-        Vector clone = (Vector) all.clone();
-        for (Enumeration e = some.elements(); e.hasMoreElements();)
-        {
-            Permission tmp = (Permission) e.nextElement();
-            for (Enumeration f = clone.elements(); f.hasMoreElements();)
-            {
-                Permission tmp2 = (Permission) f.nextElement();
-                if (((BaseObject) tmp).getPrimaryKey()
-                        == ((BaseObject) tmp2).getPrimaryKey())
-                {
-                    clone.removeElement(tmp2);
-                    break;
-                }
-            }
-        }
-        return clone;
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/RolePeer.java b/src/java/org/apache/turbine/om/security/peer/RolePeer.java
deleted file mode 100644
index 8211558..0000000
--- a/src/java/org/apache/turbine/om/security/peer/RolePeer.java
+++ /dev/null
@@ -1,288 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import org.apache.torque.TorqueException;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.om.NumberKey;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.TurbineRole;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.RoleSet;
-import com.workingdogs.village.Record;
-
-
-/**
- * This class handles all the database access for the ROLE table.
- * This table contains all the roles that a given member can play.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class RolePeer extends BasePeer
-{
-    /** The map builder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    /** The table name for this peer. */
-    private static final String TABLE_NAME = MAP_BUILDER.getTableRole();
-
-    /** The column name for the role id field. */
-    public static final String ROLE_ID = MAP_BUILDER.getRole_RoleId();
-
-    /** The column name for the name field. */
-    public static final String NAME = MAP_BUILDER.getRole_Name();
-
-    /** The column name for the ObjectData field */
-    public static final String OBJECTDATA = MAP_BUILDER.getRole_ObjectData();
-
-    /**
-     * Retrieves/assembles a RoleSet based on the Criteria passed in
-     *
-     * @param criteria The criteria to use.
-     * @return a RoleSet
-     * @exception Exception a generic exception.
-     */
-    public static RoleSet retrieveSet(Criteria criteria) throws Exception
-    {
-        List results = RolePeer.doSelect(criteria);
-        RoleSet rs = new RoleSet();
-        for (int i = 0; i < results.size(); i++)
-        {
-            rs.add((Role) results.get(i));
-        }
-        return rs;
-    }
-
-    /**
-     * Retrieves a set of Roles that an User was assigned in a Group
-     *
-     * @param user An user.
-     * @param group A group
-     * @return A Set of Roles of this User in the Group
-     * @exception Exception a generic exception.
-     */
-    public static RoleSet retrieveSet(User user, Group group) throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(UserGroupRolePeer.USER_ID,
-                ((Persistent) user).getPrimaryKey());
-        criteria.add(UserGroupRolePeer.GROUP_ID,
-                ((Persistent) group).getPrimaryKey());
-        criteria.addJoin(UserGroupRolePeer.ROLE_ID, RolePeer.ROLE_ID);
-        return retrieveSet(criteria);
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria object containing data that is used to create
-     *        the SELECT statement.
-     * @return Vector containing Role objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria) throws TorqueException
-    {
-        try
-        {
-            criteria.addSelectColumn(ROLE_ID)
-                    .addSelectColumn(NAME)
-                    .addSelectColumn(OBJECTDATA);
-
-            if (criteria.getOrderByColumns() == null
-                    || criteria.getOrderByColumns().size() == 0)
-            {
-                criteria.addAscendingOrderByColumn(NAME);
-            }
-
-            // Place any checks here to intercept criteria which require
-            // custom SQL.  For example:
-            // if ( criteria.containsKey("SomeTable.SomeColumn") )
-            // {
-            //     String whereSql = "SomeTable.SomeColumn IN (Select ...";
-            //     criteria.add("SomeTable.SomeColumn",
-            //                  whereSQL, criteria.CUSTOM);
-            // }
-
-            // BasePeer returns a Vector of Value (Village) arrays.  The
-            // array order follows the order columns were placed in the
-            // Select clause.
-            List rows = BasePeer.doSelect(criteria);
-            List results = new ArrayList();
-
-            // Populate the object(s).
-            for (int i = 0; i < rows.size(); i++)
-            {
-                //Role obj = new Role();
-                Role obj = new TurbineRole();
-                Record row = (Record) rows.get(i);
-                ((TurbineRole) obj).setPrimaryKey(
-                        new NumberKey(row.getValue(1).asInt()));
-                ((TurbineRole) obj).setName(row.getValue(2).asString());
-                byte[] objectData = row.getValue(3).asBytes();
-                Map temp = (Map) ObjectUtils.deserialize(objectData);
-                if (temp != null)
-                {
-                    ((TurbineRole) obj).setAttributes(temp);
-                }
-                results.add(obj);
-            }
-
-            return results;
-        }
-        catch (Exception ex)
-        {
-            throw new TorqueException (ex);
-        }
-    }
-
-    /**
-     * Builds a criteria object based upon an Role object
-     *
-     * @param role object to build the criteria
-     * @return the Criteria
-     */
-    public static Criteria buildCriteria(Role role)
-    {
-        Criteria criteria = new Criteria();
-        if (!((BaseObject) role).isNew())
-        {
-            criteria.add(ROLE_ID, ((BaseObject) role).getPrimaryKey());
-        }
-        criteria.add(NAME, role.getName());
-        // causing the removal and updating of roles to
-        // crap out because of the generated SQL.
-        //criteria.add(OBJECTDATA, role.getAttributes());
-        return criteria;
-    }
-
-    /**
-     * Issues an update based on a criteria.
-     *
-     * @param criteria object containing data that is used to create
-     *        the UPDATE statement.
-     * @exception TorqueException a generic exception.
-     */
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        Criteria selectCriteria = new Criteria(2);
-        selectCriteria.put(ROLE_ID, criteria.remove(ROLE_ID));
-        BasePeer.doUpdate(selectCriteria, criteria);
-    }
-
-    /**
-     * Checks if a Role is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param role The Role to be checked.
-     * @return <code>true</code> if given Role exists in the system.
-     * @throws DataBackendException when more than one Role with
-     *         the same name exists.
-     * @throws Exception a generic exception.
-     */
-    public static boolean checkExists(Role role)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addSelectColumn(ROLE_ID);
-        criteria.add(NAME, role.getName());
-        List results = BasePeer.doSelect(criteria);
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple roles named '"
-                    + role.getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return TABLE_NAME;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName (String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/RolePermissionPeer.java b/src/java/org/apache/turbine/om/security/peer/RolePermissionPeer.java
deleted file mode 100644
index 2ac653c..0000000
--- a/src/java/org/apache/turbine/om/security/peer/RolePermissionPeer.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-
-/**
- * This class handles all database access for the
- * ROLE_PERMISSION table.  This table contains all
- * the permissions for a given role.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @version $Id$
- */
-public class RolePermissionPeer extends BasePeer
-{
-    /** The map builder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    /** The table name for this peer. */
-    public static final String TABLE_NAME = MAP_BUILDER.getTableRolePermission();
-
-    /** The column name for the permission id field. */
-    public static final String PERMISSION_ID
-            = MAP_BUILDER.getRolePermission_PermissionId();
-
-    /** The column name for the role id field. */
-    public static final String ROLE_ID = MAP_BUILDER.getRolePermission_RoleId();
-
-
-    /**
-     * Deletes the mappings for a role_id.
-     *
-     * @param role_id An int with the role id.
-     * @exception Exception a generic exception.
-     */
-    public static void deleteRole(int role_id) throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(ROLE_ID, role_id);
-        doDelete(criteria);
-    }
-
-    /**
-     * Deletes the mappings for a permission_id.
-     *
-     * @param permission_id An int with the permission id.
-     * @exception Exception a generic exception.
-     */
-    public static void deletePermission(int permission_id) throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(PERMISSION_ID, permission_id);
-        doDelete(criteria);
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/TurbineUserPeer.java b/src/java/org/apache/turbine/om/security/peer/TurbineUserPeer.java
deleted file mode 100644
index 705c9f0..0000000
--- a/src/java/org/apache/turbine/om/security/peer/TurbineUserPeer.java
+++ /dev/null
@@ -1,590 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.sql.Connection;
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.List;
-
-import com.workingdogs.village.Column;
-import com.workingdogs.village.Record;
-import com.workingdogs.village.Schema;
-import com.workingdogs.village.Value;
-
-import org.apache.torque.TorqueException;
-import org.apache.torque.map.TableMap;
-import org.apache.torque.om.NumberKey;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.BasePeer;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.ObjectUtils;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-import org.apache.turbine.util.security.DataBackendException;
-
-/**
- * This class handles all the database access for the User/User
- * table.  This table contains all the information for a given user.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class TurbineUserPeer extends BasePeer implements UserPeer
-{
-    /** The mapBuilder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    // column names
-    /** The column name for the visitor id field. */
-    private static final String USER_ID_COLUMN = MAP_BUILDER.getUserId();
-
-    /** This is the value that is stored in the database for confirmed users. */
-    public static final String CONFIRM_DATA
-            = org.apache.turbine.om.security.User.CONFIRM_DATA;
-
-    /** The column name for the visitor id field. */
-    private static final String OBJECT_DATA_COLUMN = MAP_BUILDER.getObjectData();
-
-    /** The table name for this peer. */
-    private static final String TABLE_NAME = MAP_BUILDER.getTableUser();
-
-    // Criteria Keys
-    /** The key name for the visitor id field. */
-    public static final String USER_ID = MAP_BUILDER.getUser_UserId();
-
-    /** The key name for the username field. */
-    public static final String USERNAME = MAP_BUILDER.getUser_Username();
-
-    /** The key name for the password field. */
-    public static final String PASSWORD = MAP_BUILDER.getUser_Password();
-
-    /** The key name for the first name field. */
-    public static final String FIRST_NAME = MAP_BUILDER.getUser_FirstName();
-
-    /** The key name for the last name field. */
-    public static final String LAST_NAME = MAP_BUILDER.getUser_LastName();
-
-    /** The key name for the modified field. */
-    public static final String MODIFIED = MAP_BUILDER.getUser_Modified();
-
-    /** The key name for the created field. */
-    public static final String CREATED = MAP_BUILDER.getUser_Created();
-
-    /** The key name for the email field. */
-    public static final String EMAIL = MAP_BUILDER.getUser_Email();
-
-    /** The key name for the last_login field. */
-    public static final String LAST_LOGIN = MAP_BUILDER.getUser_LastLogin();
-
-    /** The key name for the confirm_value field. */
-    public static final String CONFIRM_VALUE
-            = MAP_BUILDER.getUser_ConfirmValue();
-
-    /** The key name for the object_data field. */
-    public static final String OBJECT_DATA = MAP_BUILDER.getUser_ObjectData();
-
-    /** The schema. */
-    private static Schema schema = initTableSchema(TABLE_NAME);
-
-    /** The columns. */
-    private static Column[] columns
-            = initTableColumns(schema);
-
-    /** The names of the columns. */
-    public static String[] columnNames = initColumnNames(columns);
-
-    /** The keys for the criteria. */
-    public static String[] criteriaKeys
-            = initCriteriaKeys(TABLE_NAME, columnNames);
-
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return TABLE_NAME;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     *
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    public String getFullColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-
-    /**
-     * Builds a criteria object based upon an User object.  Data
-     * stored in the permData table which a key matching a column
-     * name is removed from the permData table and added as a criterion.
-     * All remaining data in the permData table is serialized and
-     * added as a criterion for the OBJECT_DATA column.
-     *
-     * @param user object to build the criteria
-     * @return the Criteria
-     */
-    public static Criteria buildCriteria(User user)
-    {
-        Hashtable permData = (Hashtable) user.getPermStorage().clone();
-        Criteria criteria = new Criteria();
-        if (!((Persistent) user).isNew())
-        {
-            criteria.add(USER_ID, ((Persistent) user).getPrimaryKey());
-        }
-
-        for (int i = 1; i < TurbineUserPeer.columnNames.length; i++)
-        {
-            if (permData.containsKey(TurbineUserPeer.columnNames[i]))
-            {
-                criteria.add(TurbineUserPeer.criteriaKeys[i],
-                        permData.remove(TurbineUserPeer.columnNames[i]));
-            }
-        }
-        criteria.add(TurbineUserPeer.OBJECT_DATA, permData);
-        return criteria;
-    }
-
-    /**
-     * Add all the columns needed to create a new object
-     *
-     * @param criteria The criteria to use.
-     * @exception TorqueException a generic exception.
-     */
-    public static void addSelectColumns(Criteria criteria)
-            throws TorqueException
-    {
-        for (int i = 0; i < columnNames.length; i++)
-        {
-            criteria.addSelectColumn(new StringBuffer()
-                .append(TABLE_NAME)
-                .append(".")
-                .append(columnNames[i]).toString());
-        }
-    }
-
-    /**
-     *
-     * @param row
-     * @param offset
-     * @param obj
-     * @throws TorqueException
-     */
-    public static void populateObject(Record row, int offset, User obj)
-        throws TorqueException
-    {
-        try
-        {
-            // Set values are where columns are expected.  They are not
-            // required to be in these positions, as we set the positions
-            // immediately following.
-            int idPosition = 1;
-            int objectDataPosition = columnNames.length;
-            for (int i = 0; i < columnNames.length; i++)
-            {
-                if (columnNames[i].equals(USER_ID_COLUMN))
-                {
-                    idPosition = i + 1;
-                }
-                if (columnNames[i].equals(OBJECT_DATA_COLUMN))
-                {
-                    objectDataPosition = i + 1;
-                }
-            }
-
-            ((Persistent) obj).setPrimaryKey(
-                new NumberKey(row.getValue(idPosition).asBigDecimal()));
-
-            // Restore the Permanent Storage Hashtable.  First the
-            // Hashtable is restored, then any explicit table columns
-            // which should be included in the Hashtable are added.
-            byte[] objectData = row.getValue(objectDataPosition).asBytes();
-            Hashtable tempHash = (Hashtable)
-                    ObjectUtils.deserialize(objectData);
-            if (tempHash == null)
-            {
-                tempHash = new Hashtable(10);
-            }
-
-            for (int j = 0; j < columnNames.length; j++)
-            {
-                if (!(columnNames[j].equalsIgnoreCase(USER_ID_COLUMN)
-                        || columnNames[j].equalsIgnoreCase(OBJECT_DATA_COLUMN)))
-                {
-                    Object obj2 = null;
-                    Value value = row.getValue(j + 1);
-                    if (value.isByte())
-                    {
-                        obj2 = new Byte(value.asByte());
-                    }
-                    if (value.isBigDecimal())
-                    {
-                        obj2 = value.asBigDecimal();
-                    }
-                    if (value.isBytes())
-                    {
-                        obj2 = value.asBytes();
-                    }
-                    if (value.isDate())
-                    {
-                        obj2 = value.asDate();
-                    }
-                    if (value.isShort())
-                    {
-                        obj2 = new Short(value.asShort());
-                    }
-                    if (value.isInt())
-                    {
-                        obj2 = new Integer(value.asInt());
-                    }
-                    if (value.isLong())
-                    {
-                        obj2 = new Long(value.asLong());
-                    }
-                    if (value.isDouble())
-                    {
-                        obj2 = new Double(value.asDouble());
-                    }
-                    if (value.isFloat())
-                    {
-                        obj2 = new Float(value.asFloat());
-                    }
-                    if (value.isBoolean())
-                    {
-                        obj2 = new Boolean(value.asBoolean());
-                    }
-                    if (value.isString())
-                    {
-                        obj2 = value.asString();
-                    }
-                    if (value.isTime())
-                    {
-                        obj2 = value.asTime();
-                    }
-                    if (value.isTimestamp())
-                    {
-                        obj2 = value.asTimestamp();
-                    }
-                    if (value.isUtilDate())
-                    {
-                        obj2 = value.asUtilDate();
-                    }
-                    if (obj2 != null)
-                    {
-                        tempHash.put(columnNames[j], obj2);
-                    }
-                }
-            }
-            obj.setPermStorage(tempHash);
-        }
-        catch (Exception ex)
-        {
-            throw new TorqueException(ex);
-        }
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the SELECT statement.
-     * @return Vector containing TurbineUser objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria)
-        throws TorqueException
-    {
-        return doSelect(criteria, (User) null);
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the SELECT statement.
-     * @param current User object that is to be used as part of the
-     *        results - if not passed, then a new one is created.
-     * @return Vector containing TurbineUser objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria, User current)
-        throws TorqueException
-    {
-        // add User table columns
-        addSelectColumns(criteria);
-
-        if (criteria.getOrderByColumns() == null)
-        {
-            criteria.addAscendingOrderByColumn(LAST_NAME);
-        }
-
-        // Place any checks here to intercept criteria which require
-        // custom SQL.  For example:
-        // if ( criteria.containsKey("SomeTable.SomeColumn") )
-        // {
-        //     String whereSql = "SomeTable.SomeColumn IN (Select ...";
-        //     criteria.add("SomeTable.SomeColumn",
-        //                  whereSQL, criteria.CUSTOM);
-        // }
-
-        // BasePeer returns a Vector of Record (Village) objects.  The
-        // array order follows the order columns were placed in the
-        // Select clause.
-        List rows = BasePeer.doSelect(criteria);
-        List results = new ArrayList();
-
-        // Populate the object(s).
-        for (int i = 0; i < rows.size(); i++)
-        {
-            Record row = (Record) rows.get(i);
-            // Add User to the return Vector.
-            if (current == null)
-            {
-                results.add(row2Object(row, 1, null));
-            }
-            else
-            {
-                populateObject(row, 1, current);
-                ((Persistent) current).setNew(false);
-            }
-        }
-        return results;
-    }
-
-    /**
-     * Issues a select based on a criteria.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the SELECT statement.
-     * @param dbConn
-     * @return List containing TurbineUser objects.
-     * @exception TorqueException a generic exception.
-     */
-    public static List doSelect(Criteria criteria, Connection dbConn)
-        throws TorqueException
-    {
-        // add User table columns
-        addSelectColumns(criteria);
-
-        if (criteria.getOrderByColumns() == null)
-        {
-            criteria.addAscendingOrderByColumn(LAST_NAME);
-        }
-
-        // BasePeer returns a List of Record (Village) objects.  The
-        // array order follows the order columns were placed in the
-        // Select clause.
-        List rows = BasePeer.doSelect(criteria, dbConn);
-        List results = new ArrayList();
-
-        // Populate the object(s).
-        for (int i = 0; i < rows.size(); i++)
-        {
-            Record row = (Record) rows.get(i);
-            // Add User to the return Vector.
-            results.add(row2Object(row, 1, null));
-        }
-        return results;
-    }
-
-    /**
-     * Implementss torque peers' method.  Does not use the Class argument
-     * as Users need to go through TurbineSecurity
-     *
-     * @exception TorqueException a generic exception.
-     */
-    public static User row2Object(Record row, int offset, Class cls)
-        throws TorqueException
-    {
-        try
-        {
-            User obj = TurbineSecurity.getUserInstance();
-            populateObject(row, offset, obj);
-            ((Persistent) obj).setNew(false);
-            ((Persistent) obj).setModified(false);
-            return obj;
-        }
-        catch (Exception ex)
-        {
-            throw new TorqueException (ex);
-        }
-    }
-
-    /**
-     * The type of User this peer will instantiate.
-     *
-     * @exception Exception a generic exception.
-     */
-    public static Class getOMClass() throws Exception
-    {
-        return TurbineSecurity.getUserClass();
-    }
-
-    /**
-     * Issues an update based on a criteria.
-     * The criteria only uses USER_ID.
-     *
-     * @param criteria Object containing data that is used to create
-     *        the UPDATE statement.
-     * @exception TorqueException a generic exception.
-     */
-    public static void doUpdate(Criteria criteria)
-        throws TorqueException
-    {
-        Criteria selectCriteria = new Criteria(2);
-        selectCriteria.put(USER_ID, criteria.remove(USER_ID));
-        BasePeer.doUpdate(selectCriteria, criteria);
-    }
-
-    /**
-     * Checks if a User is defined in the system. The name
-     * is used as query criteria.
-     *
-     * @param user The User to be checked.
-     * @return <code>true</code> if given User exists in the system.
-     * @throws DataBackendException when more than one User with
-     *         the same name exists.
-     * @throws Exception a generic exception.
-     */
-    public static boolean checkExists(User user)
-        throws DataBackendException, Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addSelectColumn(USER_ID);
-        criteria.add(USERNAME, user.getName());
-        List results = BasePeer.doSelect(criteria);
-        if (results.size() > 1)
-        {
-            throw new DataBackendException("Multiple users named '"
-                    + user.getName() + "' exist!");
-        }
-        return (results.size() == 1);
-    }
-
-    /**
-     * Returns a vector of all User objects.
-     *
-     * @return A Vector with all users in the system.
-     * @exception Exception a generic exception.
-     */
-    public static List selectAllUsers()
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.addAscendingOrderByColumn(TurbineUserPeer.LAST_NAME);
-        criteria.addAscendingOrderByColumn(TurbineUserPeer.FIRST_NAME);
-        criteria.setIgnoreCase(true);
-        return TurbineUserPeer.doSelect(criteria);
-    }
-
-    /**
-     * Returns a vector of all confirmed User objects.
-     *
-     * @return A Vector with all confirmed users in the system.
-     * @exception Exception a generic exception.
-     */
-    public static List selectAllConfirmedUsers()
-        throws Exception
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(User.CONFIRM_VALUE, User.CONFIRM_DATA);
-        criteria.addAscendingOrderByColumn(TurbineUserPeer.LAST_NAME);
-        criteria.addAscendingOrderByColumn(TurbineUserPeer.FIRST_NAME);
-        criteria.setIgnoreCase(true);
-        return TurbineUserPeer.doSelect(criteria);
-    }
-
-    /**
-     * Returns the TableMap related to this peer.  This method is not
-     * needed for general use but a specific application could have a
-     * need.
-     */
-    protected static TableMap getTableMap()
-    {
-        return MAP_BUILDER.getDatabaseMap().getTable(TABLE_NAME);
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/UserGroupRolePeer.java b/src/java/org/apache/turbine/om/security/peer/UserGroupRolePeer.java
deleted file mode 100644
index 80bf3e5..0000000
--- a/src/java/org/apache/turbine/om/security/peer/UserGroupRolePeer.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.torque.util.BasePeer;
-
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-
-/**
- * This class handles all database access for the VISITOR_ROLE table.
- * This table contains all the roles that a given user can play.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- */
-public class UserGroupRolePeer extends BasePeer
-{
-    /** The map builder for this Peer. */
-    private static final TurbineMapBuilder MAP_BUILDER = (TurbineMapBuilder)
-            getMapBuilder(TurbineMapBuilder.class.getName());
-
-    /** The table name for this peer. */
-    public static final String TABLE_NAME = MAP_BUILDER.getTableUserGroupRole();
-
-    /** The column name for the visitor id field. */
-    public static final String USER_ID = MAP_BUILDER.getUserGroupRole_UserId();
-
-    /** The column name for the group id field. */
-    public static final String GROUP_ID = MAP_BUILDER.getUserGroupRole_GroupId();
-
-    /** The column name for the role id field. */
-    public static final String ROLE_ID = MAP_BUILDER.getUserGroupRole_RoleId();
-
-    /**
-     * Get the name of this table.
-     *
-     * @return A String with the name of the table.
-     */
-    public static String getTableName()
-    {
-        return TABLE_NAME;
-    }
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    public static String getColumnName(String name)
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(TABLE_NAME);
-        sb.append(".");
-        sb.append(name);
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/UserPeer.java b/src/java/org/apache/turbine/om/security/peer/UserPeer.java
deleted file mode 100644
index 87f4e01..0000000
--- a/src/java/org/apache/turbine/om/security/peer/UserPeer.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.om.security.peer;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Peer classes for an User object need to implement this interface.
- *
- * The purpose of this class is to decouple DBSecurityService from
- * the default User implementation and it's related Peer class.
- *
- * @author <a href="mailto:leandro@ibnetwork.com.br">Leandro Rodrigo Saad Cruz</a>
- * @version $Id$
- */
-public interface UserPeer
-{
-    /** The key name for the visitor id field. */
-    static String USERNAME = "LOGIN_NAME";
-
-    /** The key name for the username field. */
-    static String USER_ID = "USER_ID";
-
-    /**
-     * Returns the full name of a column.
-     *
-     * @param name name of a column
-     * @return A String with the full name of the column.
-     */
-    String getFullColumnName(String name);
-}
diff --git a/src/java/org/apache/turbine/om/security/peer/package.html b/src/java/org/apache/turbine/om/security/peer/package.html
deleted file mode 100644
index 399cc8e..0000000
--- a/src/java/org/apache/turbine/om/security/peer/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Hand rolled peers for the DB Security Service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/package.html b/src/java/org/apache/turbine/package.html
deleted file mode 100644
index a9cd2c6..0000000
--- a/src/java/org/apache/turbine/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Turbine Servlet and Constants.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/pipeline/AbstractValve.java b/src/java/org/apache/turbine/pipeline/AbstractValve.java
deleted file mode 100644
index 6e00819..0000000
--- a/src/java/org/apache/turbine/pipeline/AbstractValve.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Valve that can be used as the basis of Valve implementations.
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class AbstractValve
-    implements Valve
-{
-    /**
-     * Initialize this valve for use in a pipeline.
-     *
-     * @throws Exception
-     */
-    public void initialize()
-        throws Exception
-    {
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(PipelineData, ValveContext)
-     */
-    public abstract void invoke(PipelineData data, ValveContext context)
-        throws IOException, TurbineException;
-    
-    
-    /**
-     * utility for getting RunData out of the pielineData object.
-     * @param pipelineData
-     * @return
-     */
-    public final RunData getRunData(PipelineData pipelineData)
-    {
-        if(!(pipelineData instanceof RunData)){
-            throw new RuntimeException("Can't cast pipelineData to rundata");
-        }
-        return (RunData)pipelineData;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/pipeline/CleanUpValve.java b/src/java/org/apache/turbine/pipeline/CleanUpValve.java
deleted file mode 100644
index 8342434..0000000
--- a/src/java/org/apache/turbine/pipeline/CleanUpValve.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.security.AccessControlList;
-
-/**
- * Implements the RunData target portion of the "Turbine classic"
- * processing pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:mikeh@apache.org">Mike Haberman</a>
- * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class CleanUpValve
-    extends AbstractValve
-{
-    /**
-     * Creates a new instance.
-     */
-    public CleanUpValve()
-    {
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        {
-            cleanUp(pipelineData);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-
-    /**
-     * Perform clean up after processing the request.
-     *
-     * @param data The run-time data.
-     */
-    protected void cleanUp(PipelineData pipelineData)
-        throws Exception
-    {      
-        RunData data = (RunData)getRunData(pipelineData);
-        // If a module has set data.acl = null, remove acl from
-        // the session.
-        if (data.getACL() == null)
-        {
-            try
-            {
-                data.getSession().removeAttribute
-                    (AccessControlList.SESSION_KEY);
-            }
-            catch (IllegalStateException invalidatedSession)
-            {
-                // Web was used to shut us down. Trying to clean up
-                // our stuff, but it's already been done for us.
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DefaultACLCreationValve.java b/src/java/org/apache/turbine/pipeline/DefaultACLCreationValve.java
deleted file mode 100644
index a31650d..0000000
--- a/src/java/org/apache/turbine/pipeline/DefaultACLCreationValve.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.ActionLoader;
-import org.apache.turbine.modules.actions.AccessController;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Implements the action portion of the "Turbine classic" processing
- * pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultACLCreationValve
-    extends AbstractValve
-    implements TurbineConstants
-{
-    protected AccessController accessController = null;
-
-    /**
-     * Here we can setup objects that are thread safe and can be
-     * reused. We setup the session validator and the access
-     * controller.
-     */
-    public DefaultACLCreationValve()
-        throws Exception
-    {
-
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        { 
-            // Put the Access Control List into the RunData object, so
-            // it is easily available to modules.  It is also placed
-            // into the session for serialization.  Modules can null
-            // out the ACL to force it to be rebuilt based on more
-            // information.
-            ActionLoader.getInstance().exec(
-                    pipelineData, Turbine.getConfiguration().getString(ACTION_ACCESS_CONTROLLER_KEY,
-                            ACTION_ACCESS_CONTROLLER_DEFAULT));
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java b/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java
deleted file mode 100644
index ff277a4..0000000
--- a/src/java/org/apache/turbine/pipeline/DefaultLoginValve.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.ActionLoader;
-import org.apache.turbine.services.velocity.VelocityService;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.template.TemplateInfo;
-
-/**
- * Handles the Login and Logout actions in the request process
- * cycle.
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@apache.org">Daniel Rall</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultLoginValve
-    extends AbstractValve
-    implements TurbineConstants
-{
-    /**
-     * Here we can setup objects that are thread safe and can be
-     * reused. We setup the session validator and the access
-     * controller.
-     */
-    public DefaultLoginValve()
-        throws Exception
-    {
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        {             
-            process(pipelineData);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-
-    /**
-     * Handles user sessions, parsing of the action from the query
-     * string, and access control.
-     *
-     * @param data The run-time data.
-     */
-    protected void process(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        // Special case for login and logout, this must happen before the
-        // session validator is executed in order either to allow a user to
-        // even login, or to ensure that the session validator gets to
-        // mandate its page selection policy for non-logged in users
-        // after the logout has taken place.
-        String actionName = data.getAction();
-        if (data.hasAction() &&
-            actionName.equalsIgnoreCase
-            (Turbine.getConfiguration().getString(ACTION_LOGIN_KEY)) ||
-            actionName.equalsIgnoreCase
-            (Turbine.getConfiguration().getString(ACTION_LOGOUT_KEY)))
-        {
-            // If a User is logging in, we should refresh the
-            // session here.  Invalidating session and starting a
-            // new session would seem to be a good method, but I
-            // (JDM) could not get this to work well (it always
-            // required the user to login twice).  Maybe related
-            // to JServ?  If we do not clear out the session, it
-            // is possible a new User may accidently (if they
-            // login incorrectly) continue on with information
-            // associated with the previous User.  Currently the
-            // only keys stored in the session are "turbine.user"
-            // and "turbine.acl".
-            if (actionName.equalsIgnoreCase
-                (Turbine.getConfiguration().getString(ACTION_LOGIN_KEY)))
-            {
-                Enumeration names = data.getSession().getAttributeNames();
-                if (names != null)
-                {
-                    // copy keys into a new list, so we can clear the session
-                    // and not get ConcurrentModificationException
-                    List nameList = new ArrayList();
-                    while (names.hasMoreElements())
-                    {
-                        nameList.add(names.nextElement());
-                    }
-
-                    HttpSession session = data.getSession();
-                    Iterator nameIter = nameList.iterator();
-                    while (nameIter.hasNext())
-                    {
-                        try
-                        {
-                            session.removeAttribute((String)nameIter.next());
-                        }
-                        catch (IllegalStateException invalidatedSession)
-                        {
-                            break;
-                        }
-                    }
-                }
-            }
-
-            
-            ActionLoader.getInstance().exec(pipelineData, data.getAction());
-            cleanupTemplateContext(data);
-            data.setAction(null);
-        }
-    }
-    /**
-     * cleans the Velocity Context if available.
-     *
-     * @param data A RunData Object
-     *
-     * @throws Exception A problem while cleaning out the Template Context occured.
-     */
-    private void cleanupTemplateContext(RunData data)
-    throws Exception
-    {
-        // This is Velocity specific and shouldn't be done here.
-        // But this is a band aid until we get real listeners
-        // here.
-        TemplateInfo ti = data.getTemplateInfo();
-        if (ti != null)
-        {
-            ti.removeTemp(VelocityService.CONTEXT);
-        }
-    }    
-}
diff --git a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java b/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
deleted file mode 100644
index e8317c7..0000000
--- a/src/java/org/apache/turbine/pipeline/DefaultPipelineData.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.turbine.pipeline;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * <p>A <b>PipelineData</b> is a holder for data being passed from one
- * Valve to the next.  
- * The detailed contract for a Valve is included in the description of
- * the <code>invoke()</code> method below.</p>
- *
- * <b>HISTORICAL NOTE</b>:  The "PipelineData" name was assigned to this
- * holder as it functions similarily to the RunData object, but without
- * the additional methods
- *
- * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class DefaultPipelineData implements PipelineData
-{
-    private Map map = new HashMap();
-    
-    public void put(Class key, Map value){
-        map.put(key,value);        
-    }
-    
-    public Object get(Class key){
-        return map.get(key);
-    }
-    
-    public Object get(Class key, Object innerKey)
-    {
-        Map innerMap = (Map) get(key);
-        if (innerMap == null)
-        {
-            return null;
-        }
-        return innerMap.get(innerKey);
-    }
-    
-    
-}
diff --git a/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java b/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java
deleted file mode 100644
index 0d3ceed..0000000
--- a/src/java/org/apache/turbine/pipeline/DefaultSessionTimeoutValve.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Implements the action portion of the "Turbine classic" processing
- * pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultSessionTimeoutValve
-    extends AbstractValve
-    implements TurbineConstants
-{
-    protected int timeout;
-
-    /**
-     * Here we can setup objects that are thread safe and can be
-     * reused, so we get the timeout from the configuration..
-     */
-    public DefaultSessionTimeoutValve()
-        throws Exception
-    {
-        Configuration cfg = Turbine.getConfiguration();
-
-        // Get the session timeout.
-    	
-    	timeout = cfg.getInt(SESSION_TIMEOUT_KEY,
-        	        SESSION_TIMEOUT_DEFAULT);
-
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        RunData runData = (RunData)getRunData(pipelineData);
-        // If the session is new take this opportunity to
-        // set the session timeout if specified in TR.properties
-        if (runData.getSession().isNew() && timeout != SESSION_TIMEOUT_DEFAULT)
-        {
-            runData.getSession().setMaxInactiveInterval(timeout);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DefaultSessionValidationValve.java b/src/java/org/apache/turbine/pipeline/DefaultSessionValidationValve.java
deleted file mode 100644
index e35b895..0000000
--- a/src/java/org/apache/turbine/pipeline/DefaultSessionValidationValve.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.ActionLoader;
-import org.apache.turbine.modules.actions.sessionvalidator.SessionValidator;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Implements the action portion of the "Turbine classic" processing
- * pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>\
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultSessionValidationValve
-    extends AbstractValve
-    implements TurbineConstants
-{
-    protected SessionValidator sessionValidator = null;
-
-    
-    public DefaultSessionValidationValve()
-        throws Exception
-    {
-       
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        {
-            // This is where the validation of the Session information
-            // is performed if the user has not logged in yet, then
-            // the screen is set to be Login. This also handles the
-            // case of not having a screen defined by also setting the
-            // screen to Login. If you want people to go to another
-            // screen other than Login, you need to change that within
-            // TurbineResources.properties...screen.homepage; or, you
-            // can specify your own SessionValidator action.
-            ActionLoader.getInstance().exec(pipelineData, 
-                    Turbine.getConfiguration().getString(ACTION_SESSION_VALIDATOR_KEY,
-                            ACTION_SESSION_VALIDATOR_DEFAULT));
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }            
-    
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DetermineActionValve.java b/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
deleted file mode 100644
index 81e0ceb..0000000
--- a/src/java/org/apache/turbine/pipeline/DetermineActionValve.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.uri.URIConstants;
-
-/**
- * This valve is responsible for setting the 'action' property of RunData based
- * on request parameter. There is no default action, since a null action is
- * perfectly valid.
- *
- * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class DetermineActionValve 
-    extends AbstractValve
-{
-    private static final Log log
-        = LogFactory.getLog( DetermineActionValve.class );
-        
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke( PipelineData pipelineData, ValveContext context )
-        throws IOException, TurbineException
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        if ( ! data.hasAction() )
-        {
-            String action = 
-                data.getParameters().getString( URIConstants.CGI_ACTION_PARAM );
-
-            if ( action != null )
-            {
-                data.setAction( action );
-                
-                log.debug( "Set action from request parameter" );
-            }
-            else
-            {                    
-                log.debug( "No action" );
-            }
-        }
-        
-        if ( log.isDebugEnabled() )
-        {
-            log.debug( "Action is now: " + data.getAction() );
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext( pipelineData );
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DetermineRedirectRequestedValve.java b/src/java/org/apache/turbine/pipeline/DetermineRedirectRequestedValve.java
deleted file mode 100644
index 83270fb..0000000
--- a/src/java/org/apache/turbine/pipeline/DetermineRedirectRequestedValve.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Implements the Redirect Requested portion of the "Turbine classic"
- * processing pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DetermineRedirectRequestedValve
-    extends AbstractValve
-{
-    Log log = LogFactory.getLog(DetermineRedirectRequestedValve.class);
-    /**
-     * Creates a new instance.
-     */
-    public DetermineRedirectRequestedValve()
-    {
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        {
-            redirectRequested(pipelineData);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-
-    /**
-     * Perform clean up after processing the request.
-     *
-     * @param data The run-time data.
-     */
-    protected void redirectRequested(PipelineData pipelineData)
-        throws Exception
-    {      
-        RunData data = (RunData)getRunData(pipelineData);
-        // handle a redirect request
-        boolean requestRedirected = ((data.getRedirectURI() != null)
-        && (data.getRedirectURI().length() > 0));
-        if (requestRedirected)
-        {
-            if (data.getResponse().isCommitted())
-            {
-                requestRedirected = false;
-                log.warn("redirect requested, response already committed: " +
-                        data.getRedirectURI());
-            }
-            else
-            {
-                data.getResponse().sendRedirect(data.getRedirectURI());
-            }
-        }
-
-        if (!requestRedirected)
-        {
-            try
-            {
-                if (data.isPageSet() == false && data.isOutSet() == false)
-                {
-                    throw new Exception("Nothing to output");
-                }
-
-                // We are all done! if isPageSet() output that way
-                // otherwise, data.getOut() has already been written
-                // to the data.getOut().close() happens below in the
-                // finally.
-                if (data.isPageSet() && data.isOutSet() == false)
-                {
-                    // Modules can override these.
-                    data.getResponse().setLocale(data.getLocale());
-                    data.getResponse().setContentType(
-                            data.getContentType());
-
-                    // Set the status code.
-                    data.getResponse().setStatus(data.getStatusCode());
-                    // Output the Page.
-                    data.getPage().output(data.getOut());
-                }
-            }
-            catch (Exception e)
-            {
-                // The output stream was probably closed by the client
-                // end of things ie: the client clicked the Stop
-                // button on the browser, so ignore any errors that
-                // result.
-                log.debug("Output stream closed? ", e);
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java b/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
deleted file mode 100644
index d78c7e3..0000000
--- a/src/java/org/apache/turbine/pipeline/DetermineTargetValve.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.uri.URIConstants;
-
-/**
- * This valve is responsible for setting the 'target' property of the RunData.
- * If it is not already set it attempts to get the target from the request
- * parameter 'template'. If the parameter is not set, we use the homepage
- * specified by the configuration property Turbine.TEMPLATE_HOMEPAGE.
- *
- * FIXME: The request parameter which determines the template should be
- *        configurable. 
- *
- * @author <a href="mailto:james@jamestaylor.org">James Taylor</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class DetermineTargetValve 
-    extends AbstractValve
-{
-    private static final Log log
-        = LogFactory.getLog( DetermineTargetValve.class );
-        
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke( PipelineData pipelineData, ValveContext context )
-        throws IOException, TurbineException
-    {
-        RunData runData = (RunData)getRunData(pipelineData);
-        if ( ! runData.hasScreen() )
-        {
-            String target = runData.getParameters().getString(URIConstants.CGI_SCREEN_PARAM);
-
-            if ( target != null )
-            {
-                runData.setScreen( target );
-                
-                log.debug( "Set screen target from request parameter" );
-            }
-            else
-            {
-            /*    data.setScreen( Turbine.getConfiguration().getString(
-                    Turbine.TEMPLATE_HOMEPAGE ) );
-                    
-                log.debug( "Set target using default value" );
-                */
-				log.debug( "No target screen" );
-            }
-            
-        }
-        
-        if ( log.isDebugEnabled() )
-        {
-            log.debug( "Screen Target is now: " + runData.getScreen() );
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext( pipelineData );
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/ExecutePageValve.java b/src/java/org/apache/turbine/pipeline/ExecutePageValve.java
deleted file mode 100644
index 49e6de3..0000000
--- a/src/java/org/apache/turbine/pipeline/ExecutePageValve.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.PageLoader;
-import org.apache.turbine.pipeline.AbstractValve;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.pipeline.ValveContext;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Implements the Page Generation portion of the "Turbine classic"
- * processing pipeline (from the Turbine 2.x series).
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class ExecutePageValve
-    extends AbstractValve
-{
-    Log log = LogFactory.getLog(ExecutePageValve.class);
-    TemplateService templateService;
-    /**
-     * Creates a new instance.
-     */
-    public ExecutePageValve()
-    {
- 
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData pipelineData, ValveContext context)
-        throws IOException, TurbineException
-    {
-        try
-        {
-            executePage(pipelineData);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException(e);
-        }
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(pipelineData);
-    }
-
-    /**
-     * execute the page generation.
-     *
-     * @param data The run-time data.
-     */
-    protected void executePage(PipelineData pipelineData)
-        throws Exception
-    {
-        RunData data = (RunData)getRunData(pipelineData);
-        
-        // Start the execution phase. DefaultPage will execute the
-        // appropriate action as well as get the Layout from the
-        // Screen and then execute that. The Layout is then
-        // responsible for executing the Navigation and Screen
-        // modules.
-        //
-        // Note that by default, this cannot be overridden from
-        // parameters passed in via post/query data. This is for
-        // security purposes.  You should really never need more
-        // than just the default page.  If you do, add logic to
-        // DefaultPage to do what you want.
-
-        // see if this should be static or not...  Or loaded from 
-        // Turbine.java.
-        templateService = TurbineTemplate.getService();
-        
-        String defaultPage = (templateService == null)
-        ? null :templateService.getDefaultPageName(data);
-
-        if (defaultPage == null)
-        {
-            /*
-             * In this case none of the template services are running.
-             * The application may be using ECS for views, or a
-             * decendent of RawScreen is trying to produce output.
-             * If there is a 'page.default' property in the TR.props
-             * then use that, otherwise return DefaultPage which will
-             * handle ECS view scenerios and RawScreen scenerios. The
-             * app developer can still specify the 'page.default'
-             * if they wish but the DefaultPage should work in
-             * most cases.
-             */
-            defaultPage = Turbine.getConfiguration().getString(TurbineConstants.PAGE_DEFAULT_KEY,
-                    TurbineConstants.PAGE_DEFAULT_DEFAULT);
-        }
-
-        PageLoader.getInstance().exec(pipelineData, defaultPage);
-
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/Pipeline.java b/src/java/org/apache/turbine/pipeline/Pipeline.java
deleted file mode 100644
index 06f7444..0000000
--- a/src/java/org/apache/turbine/pipeline/Pipeline.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The idea of a pipeline is being taken from Catalina
- * in its entirety :-)
- *
- * I would like to take the idea further and implement
- * Valves instead of hardcoding particular methods
- * in a pipeline.
- *
- * It would be more flexible to specify Valves for
- * a pipeline in an XML file (we can also rip off the
- * digester rules from T4) and have invoke() as part
- * of the interface.
- *
- * So a set of Valves would be added to the pipeline
- * and the pipeline would 'invoke' each valve. In the
- * case Turbine each Valve would produce some output
- * to be sent out the pipe. I think with another days
- * work this can be fully working. The first pipeline
- * to be fully implemented will the ClassicPipeline
- * will emulate the Turbine 2.1 way of doing things.
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public interface Pipeline
-{
-    /**
-     * Initializes this instance.  Called once by the Turbine servlet.
-     */
-    public void initialize()
-        throws Exception;
-
-    /**
-     * <p>Add a new Valve to the end of the pipeline.</p>
-     *
-     * @param valve Valve to be added.
-     *
-     * @exception IllegalStateException If the pipeline has not been
-     * initialized.
-     */
-    public void addValve(Valve valve);
-
-    /**
-     * Return the set of all Valves in the pipeline.  If there are no
-     * such Valves, a zero-length array is returned.
-     *
-     * @return An array of valves.
-     */
-    public Valve[] getValves();
-
-    /**
-     * <p>Cause the specified request and response to be processed by
-     * the sequence of Valves associated with this pipeline, until one
-     * of these Valves decides to end the processing.</p>
-     *
-     * <p>The implementation must ensure that multiple simultaneous
-     * requests (on different threads) can be processed through the
-     * same Pipeline without interfering with each other's control
-     * flow.</p>
-     *
-     * @param data The run-time information, including the servlet
-     * request and response we are processing.
-     *
-     * @exception IOException an input/output error occurred.
-     */
-    public void invoke(PipelineData data)
-        throws TurbineException, IOException;
-
-    /**
-     * Remove the specified Valve from the pipeline, if it is found;
-     * otherwise, do nothing.
-     *
-     * @param valve Valve to be removed.
-     */
-    public void removeValve(Valve valve);
-}
diff --git a/src/java/org/apache/turbine/pipeline/PipelineData.java b/src/java/org/apache/turbine/pipeline/PipelineData.java
deleted file mode 100644
index ef166be..0000000
--- a/src/java/org/apache/turbine/pipeline/PipelineData.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.turbine.pipeline;
-
-import java.util.Map;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * <p>A <b>PipelineData</b> is a holder for data being passed from one
- * Valve to the next.  
- * The detailed contract for a Valve is included in the description of
- * the <code>invoke()</code> method below.</p>
- *
- * <b>HISTORICAL NOTE</b>:  The "PipelineData" name was assigned to this
- * holder as it functions similarily to the RunData object, but without
- * the additional methods
- *
- * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public interface PipelineData
-{
-    public void put(Class name, Map value);
-    
-    public Object get(Class name);
-    
-    public Object get(Class key, Object innerKey);
-}
diff --git a/src/java/org/apache/turbine/pipeline/TurbinePipeline.java b/src/java/org/apache/turbine/pipeline/TurbinePipeline.java
deleted file mode 100644
index 5c78d88..0000000
--- a/src/java/org/apache/turbine/pipeline/TurbinePipeline.java
+++ /dev/null
@@ -1,233 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Flexible implementation of a {@link org.apache.turbine.Pipeline}.
- * Originally based on code from Catalina and ideas from Apache httpd.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:jvanzyl@zenplex.com">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class TurbinePipeline
-    implements Pipeline, ValveContext
-{
-    /**
-     * The "Turbine Classic" pipeline.
-     */
-    public static String CLASSIC_PIPELINE = 
-        "WEB-INF/conf/turbine-classic-pipeline.xml";
-
-    /**
-     * Name of this pipeline.
-     */
-    protected String name;
-
-    /**
-     * The set of Valves associated with this Pipeline.
-     */
-    protected Valve[] valves = new Valve[0];
-    
-    /**
-     * The per-thread execution state for processing through this
-     * pipeline.  The actual value is a java.lang.Integer object
-     * containing the subscript into the <code>values</code> array, or
-     * a subscript equal to <code>values.length</code> if the basic
-     * Valve is currently being processed.
-     */
-    protected ThreadLocal state= new ThreadLocal();
-
-    /**
-     * @see org.apache.turbine.Pipeline#initialize()
-     */
-    public void initialize()
-        throws Exception
-    {
-        if (state==null){
-            state = new ThreadLocal();
-        }
-        
-        // Valve implementations are added to this Pipeline using the
-        // Mapper.
-                
-        // Initialize the valves
-        for (int i = 0; i < valves.length; i++)
-        {
-            valves[i].initialize();
-        }
-    }
-
-    /**
-     * Set the name of this pipeline.
-     *
-     * @param name Name of this pipeline.
-     */
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-    
-    /**
-     * Get the name of this pipeline.
-     *
-     * @return String Name of this pipeline.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * @see org.apache.turbine.Pipeline#addValve(Valve)
-     */
-    public void addValve(Valve valve)
-    {
-        // Add this Valve to the set associated with this Pipeline
-        synchronized (valves)
-        {
-            Valve[] results = new Valve[valves.length + 1];
-            System.arraycopy(valves, 0, results, 0, valves.length);
-            results[valves.length] = valve;
-            valves = results;
-        }
-    }
-
-    /**
-     * @see org.apache.turbine.Pipeline#getValves()
-     */
-    public Valve[] getValves()
-    {
-        synchronized (valves)
-        {
-            Valve[] results = new Valve[valves.length];
-            System.arraycopy(valves, 0, results, 0, valves.length);
-            return results;
-        }
-    }
-
-    /**
-     * @see org.apache.turbine.Pipeline#removeValve(Valve)
-     */
-    public void removeValve(Valve valve)
-    {
-        synchronized (valves)
-        {
-            // Locate this Valve in our list
-            int index = -1;
-            for (int i = 0; i < valves.length; i++)
-            {
-                if (valve == valves[i])
-                {
-                    index = i;
-                    break;
-                }
-            }
-            if (index < 0)
-            {
-                return;
-            }
-
-            // Remove this valve from our list
-            Valve[] results = new Valve[valves.length - 1];
-            int n = 0;
-            for (int i = 0; i < valves.length; i++)
-            {
-                if (i == index)
-                {
-                    continue;
-                }
-                results[n++] = valves[i];
-            }
-            valves = results;
-        }
-    }
-
-    /**
-     * @see org.apache.turbine.Pipeline#invoke(RunData)
-     */
-    public void invoke(PipelineData pipelineData)
-        throws TurbineException, IOException
-    {
-        // Initialize the per-thread state for this thread
-        state.set(new Integer(0));
-
-        // Invoke the first Valve in this pipeline for this request
-        invokeNext(pipelineData);
-    }
-
-    /**
-     * @see org.apache.turbine.ValveContext#invokeNext(RunData)
-     */
-    public void invokeNext(PipelineData pipelineData)
-        throws TurbineException, IOException
-    {
-        // Identify the current subscript for the current request thread
-        Integer current = (Integer) state.get();
-        int subscript = current.intValue();
-
-        if (subscript < valves.length)
-        {
-            // Invoke the requested Valve for the current request
-            // thread and increment its thread-local state.
-            state.set(new Integer(subscript + 1));
-            valves[subscript].invoke(pipelineData, this);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/pipeline/Valve.java b/src/java/org/apache/turbine/pipeline/Valve.java
deleted file mode 100644
index 4f207c7..0000000
--- a/src/java/org/apache/turbine/pipeline/Valve.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * <p>A <b>Valve</b> is a request processing component.  A series of
- * Valves are generally associated with each other into a Pipeline.
- * The detailed contract for a Valve is included in the description of
- * the <code>invoke()</code> method below.</p>
- *
- * <b>HISTORICAL NOTE</b>:  The "Valve" name was assigned to this concept
- * because a valve is what you use in a real world pipeline to control and/or
- * modify flows through it.
- *
- * @author Craig R. McClanahan
- * @author Gunnar Rjnning
- * @author Peter Donald
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- *
- * @see #invoke(RunData, ValveContext)
- */
-public interface Valve
-{
-    /**
-     * <p>Perform request processing as required by this Valve.</p>
-     *
-     * <p>An individual Valve <b>MAY</b> perform the following actions, in
-     * the specified order:</p>
-     * <ul>
-     * <li>Examine and/or modify the properties of the specified Request and
-     *     Response.
-     * <li>Examine the properties of the specified Request, completely generate
-     *     the corresponding Response, and return control to the caller.
-     * <li>Examine the properties of the specified Request and Response, wrap
-     *     either or both of these objects to supplement their functionality,
-     *     and pass them on.
-     * <li>If the corresponding Response was not generated (and control was not
-     *     returned, call the next Valve in the pipeline (if there is one) by
-     *     executing <code>context.invokeNext()</code>.
-     * <li>Examine, but not modify, the properties of the resulting Response
-     *     (which was created by a subsequently invoked Valve via a
-     *     call to <code>context.invokeNext()</code>).
-     * </ul>
-     *
-     * <p>A Valve <b>MUST NOT</b> do any of the following things:</p>
-     * <ul>
-     * <li>Change request properties that have already been used to direct
-     *     the flow of processing control for this request.
-     * <li>Create a completed Response <strong>AND</strong> pass this
-     *     Request and Response on to the next Valve in the pipeline.
-     * <li>Consume bytes from the input stream associated with the Request,
-     *     unless it is completely generating the response, or wrapping the
-     *     request before passing it on.
-     * <li>Modify the HTTP headers included with the Response after the
-     *     <code>invokeNext()</code> method has returned.
-     * <li>Perform any actions on the output stream associated with the
-     *     specified Response after the <code>invokeNext()</code> method has
-     *     returned.
-     * </ul>
-     *
-     * @param data The run-time information, including the servlet
-     * request and response we are processing.
-     * @param context The valve context used to invoke the next valve
-     *  in the current processing pipeline
-     *
-     * @exception IOException Thrown by a subsequent Valve.
-     * @exception TurbineException Thrown by a subsequent Valve.
-     */
-    public void invoke(PipelineData data, ValveContext context)
-        throws IOException, TurbineException;
-
-    /**
-     * Initialize the valve before using in a pipeline.
-     */
-    public void initialize()
-        throws Exception;
-}
diff --git a/src/java/org/apache/turbine/pipeline/ValveContext.java b/src/java/org/apache/turbine/pipeline/ValveContext.java
deleted file mode 100644
index efcf329..0000000
--- a/src/java/org/apache/turbine/pipeline/ValveContext.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * <p>A <b>ValveContext</b> is the mechanism by which a Valve can trigger the
- * execution of the next Valve in a Pipeline, without having to know anything
- * about the internal implementation mechanisms.  An instance of a class
- * implementing this interface is passed as a parameter to the
- * <code>Valve.invoke()</code> method of each executed Valve.</p>
- *
- * <p><strong>IMPLEMENTATION NOTE</strong>: It is up to the implementation of
- * ValveContext to ensure that simultaneous requests being processed (by
- * separate threads) through the same Pipeline do not interfere with each
- * other's flow of control.</p>
- *
- * @author Craig R. McClanahan
- * @author Gunnar Rjnning
- * @author Peter Donald
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Revision$ $Date$
- */
-public interface ValveContext
-{
-    /**
-     * <p>Cause the <code>invoke()</code> method of the next Valve
-     * that is part of the Pipeline currently being processed (if any)
-     * to be executed, passing on the specified request and response
-     * objects plus this <code>ValveContext</code> instance.
-     * Exceptions thrown by a subsequently executed Valve will be
-     * passed on to our caller.</p>
-     *
-     * <p>If there are no more Valves to be executed, execution of
-     * this method will result in a no op.</p>
-     *
-     * @param data The run-time information, including the servlet
-     * request and response we are processing.
-     *
-     * @exception IOException Thrown by a subsequent Valve.
-     * @exception TurbineException Thrown by a subsequent Valve.
-     * @exception TurbineException No further Valves configured in the
-     * Pipeline currently being processed.
-     */
-    public void invokeNext(PipelineData data)
-        throws IOException, TurbineException;
-}
diff --git a/src/java/org/apache/turbine/pipeline/package.html b/src/java/org/apache/turbine/pipeline/package.html
deleted file mode 100644
index 95be8c7..0000000
--- a/src/java/org/apache/turbine/pipeline/package.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<html>
-
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-
-<p>
-  The Turbine processing pipeline is modelled after the pipeline found
-  in Tomcat 4.0.1 (Catalina), and after the module architecture found
-  in Apache httpd.  It is extensionable both laterally and
-  vertically via Valve additions and default Valve implementations
-  (respectively).  Even the semantics of the default Turbine
-  Pipeline (ClassicPipeline) can be changed by replacing or extending
-  the implementation with a custom one.
-</p>
-
-<p>
-  As with Catalina, Turbine's Pipeline and Valve configuration is
-  setup via XML:
-
-  <blockquote><code><pre>
-
-  <pipeline>
-    <class>org.apache.turbine.pipeline.ClassicPipeline</class>
-    <valves>
-      <valve>
-        <class>org.apache.turbine.pipeline.Valve1</class>
-      </valve>
-      <valve>
-        <class>org.apache.turbine.pipeline.Valve2</class>
-      </valve>
-      <valve>
-        <class>org.apache.turbine.pipeline.Valve3</class>
-      </valve>
-    </valves>
-  </pipeline>
-
-  </pre></code></blockquote>
-</p>
-
-<p>
-  Please direct all comments, fixes, and enhancements to the
-  <a href="mailto:turbine-dev@jakarta.apache.org">development list</a>.
-</p>
-
-</body>
-
-</html>
diff --git a/src/java/org/apache/turbine/services/BaseInitable.java b/src/java/org/apache/turbine/services/BaseInitable.java
deleted file mode 100644
index 5047ca6..0000000
--- a/src/java/org/apache/turbine/services/BaseInitable.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This class provides a generic implementation of
- * <code>Initable</code>.  This implementation, that other
- * <code>Initables</code> are welcome to extend, contains facilities
- * to maintain internal state.
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class BaseInitable
-        implements Initable
-{
-    /** InitableBroker that instantiatd this class. */
-    protected InitableBroker initableBroker;
-
-    /** Initialization status of this class. */
-    protected boolean isInitialized = false;
-
-    /**
-     * Default constructor of BaseInitable.
-     *
-     * This constructor does nothing.  Your own constructurs should be
-     * modest in allocating memory and other resources, leaving this
-     * to the <code>init()</code> method.
-     */
-    public BaseInitable()
-    {
-    }
-
-    /**
-     * Saves InitableBroker reference for later use.
-     *
-     * @param broker The InitableBroker that instantiated this object.
-     */
-    public void setInitableBroker(InitableBroker broker)
-    {
-        this.initableBroker = broker;
-    }
-
-    /**
-     * Returns an InitableBroker reference.
-     *
-     * @return The InitableBroker that instantiated this object.
-     */
-    public InitableBroker getInitableBroker()
-    {
-        return initableBroker;
-    }
-
-    /**
-     * Performs early initialization.  Used in a manner similar to a ctor.
-     *
-     * BaseInitable doesn't need early initialization, therefore it
-     * ignores all objects passed to it and performs no initialization
-     * activities.
-     *
-     * @param data An Object to use for initialization activities.
-     * @exception InitializationException Initialization of this
-     * class was not successful.
-     */
-    public void init(Object data) throws InitializationException
-    {
-    }
-
-    /**
-     * Performs late initializtion.  Called when the Service is requested
-     * for the first time (if not already completely initialized by the
-     * early initializer).
-     *
-     * Late intialization of a BaseInitable is alwas successful.
-     *
-     * @exception InitializationException Initialization of this
-     * class was not successful.
-     */
-    public void init() throws InitializationException
-    {
-    }
-
-    /**
-     * Returns an Initable to uninitialized state.
-     *
-     * Calls setInit(false) to mark that we are no longer in initialized
-     * state.
-     */
-    public void shutdown()
-    {
-        setInit(false);
-    }
-
-    /**
-     * Returns initialization status.
-     *
-     * @return True if the initable is initialized.
-     */
-    public boolean getInit()
-    {
-        return isInitialized;
-    }
-
-    /**
-     * Sets initailization status.
-     *
-     * @param value The new initialization status.
-     */
-    protected void setInit(boolean value)
-    {
-        this.isInitialized = value;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/BaseInitableBroker.java b/src/java/org/apache/turbine/services/BaseInitableBroker.java
deleted file mode 100644
index 9d43f88..0000000
--- a/src/java/org/apache/turbine/services/BaseInitableBroker.java
+++ /dev/null
@@ -1,311 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-import java.util.Stack;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * A generic implementation of <code>InitableBroker</code>.
- * Functionality provided by the broker includes:
- *
- * <ul>
- *
- * <li>Maintaining single instance of each <code>Initable</code> in
- * the system.</li>
- *
- * <li>Early initialization of <code>Initables</code> during system
- * startup.</li>
- *
- * <li>Late initialization of <code>Initables</code> before they are
- * used.</li>
- *
- * <li>Providing instances of <code>Initables</code> to requesting
- * parties.</li>
- *
- * <li>Maintaining dependencies between <code>Initables</code> during
- * early initalization phases, including circular dependencies
- * detection.</li>
- *
- * </ul>
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class BaseInitableBroker
-        implements InitableBroker
-{
-    /** A repository of Initable instances. */
-    protected Hashtable initables = new Hashtable();
-
-    /**
-     * Names of classes being early-initialized are pushed onto this
-     * stack.  A name appearing twice indicates a circular dependency
-     * chain.
-     */
-    protected Stack stack = new Stack();
-
-    /** Logging */
-    private Log log = LogFactory.getLog(this.getClass());
-
-    /**
-     * Default constructor of InitableBroker.
-     *
-     * This constructor does nothing. Your brokers should be
-     * singletons, therefore their constructors should be
-     * private. They should also have public YourBroker getInstance()
-     * methods.
-     */
-    protected BaseInitableBroker()
-    {
-    }
-
-    /**
-     * Performs early initialization of an Initable class.
-     *
-     * @param className The name of the class to be initialized.
-     * @param data An Object to be used for initialization activities.
-     * @exception InitializationException Initialization was not successful.
-     */
-    public void initClass(String className, Object data)
-            throws InitializationException
-    {
-        // make sure that only one thread calls this method recursively
-        synchronized (stack)
-        {
-            int pos = stack.search(className);
-            if (pos != -1)
-            {
-                StringBuffer msg = new StringBuffer().append(className)
-                        .append(" couldn't be initialized because of circular depency chain:\n");
-                for (int i = pos; i > 0; i--)
-                {
-                    msg.append((String) stack.elementAt(stack.size() - i - 1) + "->");
-                }
-                msg.append(className).append('\n');
-
-                throw new InitializationException(msg.toString());
-            }
-            try
-            {
-                stack.push(className);
-                Initable instance = getInitableInstance(className);
-                if (!instance.getInit())
-                {
-                    // this call might result in an indirect recursion
-                    instance.init(data);
-                }
-            }
-            finally
-            {
-                // Succeeded or not, make sure the name gets off the stack.
-                stack.pop();
-            }
-        }
-    }
-
-    /**
-     * Shuts down an <code>Initable</code>.
-     *
-     * This method is used to release resources allocated by an
-     * <code>Initable</code>, and return it to its initial (uninitailized)
-     * state.
-     *
-     * @param className The name of the class to be uninitialized.
-     */
-    public void shutdownClass(String className)
-    {
-        try
-        {
-            Initable initable = getInitableInstance(className);
-            if (initable.getInit())
-            {
-                initable.shutdown();
-                ((BaseInitable) initable).setInit(false);
-            }
-        }
-        catch (InstantiationException e)
-        {
-            // Shutdown of a nonexistent class was requested.
-            // This does not hurt anything, so we log the error and continue.
-            log.error("Shutdown of a nonexistent class " +
-                    className + " was requested", e);
-        }
-    }
-
-    /**
-     * Provides an instance of Initable class ready to work.
-     *
-     * If the requested class couldn't be instatiated or initialized,
-     * an InstantiationException will be thrown. You needn't handle
-     * this exception in your code, since it indicates fatal
-     * misconfigurtion of the system.
-     *
-     * @param className The name of the Initable requested.
-     * @return An instance of the requested Initable.
-     * @exception InstantiationException if there was a problem
-     * during instantiation or initialization of the Initable.
-     */
-    public Initable getInitable(String className)
-            throws InstantiationException
-    {
-        Initable initable;
-        try
-        {
-            initable = getInitableInstance(className);
-            if (!initable.getInit())
-            {
-                synchronized (initable.getClass())
-                {
-                    if (!initable.getInit())
-                    {
-                        initable.init();
-                    }
-                    if (!initable.getInit())
-                    {
-                        // this exception will be caught & rethrown by this
-                        // very method. getInit() returning false indicates
-                        // some initialization issue, which in turn prevents
-                        // the InitableBroker from passing a working
-                        // instance of the initable to the client.
-                        throw new InitializationException(
-                                "init() failed to initialize class "
-                                + className);
-                    }
-                }
-            }
-            return initable;
-        }
-        catch (InitializationException e)
-        {
-            throw new InstantiationException("Class " + className +
-                    " failed to initialize", e);
-        }
-    }
-
-    /**
-     * Retrieves an instance of an Initable from the repository.
-     *
-     * If the requested class is not present in the repository, it is
-     * instantiated and passed a reference to the broker, saved and
-     * then returned.
-     *
-     * @param className The name of the class to be instantiated.
-     * @exception InstantiationException if the requested class can't
-     * be instantiated.
-     */
-    protected Initable getInitableInstance(String className)
-            throws InstantiationException
-    {
-        Initable initable = (Initable) initables.get(className);
-
-        if (initable == null)
-        {
-            try
-            {
-                initable = (Initable) Class.forName(className).newInstance();
-            }
-
-                    // those two errors must be passed to the VM
-            catch (ThreadDeath t)
-            {
-                throw t;
-            }
-            catch (OutOfMemoryError t)
-            {
-                throw t;
-            }
-
-            catch (Throwable t)
-            {
-                // Used to indicate error condition.
-                String msg = null;
-
-                if (t instanceof NoClassDefFoundError)
-                {
-                    msg = "A class referenced by " + className +
-                            " is unavailable. Check your jars and classes.";
-                }
-                else if (t instanceof ClassNotFoundException)
-                {
-                    msg = "Class " + className +
-                            " is unavailable. Check your jars and classes.";
-                }
-                else if (t instanceof ClassCastException)
-                {
-                    msg = "Class " + className +
-                            " doesn't implement Initable.";
-                }
-                else
-                {
-                    msg = "Failed to instantiate " + className;
-                }
-
-                throw new InstantiationException(msg, t);
-            }
-
-            initable.setInitableBroker(this);
-            initables.put(className, initable);
-        }
-
-        return initable;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/BaseService.java b/src/java/org/apache/turbine/services/BaseService.java
deleted file mode 100644
index b890baa..0000000
--- a/src/java/org/apache/turbine/services/BaseService.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Properties;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationConverter;
-
-/**
- * This class is a generic implementation of <code>Service</code>.
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class BaseService
-        extends BaseInitable
-        implements Service
-{
-    /** A reference to the ServiceBroker that instantiated this object. */
-    protected ServiceBroker serviceBroker;
-
-    /** The configuration for this service */
-    protected Configuration configuration;
-
-    /** The name of this Service. */
-    protected String name;
-
-    /**
-     * Saves a reference to the ServiceBroker that instantiated this
-     * object, so that it can ask for its properties and access other
-     * Services.
-     *
-     * @param broker The ServiceBroker that instantiated this object.
-     */
-    public void setServiceBroker(ServiceBroker broker)
-    {
-        this.serviceBroker = broker;
-    }
-
-    /**
-     * ServiceBroker uses this method to pass a Service its name.
-     *
-     * @param name The name of this Service.
-     */
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    /**
-     * Returns the name of this service.
-     *
-     * @return The name of this Service.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Returns a ServiceBroker reference.
-     *
-     * @return The ServiceBroker that instantiated this object.
-     */
-    public ServiceBroker getServiceBroker()
-    {
-        return serviceBroker;
-    }
-
-    /**
-     * Returns the properties of this Service.
-     *
-     * @return The Properties of this Service.
-     */
-    public Properties getProperties()
-    {
-        return ConfigurationConverter.getProperties(getConfiguration());
-    }
-
-    /**
-     * Returns the configuration of this Service.
-     *
-     * @return The Configuration of this Service.
-     */
-    public Configuration getConfiguration()
-    {
-        if (name == null)
-        {
-            return null;
-        }
-
-        if (configuration == null)
-        {
-            configuration = getServiceBroker().getConfiguration(name);
-        }
-        return configuration;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/BaseServiceBroker.java b/src/java/org/apache/turbine/services/BaseServiceBroker.java
deleted file mode 100644
index cc534d7..0000000
--- a/src/java/org/apache/turbine/services/BaseServiceBroker.java
+++ /dev/null
@@ -1,647 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * A generic implementation of a <code>ServiceBroker</code> which
- * provides:
- *
- * <ul>
- * <li>Maintaining service name to class name mapping, allowing
- * plugable service implementations.</li>
- * <li>Providing <code>Services</code> with a configuration based on
- * system wide configuration mechanism.</li>
- * </ul>
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class BaseServiceBroker implements ServiceBroker
-{
-    /**
-     * Mapping of Service names to class names.
-     */
-    protected Configuration mapping = new BaseConfiguration();
-
-    /**
-     * A repository of Service instances.
-     */
-    protected Hashtable services = new Hashtable();
-
-    /**
-     * Configuration for the services broker.
-     * The configuration should be set by the application
-     * in which the services framework is running.
-     */
-    protected Configuration configuration;
-
-    /**
-     * A prefix for <code>Service</code> properties in
-     * TurbineResource.properties.
-     */
-    public static final String SERVICE_PREFIX = "services.";
-
-    /**
-     * A <code>Service</code> property determining its implementing
-     * class name .
-     */
-    public static final String CLASSNAME_SUFFIX = ".classname";
-
-    /**
-     * These are objects that the parent application
-     * can provide so that application specific
-     * services have a mechanism to retrieve specialized
-     * information. For example, in Turbine there are services
-     * that require the RunData object: these services can
-     * retrieve the RunData object that Turbine has placed
-     * in the service manager. This alleviates us of
-     * the requirement of having init(Object) all
-     * together.
-     */
-    protected Hashtable serviceObjects = new Hashtable();
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(BaseServiceBroker.class);
-
-    /**
-     * Application root path as set by the
-     * parent application.
-     */
-    protected String applicationRoot;
-
-    /**
-     * Default constructor, protected as to only be useable by subclasses.
-     *
-     * This constructor does nothing.
-     */
-    protected BaseServiceBroker()
-    {
-    }
-
-    /**
-     * Set the configuration object for the services broker.
-     * This is the configuration that contains information
-     * about all services in the care of this service
-     * manager.
-     *
-     * @param configuration Broker configuration.
-     */
-    public void setConfiguration(Configuration configuration)
-    {
-        this.configuration = configuration;
-    }
-
-    /**
-     * Get the configuration for this service manager.
-     *
-     * @return Broker configuration.
-     */
-    public Configuration getConfiguration()
-    {
-        return configuration;
-    }
-
-    /**
-     * Initialize this service manager.
-     */
-    public void init() throws InitializationException
-    {
-        // Check:
-        //
-        // 1. The configuration has been set.
-        // 2. Make sure the application root has been set.
-
-        // FIXME: Make some service framework exceptions to throw in
-        // the event these requirements aren't satisfied.
-
-        // Create the mapping between service names
-        // and their classes.
-        initMapping();
-
-        // Start services that have their 'earlyInit'
-        // property set to 'true'.
-        initServices(false);
-    }
-
-    /**
-     * Set an application specific service object
-     * that can be used by application specific
-     * services.
-     *
-     * @param name name of service object
-     * @param value value of service object
-     */
-    public void setServiceObject(String name, Object value)
-    {
-        serviceObjects.put(name, value);
-    }
-
-    /**
-     * Get an application specific service object.
-     *
-     * @return Object application specific service object
-     */
-    public Object getServiceObject(String name)
-    {
-        return serviceObjects.get(name);
-    }
-
-    /**
-     * Creates a mapping between Service names and class names.
-     *
-     * The mapping is built according to settings present in
-     * TurbineResources.properties.  The entries should have the
-     * following form:
-     *
-     * <pre>
-     * services.MyService.classname=com.mycompany.MyServiceImpl
-     * services.MyOtherService.classname=com.mycompany.MyOtherServiceImpl
-     * </pre>
-     *
-     * <br>
-     *
-     * Generic ServiceBroker provides no Services.
-     */
-    protected void initMapping()
-    {
-        /*
-         * These keys returned in an order that corresponds
-         * to the order the services are listed in
-         * the TR.props.
-         *
-         * When the mapping is created we use a Configuration
-         * object to ensure that the we retain the order
-         * in which the order the keys are returned.
-         *
-         * There's no point in retrieving an ordered set
-         * of keys if they aren't kept in order :-)
-         */
-        for (Iterator keys = configuration.getKeys(); keys.hasNext();)
-        {
-            String key = (String) keys.next();
-            String[] keyParts = StringUtils.split(key, ".");
-
-            if ((keyParts.length == 3)
-                    && (keyParts[0] + ".").equals(SERVICE_PREFIX)
-                    && ("." + keyParts[2]).equals(CLASSNAME_SUFFIX))
-            {
-                String serviceKey = keyParts[1];
-                log.info("Added Mapping for Service: " + serviceKey);
-
-                if (!mapping.containsKey(serviceKey))
-                {
-                    mapping.setProperty(serviceKey,
-                            configuration.getString(key));
-                }
-            }
-        }
-    }
-
-    /**
-     * Determines whether a service is registered in the configured
-     * <code>TurbineResources.properties</code>.
-     *
-     * @param serviceName The name of the service whose existance to check.
-     * @return Registration predicate for the desired services.
-     */
-    public boolean isRegistered(String serviceName)
-    {
-        return (services.get(serviceName) != null);
-    }
-
-    /**
-     * Returns an Iterator over all known service names.
-     *
-     * @return An Iterator of service names.
-     */
-    public Iterator getServiceNames()
-    {
-        return mapping.getKeys();
-    }
-
-    /**
-     * Returns an Iterator over all known service names beginning with
-     * the provided prefix.
-     *
-     * @param prefix The prefix against which to test.
-     * @return An Iterator of service names which match the prefix.
-     */
-    public Iterator getServiceNames(String prefix)
-    {
-        return mapping.getKeys(prefix);
-    }
-
-    /**
-     * Performs early initialization of specified service.
-     *
-     * @param name The name of the service (generally the
-     * <code>SERVICE_NAME</code> constant of the service's interface
-     * definition).
-     * @exception InitializationException Initialization of this
-     * service was not successful.
-     */
-    public synchronized void initService(String name)
-            throws InitializationException
-    {
-        // Calling getServiceInstance(name) assures that the Service
-        // implementation has its name and broker reference set before
-        // initialization.
-        Service instance = getServiceInstance(name);
-
-        if (!instance.getInit())
-        {
-            // this call might result in an indirect recursion
-            instance.init();
-        }
-    }
-
-    /**
-     * Performs early initialization of all services.  Failed early
-     * initialization of a Service may be non-fatal to the system,
-     * thus any exceptions are logged and the initialization process
-     * continues.
-     */
-    public void initServices()
-    {
-        try
-        {
-            initServices(false);
-        }
-        catch (InstantiationException notThrown)
-        {
-            log.debug("Caught non fatal exception", notThrown);
-        }
-        catch (InitializationException notThrown)
-        {
-            log.debug("Caught non fatal exception", notThrown);
-        }
-    }
-
-    /**
-     * Performs early initialization of all services. You can decide
-     * to handle failed initializations if you wish, but then
-     * after one service fails, the other will not have the chance
-     * to initialize.
-     *
-     * @param report <code>true</code> if you want exceptions thrown.
-     */
-    public void initServices(boolean report)
-            throws InstantiationException, InitializationException
-    {
-        if (report)
-        {
-            // Throw exceptions
-            for (Iterator names = getServiceNames(); names.hasNext();)
-            {
-                doInitService((String) names.next());
-            }
-        }
-        else
-        {
-            // Eat exceptions
-            for (Iterator names = getServiceNames(); names.hasNext();)
-            {
-                try
-                {
-                    doInitService((String) names.next());
-                }
-                        // In case of an exception, file an error message; the
-                        // system may be still functional, though.
-                catch (InstantiationException e)
-                {
-                    log.error(e);
-                }
-                catch (InitializationException e)
-                {
-                    log.error(e);
-                }
-            }
-        }
-        log.info("Finished initializing all services!");
-    }
-
-    /**
-     * Internal utility method for use in {@link #initServices(boolean)}
-     * to prevent duplication of code.
-     */
-    private void doInitService(String name)
-            throws InstantiationException, InitializationException
-    {
-        // Only start up services that have their earlyInit flag set.
-        if (getConfiguration(name).getBoolean("earlyInit", false))
-        {
-            log.info("Start Initializing service (early): " + name);
-            initService(name);
-            log.info("Finish Initializing service (early): " + name);
-        }
-    }
-
-    /**
-     * Shuts down a <code>Service</code>, releasing resources
-     * allocated by an <code>Service</code>, and returns it to its
-     * initial (uninitialized) state.
-     *
-     * @param name The name of the <code>Service</code> to be
-     * uninitialized.
-     */
-    public synchronized void shutdownService(String name)
-    {
-        try
-        {
-            Service service = getServiceInstance(name);
-            if (service != null && service.getInit())
-            {
-                service.shutdown();
-                if (service.getInit() && service instanceof BaseService)
-                {
-                    // BaseService::shutdown() does this by default,
-                    // but could've been overriden poorly.
-                    ((BaseService) service).setInit(false);
-                }
-            }
-        }
-        catch (InstantiationException e)
-        {
-            // Assuming harmless -- log the error and continue.
-            log.error("Shutdown of a nonexistent Service '"
-                    + name + "' was requested", e);
-        }
-    }
-
-    /**
-     * Shuts down all Turbine services, releasing allocated resources and
-     * returning them to their initial (uninitialized) state.
-     */
-    public void shutdownServices()
-    {
-        log.info("Shutting down all services!");
-
-        String serviceName = null;
-
-        /*
-         * Now we want to reverse the order of
-         * this list. This functionality should be added to
-         * the ExtendedProperties in the commons but
-         * this will fix the problem for now.
-         */
-
-        ArrayList reverseServicesList = new ArrayList();
-
-        for (Iterator serviceNames = getServiceNames(); serviceNames.hasNext();)
-        {
-            serviceName = (String) serviceNames.next();
-            reverseServicesList.add(0, serviceName);
-        }
-
-        for (Iterator serviceNames = reverseServicesList.iterator(); serviceNames.hasNext();)
-        {
-            serviceName = (String) serviceNames.next();
-            log.info("Shutting down service: " + serviceName);
-            shutdownService(serviceName);
-        }
-    }
-
-    /**
-     * Returns an instance of requested Service.
-     *
-     * @param name The name of the Service requested.
-     * @return An instance of requested Service.
-     * @exception InstantiationException if the service is unknown or
-     * can't be initialized.
-     */
-    public Service getService(String name) throws InstantiationException
-    {
-        Service service;
-        try
-        {
-            service = getServiceInstance(name);
-            if (!service.getInit())
-            {
-                synchronized (service.getClass())
-                {
-                    if (!service.getInit())
-                    {
-                        log.info("Start Initializing service (late): " + name);
-                        service.init();
-                        log.info("Finish Initializing service (late): " + name);
-                    }
-                }
-            }
-            if (!service.getInit())
-            {
-                // this exception will be caught & rethrown by this very method.
-                // getInit() returning false indicates some initialization issue,
-                // which in turn prevents the InitableBroker from passing a
-                // reference to a working instance of the initable to the client.
-                throw new InitializationException(
-                        "init() failed to initialize service " + name);
-            }
-            return service;
-        }
-        catch (InitializationException e)
-        {
-            throw new InstantiationException("Service " + name +
-                    " failed to initialize", e);
-        }
-    }
-
-    /**
-     * Retrieves an instance of a Service without triggering late
-     * initialization.
-     *
-     * Early initialization of a Service can require access to Service
-     * properties.  The Service must have its name and serviceBroker
-     * set by then.  Therefore, before calling
-     * Initable.initClass(Object), the class must be instantiated with
-     * InitableBroker.getInitableInstance(), and
-     * Service.setServiceBroker() and Service.setName() must be
-     * called.  This calls for two - level accessing the Services
-     * instances.
-     *
-     * @param name The name of the service requested.
-     * @exception InstantiationException The service is unknown or
-     * can't be initialized.
-     */
-    protected Service getServiceInstance(String name)
-            throws InstantiationException
-    {
-        Service service = (Service) services.get(name);
-
-        if (service == null)
-        {
-            
-            String className=null;
-            if (!mapping.containsKey(name))
-            {
-                throw new InstantiationException(
-                        "ServiceBroker: unknown service " + name
-                        + " requested");
-            }
-            try
-            {
-                className = mapping.getString(name);
-                service = (Service) services.get(className);
-
-                if (service == null)
-                {
-                    try
-                    {
-                        service = (Service)
-                                Class.forName(className).newInstance();
-                    }
-                    // those two errors must be passed to the VM
-                    catch (ThreadDeath t)
-                    {
-                        throw t;
-                    }
-                    catch (OutOfMemoryError t)
-                    {
-                        throw t;
-                    }
-                    catch (Throwable t)
-                    {
-                        // Used to indicate error condition.
-                        String msg = null;
-
-                        if (t instanceof NoClassDefFoundError)
-                        {
-                            msg = "A class referenced by " + className +
-                                    " is unavailable. Check your jars and classes.";
-                        }
-                        else if (t instanceof ClassNotFoundException)
-                        {
-                            msg = "Class " + className +
-                                    " is unavailable. Check your jars and classes.";
-                        }
-                        else if (t instanceof ClassCastException)
-                        {
-                            msg = "Class " + className +
-                                    " doesn't implement the Service interface";
-                        }
-                        else
-                        {
-                            msg = "Failed to instantiate " + className;
-                        }
-
-                        throw new InstantiationException(msg, t);
-                    }
-                }
-            }
-            catch (ClassCastException e)
-            {
-                throw new InstantiationException("ServiceBroker: Class "
-                        + className
-                        + " does not implement Service interface.", e);
-            }
-            catch (InstantiationException e)
-            {
-                throw new InstantiationException(
-                        "Failed to instantiate service " + name, e);
-            }
-            service.setServiceBroker(this);
-            service.setName(name);
-            services.put(name, service);
-        }
-
-        return service;
-    }
-
-    /**
-     * Returns the configuration for the specified service.
-     *
-     * @param name The name of the service.
-     * @return Configuration of requested Service.
-     */
-    public Configuration getConfiguration(String name)
-    {
-        return configuration.subset(SERVICE_PREFIX + name);
-    }
-
-    /**
-     * Set the application root.
-     *
-     * @param applicationRoot application root
-     */
-    public void setApplicationRoot(String applicationRoot)
-    {
-        this.applicationRoot = applicationRoot;
-    }
-
-    /**
-     * Get the application root as set by
-     * the parent application.
-     *
-     * @return String application root
-     */
-    public String getApplicationRoot()
-    {
-        return applicationRoot;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/BaseUnicastRemoteService.java b/src/java/org/apache/turbine/services/BaseUnicastRemoteService.java
deleted file mode 100644
index 032df9f..0000000
--- a/src/java/org/apache/turbine/services/BaseUnicastRemoteService.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
-import java.util.Properties;
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.configuration.ConfigurationConverter;
-
-/**
- * A base implementation of an {@link java.rmi.server.UnicastRemoteObject}
- * as a Turbine {@link org.apache.turbine.services.Service}.
- *
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- */
-public class BaseUnicastRemoteService extends UnicastRemoteObject
-        implements Service
-{
-    protected Configuration configuration;
-    private boolean isInitialized;
-    private InitableBroker initableBroker;
-    private String name;
-    private ServiceBroker serviceBroker;
-
-    public BaseUnicastRemoteService()
-            throws RemoteException
-    {
-        isInitialized = false;
-        initableBroker = null;
-        name = null;
-        serviceBroker = null;
-    }
-
-    /**
-     * Returns the configuration of this service.
-     *
-     * @return The configuration of this service.
-     */
-    public Configuration getConfiguration()
-    {
-        if (name == null)
-        {
-            return null;
-        }
-        else
-        {
-            if (configuration == null)
-            {
-                configuration = getServiceBroker().getConfiguration(name);
-            }
-            return configuration;
-        }
-    }
-
-    public void init(ServletConfig config)
-            throws InitializationException
-    {
-        setInit(true);
-    }
-
-    public void setInitableBroker(InitableBroker broker)
-    {
-        this.initableBroker = broker;
-    }
-
-    public InitableBroker getInitableBroker()
-    {
-        return initableBroker;
-    }
-
-    public void init(Object data)
-            throws InitializationException
-    {
-        init((ServletConfig) data);
-    }
-
-    public void init() throws InitializationException
-    {
-        setInit(true);
-    }
-
-    protected void setInit(boolean value)
-    {
-        isInitialized = value;
-    }
-
-    public boolean getInit()
-    {
-        return isInitialized;
-    }
-
-    /**
-     * Shuts down this service.
-     */
-    public void shutdown()
-    {
-        setInit(false);
-    }
-
-    public Properties getProperties()
-    {
-        return ConfigurationConverter.getProperties(getConfiguration());
-    }
-
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    public String getName()
-    {
-        return name;
-    }
-
-    public ServiceBroker getServiceBroker()
-    {
-        return serviceBroker;
-    }
-
-    public void setServiceBroker(ServiceBroker broker)
-    {
-        this.serviceBroker = broker;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/Initable.java b/src/java/org/apache/turbine/services/Initable.java
deleted file mode 100644
index 06ded7e..0000000
--- a/src/java/org/apache/turbine/services/Initable.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Classes that implement this interface need initialization before
- * they can work.
- *
- * These classes rely also on an <code>InitableBroker</code> that
- * ensures that there is only one instance of the class in the system,
- * and handles dependencies between <code>Initables</code>.
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public interface Initable
-{
-    /**
-     * Provides an Initable with a reference to the InitableBroker
-     * that instantiated this object, so that it can access other
-     * Initables.
-     *
-     * @param broker The InitableBroker that instantiated this object.
-     */
-    void setInitableBroker(InitableBroker broker);
-
-    /**
-     * Performs early initailization of an Initable
-     *
-     * During the startup of the system, different objects may be
-     * passed to your class using this method.  It should ignore any
-     * objects that it doesn't need or understand.
-     *
-     * After the class changes its internal state so that getInit()
-     * returns true, this method will be called no more, and late
-     * initialization will not be performed.
-     *
-     * If your class relies on early initialization, and the object it
-     * expects was not received, you can use late initialization to
-     * throw an exception and complain.
-     *
-     * @param data An Object to use for initialization activities.
-     * @exception InitializationException if initilaization of this
-     * class was not successful.
-     */
-    void init(Object data) throws InitializationException;
-
-    /**
-     * Performs late initialization of an Initable.
-     *
-     * When your class is being requested from an InitableBroker, it
-     * will call getInit(), and if it returns false, this method will
-     * be invoked.
-     *
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     */
-    void init() throws InitializationException;
-
-    /**
-     * Returns an <code>Initable</code> to an uninitialized state.
-     *
-     * <p>This method must release all resources allocated by the
-     * <code>Initable</code> implementation, and resetting its internal state.
-     * You may chose to implement this operation or not. If you support
-     * this operation, getInit() should return false after successful
-     * shutdown of the service.
-     */
-    void shutdown();
-
-    /**
-     * Returns initialization status of an Initable.
-     *
-     * @return Initialization status of an Initable.
-     */
-    boolean getInit();
-}
diff --git a/src/java/org/apache/turbine/services/InitableBroker.java b/src/java/org/apache/turbine/services/InitableBroker.java
deleted file mode 100644
index ed42703..0000000
--- a/src/java/org/apache/turbine/services/InitableBroker.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Classes that implement this interface can act as a broker for
- * <code>Initable</code> classes.
- *
- * Functionality provided by the broker includes:
- *
- * <ul>
- *
- * <li>Maintaining a single instance of each <code>Initable</code> in
- * the system.</li>
- *
- * <li>Early initialization of <code>Initables</code> during system
- * startup.</li>
- *
- * <li>Late initialization of <code>Initables</code> before they are
- * used.</li>
- *
- * <li>Providing instances of <code>Initables</code> to requesting
- * parties.</li>
- *
- * <li>Maintainging dependencies between <code>Initables</code> during
- * early initalization phases, including circular dependencies
- * detection.</li>
- *
- * </ul>
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public interface InitableBroker
-{
-    /**
-     * Performs early initialization of an Initable class.
-     *
-     * If your class depends on another Initable being initialized to
-     * perform early initialization, you should always ask your broker
-     * to initialize the other class with the objects that are passed
-     * to you, before you try to retrieve that Initable's instance with
-     * getInitable().
-     *
-     * @param className The name of the class to be initailized.
-     * @param data An object to be used for initialization activities.
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     */
-    void initClass(String className, Object data)
-            throws InitializationException;
-
-    /**
-     * Shutdowns an Initable class.
-     *
-     * This method is used to release resources allocated by an
-     * Initable class, and return it to initial (uninitailized)
-     * state.
-     *
-     * @param className The name of the class to be uninitialized.
-     */
-    void shutdownClass(String className);
-
-    /**
-     * Provides an instance of Initable class ready to work.
-     *
-     * If the requested class couldn't be instatiated or initialized,
-     * InstantiationException will be thrown.  You needn't handle this
-     * exception in your code, since it indicates fatal
-     * misconfigurtion of the system.
-     *
-     * @param className The name of the Initable requested.
-     * @return An instance of requested Initable.
-     * @exception InstantiationException if there was a problem
-     * during instantiation or initialization of the Initable.
-     */
-    Initable getInitable(String className) throws InstantiationException;
-}
diff --git a/src/java/org/apache/turbine/services/InitializationException.java b/src/java/org/apache/turbine/services/InitializationException.java
deleted file mode 100644
index 899d7fd..0000000
--- a/src/java/org/apache/turbine/services/InitializationException.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Thrown by <code>Initable</code> class in case of initialization
- * problems.
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- * @see org.apache.turbine.services.Initable
- */
-public class InitializationException extends TurbineException
-{
-    /**
-     * Construct an InitializationException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public InitializationException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Construct an InitializationException with specified detail message
-     * and nested Throwable.
-     *
-     * @param msg The detail message.
-     * @param t the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public InitializationException(String msg, Throwable t)
-    {
-        super(msg, t);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/InstantiationException.java b/src/java/org/apache/turbine/services/InstantiationException.java
deleted file mode 100644
index 67acbb6..0000000
--- a/src/java/org/apache/turbine/services/InstantiationException.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineRuntimeException;
-
-/**
- * Thrown by <code>InitableBroker</code> and
- * <code>ServiceBroker</code> classes to indicate problems with
- * instatiation of requested objects.
- * 
- * Make sure you don't confuse this exception with the java.lang.InstantiationException.
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- * @see org.apache.turbine.services.Initable
- */
-public class InstantiationException extends TurbineRuntimeException
-{
-    /**
-     * Construct an InstantiationException with specified detail
-     * message.
-     *
-     * @param msg The detail message.
-     */
-    public InstantiationException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Construct an InstantiatioException with specified detail message
-     * and nested Throwable.
-     *
-     * @param msg The detail message.
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public InstantiationException(String msg, Throwable t)
-    {
-        super(msg, t);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/Service.java b/src/java/org/apache/turbine/services/Service.java
deleted file mode 100644
index b762457..0000000
--- a/src/java/org/apache/turbine/services/Service.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Properties;
-
-import org.apache.commons.configuration.Configuration;
-
-/**
- * <code>Services</code> are <code>Initables</code> that have a name,
- * and a set of properties.
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @version $Id$
- */
-public interface Service
-        extends Initable
-{
-    /** The name of this service. */
-    String SERVICE_NAME = "Service";
-
-    /**
-     * Provides a Service with a reference to the ServiceBroker that
-     * instantiated this object, so that it can ask for its properties
-     * and access other Services.
-     *
-     * @param broker The ServiceBroker that instantiated this object.
-     */
-    void setServiceBroker(ServiceBroker broker);
-
-    /**
-     * ServiceBroker uses this method to pass a Service its name.
-     * Service uses its name to ask the broker for an apropriate set
-     * of Properties.
-     *
-     * @param name The name of this Service.
-     */
-    void setName(String name);
-
-    /**
-     * Returns the name of this Service.
-     *
-     * @return The name of this Service.
-     */
-    String getName();
-
-    /**
-     * Returns the Properties of this Service.  Every Service has at
-     * least one property, which is "classname", containing the name
-     * of the class implementing this service.  Note that the service
-     * may chose to alter its properties, therefore they may be
-     * different from those returned by ServiceBroker.
-     *
-     * @return The properties of this Service.
-     */
-    Properties getProperties();
-
-    /**
-     * Returns the Configuration of this Service.  Every Service has at
-     * least one property, which is "classname", containing the name
-     * of the class implementing this service.  Note that the service
-     * may chose to alter its configuration, therefore they may be
-     * different from those returned by ServiceBroker.
-     *
-     * @return The Configuration of this Service.
-     */
-    Configuration getConfiguration();
-}
diff --git a/src/java/org/apache/turbine/services/ServiceBroker.java b/src/java/org/apache/turbine/services/ServiceBroker.java
deleted file mode 100644
index 7e2976f..0000000
--- a/src/java/org/apache/turbine/services/ServiceBroker.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-/**
- * Classes that implement this interface can act as a broker for
- * <code>Service</code> classes.
- *
- * Functionality that <code>ServiceBroker</code> provides in addition
- * to <code>InitableBroker</code> functionality includes:
- *
- * <ul>
- *
- * <li>Maintaining service name to class name mapping, allowing
- * plugable service implementations.</li>
- *
- * <li>Providing <code>Services</code> with <code>Properties</code>
- * based on a system wide configuration mechanism.</li>
- *
- * </ul>
- *
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface ServiceBroker
-{
-    /**
-     * Determines whether a service is registered in the configured
-     * <code>TurbineResources.properties</code>.
-     *
-     * @param serviceName The name of the service whose existance to check.
-     * @return Registration predicate for the desired services.
-     */
-    boolean isRegistered(String serviceName);
-
-    /**
-     * Performs early initialization of the specified service.
-     *
-     * @param name The name of the service.
-     * @exception InitializationException if the service is unknown
-     * or can't be initialized.
-     */
-    void initService(String name) throws InitializationException;
-
-    /**
-     * Shutdowns a Service.
-     *
-     * This method is used to release resources allocated by a
-     * Service, and return it to initial (uninitailized) state.
-     *
-     * @param name The name of the Service to be uninitialized.
-     */
-    void shutdownService(String name);
-
-    /**
-     * Shutdowns all Services.
-     *
-     * This method is used to release resources allocated by
-     * Services, and return them to initial (uninitialized) state.
-     */
-    void shutdownServices();
-
-    /**
-     * Returns an instance of requested Service.
-     *
-     * @param name The name of the Service requested.
-     * @return An instance of requested Service.
-     * @exception InstantiationException if the service is unknown or
-     * can't be initialized.
-     */
-    Service getService(String name) throws InstantiationException;
-
-    /**
-     * Returns the configuration of a specific service. Services
-     * use this method to retrieve their configuration.
-     *
-     * @param name The name of the service.
-     * @return Configuration of the requested service.
-     */
-    Configuration getConfiguration(String name);
-}
diff --git a/src/java/org/apache/turbine/services/ServiceManager.java b/src/java/org/apache/turbine/services/ServiceManager.java
deleted file mode 100644
index 599f7d2..0000000
--- a/src/java/org/apache/turbine/services/ServiceManager.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-/**
- * Classes that implement this interface can act as a manager for
- * <code>Service</code> classes.
- *
- * Functionality that <code>ServiceManager</code> provides in addition
- * to <code>ServiceBroker</code> functionality includes configuration
- * of the manager.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface ServiceManager extends ServiceBroker
-{
-    /**
-     * Initialize this service manager.
-     */
-    void init() throws InitializationException;
-
-    /**
-     * Get the configuration for this service manager.
-     *
-     * @return Manager configuration.
-     */
-    Configuration getConfiguration();
-
-    /**
-     * Set the configuration object for the services broker.
-     * This is the configuration that contains information
-     * about all services in the care of this service
-     * manager.
-     *
-     * @param configuration Manager configuration.
-     */
-    void setConfiguration(Configuration configuration);
-
-    /**
-     * Set the application root.
-     *
-     * @param applicationRoot application root
-     */
-    void setApplicationRoot(String applicationRoot);
-}
diff --git a/src/java/org/apache/turbine/services/TurbineBaseService.java b/src/java/org/apache/turbine/services/TurbineBaseService.java
deleted file mode 100644
index 90ad1d6..0000000
--- a/src/java/org/apache/turbine/services/TurbineBaseService.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-/**
- * <p>This class provides a <code>Service</code> implementation that
- * Services used in Turbine are required to extend.  The
- * functionality provided in addition to <code>BaseService</code>
- * functionality is recognizing objects used in early initialization
- * of <code>Services</code> in Turbine, and passing them to
- * appropriate convenience methods.  These methods should be overriden
- * to provide desired initialization functionality.</p>
- *
- * <p><strong>Note!</strong><br>Remember to call
- * <code>setInit(true)</code> after successful initialization.</p>
- *
- * <p><strong>Note!</strong><br>If you need to use another
- * <code>Service</code> inside your early initialization, remember to
- * request initialization of that <code>Service</code> before using
- * it:</p>
- *
- * <pre><code>
- * getServiceBroker().initClass("OtherService",data);
- * OtherService service =
- *         (OtherService)getServiceBroker().getService("OtherService");
- * </code></pre>
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class TurbineBaseService
-        extends BaseService
-{
-    /**
-     * Performs early initialization.  Overrides init() method in
-     * BaseService to detect objects used in Turbine's Service
-     * initialization and pass them to apropriate init() methods.
-     *
-     * @param data An Object to use for initialization activities.
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     */
-    public void init(Object data)
-            throws InitializationException
-    {
-        if (data instanceof ServletConfig)
-        {
-            init((ServletConfig) data);
-        }
-        else if (data instanceof RunData)
-        {
-            init((RunData) data);
-        }
-        else if (data instanceof PipelineData)
-        {
-            init((PipelineData) data);
-        }
-    }
-
-    /**
-     * Performs early initialization.
-     *
-     * @param config A ServletConfing to use for initialization
-     * activities.
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     * @deprecated Use init() instead
-     */
-    public void init(ServletConfig config) throws InitializationException
-    {
-    }
-
-    /**
-     * Performs early initialization.
-     *
-     * @deprecated Use the PipelineData version instead.
-     * @param data An RunData to use for initialization activities.
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     */
-    public void init(RunData data) throws InitializationException
-    {
-    }
-
-    /**
-     * Performs early initialization.
-     *
-     * @param data A PipelineData to use for initialization activities.
-     * @exception InitializationException if initialization of this
-     * class was not successful.
-     */
-    public void init(PipelineData data) throws InitializationException
-    {
-    }
-
-    
-    /**
-     * Performs late initialization.
-     *
-     * If your class relies on early initialization, and the object it
-     * expects was not received, you can use late initialization to
-     * throw an exception and complain.
-     *
-     * @exception InitializationException, if initialization of this
-     * class was not successful.
-     */
-    public void init() throws InitializationException
-    {
-        setInit(true);
-    }
-
-    /**
-     * Returns to uninitialized state.
-     *
-     * You can use this method to release resources thet your Service
-     * allocated when Turbine shuts down.
-     */
-    public void shutdown()
-    {
-        setInit(false);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/TurbineServices.java b/src/java/org/apache/turbine/services/TurbineServices.java
deleted file mode 100644
index 032c9e7..0000000
--- a/src/java/org/apache/turbine/services/TurbineServices.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.apache.turbine.services;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This is a singleton utility class that acts as a Services broker.
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:burton@apache.org">Kevin Burton</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineServices
-        extends BaseServiceBroker
-        implements ServiceManager
-{
-    /** The single instance of this class. */
-    private static ServiceManager instance = new TurbineServices();
-
-    /**
-     * This constructor is protected to force clients to use
-     * getInstance() to access this class.
-     */
-    protected TurbineServices()
-    {
-        super();
-    }
-
-    /**
-     * The method through which this class is accessed as a broker.
-     *
-     * @return The single instance of this class.
-     */
-    public static ServiceManager getInstance()
-    {
-        return instance;
-    }
-
-    /**
-     * The method through which to change the default manager.
-     * Note that services of the previous manager will be shutdown.
-     * @param manager a new service manager.
-     */
-    public static synchronized void setManager(ServiceManager manager)
-    {
-        ServiceManager previous = instance;
-        instance = manager;
-        if (previous != null)
-        {
-            previous.shutdownServices();
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/AssemblerBrokerService.java b/src/java/org/apache/turbine/services/assemblerbroker/AssemblerBrokerService.java
deleted file mode 100644
index f9461a1..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/AssemblerBrokerService.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine.services.assemblerbroker;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.Assembler;
-import org.apache.turbine.services.Service;
-import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * An interface the Turbine Assembler service.
- * See TurbineAssemblerBrokerService for more info.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface AssemblerBrokerService
-        extends Service
-{
-    /** Name of the Service */
-    String SERVICE_NAME = "AssemblerBrokerService";
-
-    /** Predefined types for Turbine built-in assemblers: Actions  */
-    String ACTION_TYPE = "action";
-
-    /** Predefined types for Turbine built-in assemblers: Screens  */
-    String SCREEN_TYPE = "screen";
-
-    /** Predefined types for Turbine built-in assemblers: Navigations  */
-    String NAVIGATION_TYPE = "navigation";
-
-    /** Predefined types for Turbine built-in assemblers: Layouts  */
-    String LAYOUT_TYPE = "layout";
-
-    /** Predefined types for Turbine built-in assemblers: Pages  */
-    String PAGE_TYPE = "page";
-
-    /** Predefined types for Turbine built-in assemblers: Scheduler Jobs  */
-    String SCHEDULEDJOB_TYPE = "scheduledjob";
-
-    /** 
-     * Register an AssemblerFactory class for a given type
-     *
-     * @param type Type of the Factory
-     * @param factory The factory object
-     */
-    void registerFactory(String type, AssemblerFactory factory);
-
-    /** 
-     * Attempts to load an Assembler of a type with a given name
-     * 
-     * @param type The Type of the Assembler
-     * @param name The Name of the Assembler
-     * @return An Assembler object for the requested name and type
-     *
-     * @throws TurbineException Something went wrong while looking for the Assembler
-     */
-    Assembler getAssembler(String type, String name) throws TurbineException;
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBroker.java b/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBroker.java
deleted file mode 100644
index 06851ee..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBroker.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.apache.turbine.services.assemblerbroker;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.Assembler;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * An interface the Turbine Assembler service.
- * See TurbineAssemblerBrokerService for more info.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class TurbineAssemblerBroker
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return An AssemblerBroker implementation instance
-     */
-    public static AssemblerBrokerService getService()
-    {
-        return (AssemblerBrokerService) TurbineServices.getInstance()
-            .getService(AssemblerBrokerService.SERVICE_NAME);
-    }
-
-    /**
-     * Register a new Assembler factory with this service.
-     *
-     * @param type The type of Assembler Factory
-     * @param factory The actual Factory Object
-     */
-    public static void registerFactory(String type, AssemblerFactory factory)
-    {
-        getService().registerFactory(type, factory);
-    }
-
-    /**
-     * Return an Assembler for a given type and object name.
-     *
-     * @param type The Type of Assember we want
-     * @param name The name of the Assembler
-     *
-     * @return An Assembler Object.
-     *
-     * @throws TurbineException If a problem locating the Assember occured.
-     */
-    public static Assembler getAssembler(String type, String name)
-        throws TurbineException
-    {
-        return getService().getAssembler(type, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java b/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
deleted file mode 100644
index 4a4da33..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/TurbineAssemblerBrokerService.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.apache.turbine.services.assemblerbroker;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Vector;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.modules.Assembler;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * TurbineAssemblerBrokerService allows assemblers (like screens,
- * actions and layouts) to be loaded from one or more AssemblerFactory
- * classes.  AssemblerFactory classes are registered with this broker
- * by adding them to the TurbineResources.properties file.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineAssemblerBrokerService
-        extends TurbineBaseService
-        implements AssemblerBrokerService
-{
-    /** Logging */
-    private static Log log
-            = LogFactory.getLog(TurbineAssemblerBrokerService.class);
-
-    /** A structure that holds the registered AssemblerFactories */
-    private Map factories = null;
-
-    /**
-     * Get a list of AssemblerFactories of a certain type
-     *
-     * @param type type of Assembler
-     * @return list of AssemblerFactories
-     */
-    private List getFactoryGroup(String type)
-    {
-        if (!factories.containsKey(type))
-        {
-            factories.put(type, new Vector());
-        }
-        return (List) factories.get(type);
-    }
-
-    /**
-     * Utiltiy method to register all factories for a given type.
-     *
-     * @param type type of Assembler
-     * @throws TurbineException
-     */
-    private void registerFactories(String type)
-        throws TurbineException
-    {
-        List names = getConfiguration().getList(type);
-
-        log.info("Registering " + names.size() + " " + type + " factories.");
-
-        for (Iterator it = names.iterator(); it.hasNext(); )
-        {
-            String factory = (String) it.next();
-            try
-            {
-                Object o = Class.forName(factory).newInstance();
-                registerFactory(type, (AssemblerFactory) o);
-            }
-            // these must be passed to the VM
-            catch (ThreadDeath e)
-            {
-                throw e;
-            }
-            catch (OutOfMemoryError e)
-            {
-                throw e;
-            }
-            // when using Class.forName(), NoClassDefFoundErrors are likely
-            // to happen (missing jar files)
-            catch (Throwable t)
-            {
-                throw new TurbineException("Failed registering " + type
-                        + " factory: " + factory, t);
-            }
-        }
-    }
-
-    /**
-     * Initializes the AssemblerBroker and loads the AssemblerFactory
-     * classes registered in TurbineResources.Properties.
-     *
-     * @throws InitializationException
-     */
-    public void init()
-        throws InitializationException
-    {
-        factories = new HashMap();
-        try
-        {
-            registerFactories(AssemblerBrokerService.ACTION_TYPE);
-            registerFactories(AssemblerBrokerService.SCREEN_TYPE);
-            registerFactories(AssemblerBrokerService.NAVIGATION_TYPE);
-            registerFactories(AssemblerBrokerService.LAYOUT_TYPE);
-            registerFactories(AssemblerBrokerService.PAGE_TYPE);
-            registerFactories(AssemblerBrokerService.SCHEDULEDJOB_TYPE);
-        }
-        catch (TurbineException e)
-        {
-            throw new InitializationException(
-                    "AssemblerBrokerService failed to initialize", e);
-        }
-        setInit(true);
-    }
-
-    /**
-     * Register a new AssemblerFactory under a certain type
-     *
-     * @param type type of Assembler
-     * @param factory factory to register
-     */
-    public void registerFactory(String type, AssemblerFactory factory)
-    {
-        getFactoryGroup(type).add(factory);
-    }
-
-    /**
-     * Attempt to retrieve an Assembler of a given type with
-     * a name.  Cycle through all the registered AssemblerFactory
-     * classes of type and return the first non-null assembly
-     * found.  If an assembly was not found return null.
-     *
-     * @param type type of Assembler
-     * @param name name of the requested Assembler
-     * @return an Assembler or null
-     * @throws TurbineException
-     */
-    public Assembler getAssembler(String type, String name)
-        throws TurbineException
-    {
-        List facs = getFactoryGroup(type);
-
-        Assembler assembler = null;
-        for (Iterator it = facs.iterator(); (assembler == null) && it.hasNext();)
-        {
-            AssemblerFactory fac = (AssemblerFactory) it.next();
-            try
-            {
-                assembler = fac.getAssembler(name);
-            }
-            catch (Exception e)
-            {
-                throw new TurbineException("Failed to load an assembler for "
-                                           + name + " from the " 
-                                           + type + " factory "
-                                           + fac.getClass().getName(), e);
-            }
-        }
-        return assembler;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/package.html b/src/java/org/apache/turbine/services/assemblerbroker/package.html
deleted file mode 100644
index 25ed254..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Assemblerbroker Service looks for action, screen, page, layout classes based on class fragments.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/AssemblerFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/AssemblerFactory.java
deleted file mode 100644
index dfc92d4..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/AssemblerFactory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.Assembler;
-
-/**
- * Interface for AssemblerFactory's
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @version $Id$
- */
-public interface AssemblerFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    Assembler getAssembler(String name) throws Exception;
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java
deleted file mode 100644
index d5b10d2..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaActionFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * An action factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaActionFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.ACTION_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
deleted file mode 100644
index 08173a8..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaBaseFactory.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-import org.apache.turbine.modules.GenericLoader;
-import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
-import org.apache.turbine.util.ObjectUtils;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class JavaBaseFactory
-    implements AssemblerFactory
-{
-    /** A vector of packages. */
-    private static List packages =
-        Turbine.getConfiguration().getList(TurbineConstants.MODULE_PACKAGES);
-
-    /** Logging */
-    protected Log log = LogFactory.getLog(this.getClass());
-
-    static
-    {
-        ObjectUtils.addOnce(packages, GenericLoader.getBasePackage());
-    }
-
-    /**
-     * Get an Assembler.
-     *
-     * @param packageName java package name
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String packageName, String name)
-    {
-        Assembler assembler = null;
-
-        log.debug("Class Fragment is " + name);
-
-        if (StringUtils.isNotEmpty(name))
-        {
-            for (Iterator it = packages.iterator(); it.hasNext();)
-            {
-                StringBuffer className = new StringBuffer();
-
-                className.append(it.next());
-                className.append('.');
-                className.append(packageName);
-                className.append('.');
-                className.append(name);
-
-                log.debug("Trying " + className);
-
-                try
-                {
-                    Class servClass = Class.forName(className.toString());
-                    assembler = (Assembler) servClass.newInstance();
-                    break; // for()
-                }
-                catch (ClassNotFoundException cnfe)
-                {
-                    // Do this so we loop through all the packages.
-                    log.debug(className + ": Not found");
-                }
-                catch (NoClassDefFoundError ncdfe)
-                {
-                    // Do this so we loop through all the packages.
-                    log.debug(className + ": No Class Definition found");
-                }
-                catch (ClassCastException cce)
-                {
-                    // This means trouble!
-                    // Alternatively we can throw this exception so
-                    // that it will appear on the client browser
-                    log.error("Could not load "+className, cce);
-                    break; // for()
-                }
-                catch (InstantiationException ine)
-                {
-                    // This means trouble!
-                    // Alternatively we can throw this exception so
-                    // that it will appear on the client browser
-                    log.error("Could not load "+className, ine);
-                    break; // for()
-                }
-                catch (IllegalAccessException ilae)
-                {
-                    // This means trouble!
-                    // Alternatively we can throw this exception so
-                    // that it will appear on the client browser
-                    log.error("Could not load "+className, ilae);
-                    break; // for()
-                }
-                // With ClassCastException, InstantiationException we hit big problems
-            }
-        }
-        log.debug("Returning: " + assembler);
-
-        return assembler;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java
deleted file mode 100644
index 933bcb0..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaLayoutFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaLayoutFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.LAYOUT_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java
deleted file mode 100644
index 727ef54..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaNavigationFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaNavigationFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.NAVIGATION_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java
deleted file mode 100644
index 2a41af7..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaPageFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaPageFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.PAGE_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java
deleted file mode 100644
index 37c38a1..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScheduledJobFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaScheduledJobFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.SCHEDULEDJOB_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java
deleted file mode 100644
index cd887d1..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/JavaScreenFactory.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.java;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a java class from
- * the module packages defined in the TurbineResource.properties.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JavaScreenFactory
-        extends JavaBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     */
-    public Assembler getAssembler(String name)
-    {
-        return getAssembler(TurbineConstants.SCREEN_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/java/package.html b/src/java/org/apache/turbine/services/assemblerbroker/util/java/package.html
deleted file mode 100644
index 7e7c1f6..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/java/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Factories for the java class based view (all template views).
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/package.html b/src/java/org/apache/turbine/services/assemblerbroker/util/package.html
deleted file mode 100644
index 2e43257..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The various lookup factories for the Assemblerbroker service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java
deleted file mode 100644
index 408bb8a..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonActionFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PythonActionFactory
-        extends PythonBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getAssembler(TurbineConstants.ACTION_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
deleted file mode 100644
index 72d06be..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonBaseFactory.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.modules.Assembler;
-import org.apache.turbine.services.assemblerbroker.TurbineAssemblerBroker;
-import org.apache.turbine.services.assemblerbroker.util.AssemblerFactory;
-
-import org.python.core.Py;
-import org.python.util.PythonInterpreter;
-
-/**
- * A factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class PythonBaseFactory
-        implements AssemblerFactory
-{
-    /** Key for the python path */
-    public static final String PYTHON_PATH = "python.path";
-
-    /** Global config file. This is executed before every screen */
-    public static final String PYTHON_CONFIG_FILE = "conf.py";
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(PythonBaseFactory.class);
-
-    /** Our configuration */
-    private Configuration conf =
-        TurbineAssemblerBroker.getService().getConfiguration();
-
-    /**
-     * Get an Assembler.
-     *
-     * @param subDirectory subdirectory within python.path
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String subDirectory, String name)
-            throws Exception
-    {
-        String path = conf.getString(PYTHON_PATH);
-
-        if (StringUtils.isEmpty(path))
-        {
-            throw new Exception(
-                "Python path not found - check your Properties");
-        }
-            
-        log.debug("Screen name for JPython: " + name);
-
-        Assembler assembler = null;
-
-        String confName = path + "/" + PYTHON_CONFIG_FILE;
-
-        // The filename of the Python script
-        StringBuffer fName = new StringBuffer();
-
-        fName.append(path);
-        fName.append("/");
-        fName.append(subDirectory);
-        fName.append("/");
-        fName.append(name.toLowerCase());
-        fName.append(".py");
-
-        File f = new File(fName.toString());
-
-        if (f.exists())
-        {
-            try
-            {
-                // We try to open the Py Interpreter
-                PythonInterpreter interp = new PythonInterpreter();
-
-                // Make sure the Py Interpreter use the right classloader
-                // This is necessary for servlet engines generally has
-                // their own classloader implementations and servlets aren't
-                // loaded in the system classloader.  The python script will
-                // load java package
-                // org.apache.turbine.services.assemblerbroker.util.python;
-                // the new classes to it as well.
-                Py.getSystemState().setClassLoader(
-                        this.getClass().getClassLoader());
-
-                // We import the Python SYS module. Now we don't need to do this
-                // explicitely in the script.  We always use the sys module to
-                // do stuff like loading java package
-                // org.apache.turbine.services.assemblerbroker.util.python;
-                interp.exec("import sys");
-
-                // Now we try to load the script file
-                interp.execfile(confName);
-                interp.execfile(fName.toString());
-
-                try
-                {
-                    // We create an instance of the screen class from the
-                    // python script
-                    interp.exec("scr = " + name + "()");
-                }
-                catch (Throwable e)
-                {
-                    throw new Exception(
-                        "\nCannot create an instance of the python class.\n"
-                        + "You probably gave your class the wrong name.\n"
-                        + "Your class should have the same name as your "
-                        + "filename.\nFilenames should be all lowercase and "
-                        + "classnames should start with a capital.\n"
-                        + "Expected class name: " + name + "\n");
-                }
-
-                // Here we convert the python sceen instance to a java instance.
-                assembler = (Assembler) interp.get("scr", Assembler.class);
-            }
-            catch (Exception e)
-            {
-                // We log the error here because this code is not widely tested
-                // yet. After we tested the code on a range of platforms this
-                // won't be usefull anymore.
-                log.error("PYTHON SCRIPT SCREEN LOADER ERROR:", e);
-                throw e;
-            }
-        }
-        return assembler;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java
deleted file mode 100644
index 73ed218..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonLayoutFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PythonLayoutFactory
-        extends PythonBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getAssembler(TurbineConstants.LAYOUT_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java
deleted file mode 100644
index b8d8500..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonNavigationFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PythonNavigationFactory
-        extends PythonBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getAssembler(TurbineConstants.NAVIGATION_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java
deleted file mode 100644
index 1b00994..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonPageFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PythonPageFactory
-        extends PythonBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getAssembler(TurbineConstants.PAGE_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java b/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java
deleted file mode 100644
index 53d4ded..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/PythonScreenFactory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package org.apache.turbine.services.assemblerbroker.util.python;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.Assembler;
-
-/**
- * A screen factory that attempts to load a python class in the
- * JPython interpreter and execute it as a Turbine screen.
- * The JPython script should inherit from Turbine Screen or one
- * of its subclasses.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PythonScreenFactory
-        extends PythonBaseFactory
-{
-    /**
-     * Get an Assembler.
-     *
-     * @param name name of the requested Assembler
-     * @return an Assembler
-     * @throws Exception generic exception
-     */
-    public Assembler getAssembler(String name)
-        throws Exception
-    {
-        return getAssembler(TurbineConstants.SCREEN_PREFIX, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/assemblerbroker/util/python/package.html b/src/java/org/apache/turbine/services/assemblerbroker/util/python/package.html
deleted file mode 100644
index 4a0ff2c..0000000
--- a/src/java/org/apache/turbine/services/assemblerbroker/util/python/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Factory for the python / jython based view.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java b/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java
deleted file mode 100644
index 5ede4d5..0000000
--- a/src/java/org/apache/turbine/services/avaloncomponent/AvalonComponentService.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.avalon.framework.component.Component;
-import org.apache.avalon.framework.component.ComponentException;
-
-import org.apache.turbine.services.Service;
-
-/**
- * This service allows access to avalon components.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface AvalonComponentService
-        extends Service
-{
-    /** The publically visible name of the service */
-    String SERVICE_NAME = "AvalonComponentService";
-
-    /** Where we write the Avalon Logger messages */
-    String AVALON_LOG_CATEGORY = "avalon";
-
-    /** property specifing file name of the component config file */
-    String COMPONENT_CONFIG_KEY = "componentConfiguration";
-
-    /** property specifing file name of the component config file */
-    String COMPONENT_CONFIG_VALUE = "/WEB-INF/conf/componentConfiguration.xml";
-
-    /** property specifing file name of the component role file */
-    String COMPONENT_ROLE_KEY = "componentRoles";
-
-    /** property specifing file name of the component role file */
-    String COMPONENT_ROLE_VALUE = "/WEB-INF/conf/roleConfiguration.xml";
-
-    /** property for the Components to look up */
-    String COMPONENT_LOOKUP_KEY = "lookup";
-
-    /** Key used in the context for defining the application root */
-    String COMPONENT_APP_ROOT = "componentAppRoot";
-
-    /**
-     * Returns an instance of the named component
-     *
-     * @param roleName Name of the role the component fills.
-     * @return an instance of the named component
-     * @throws ComponentException generic exception
-     */
-    Component lookup(String roleName)
-            throws ComponentException;
-
-    /**
-     * Releases the component
-     *
-     * @param component the component to release
-     */
-    void release(Component component);
-
-}
diff --git a/src/java/org/apache/turbine/services/avaloncomponent/MerlinComponentService.java b/src/java/org/apache/turbine/services/avaloncomponent/MerlinComponentService.java
deleted file mode 100644
index 64a658a..0000000
--- a/src/java/org/apache/turbine/services/avaloncomponent/MerlinComponentService.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-/**
- * This service allows access to avalon components running in a Merlin
- * container.  This is not ready for Prime Time yet.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface MerlinComponentService
-        extends Service
-{
-    /** The publically visible name of the service */
-    String SERVICE_NAME = "MerlinComponentService";
-
-    /** property specifing file name of the component block files path */
-    String BLOCK_CONFIG_KEY = "block.path";
-
-    /** property specifing file name of the default path for block files */
-    String BLOCK_CONFIG_PATH = "/WEB-INF/conf/merlin";
-
-	/** property specifing key for finding the kernal file */
-	String KERNAL_CONFIG_KEY = "kernel";
-
-	/** property specifing default file name for kernal */
-	String KERNAL_CONFIG_PATH = "/WEB-INF/conf/merlin/kernel.xml";
-	
-
-    /** property for the Components to look up */
-    String COMPONENT_LOOKUP_KEY = "lookup";
-
-    /** Key used in the context for defining the application root */
-    String COMPONENT_APP_ROOT = "componentAppRoot";
-
-    /**
-     * Returns an instance of the named component
-     *
-     * @param roleName Name of the role the component fills.
-     * @return an instance of the named component
-     * @throws Exception generic exception
-     */
-    public Object lookup(String path) throws Exception;
-
-    /**
-     * Releases the component
-     *
-     * @param source. The path to the handler for this component
-     * For example, if the component is a java.sql.Connection
-     * object sourced from the "/turbine-merlin/datasource" 
-     * component, the call would be :-
-     * release("/turbine-merlin/datasource", conn);
-     * @param component the component to release
-     */
-    public void release(Object component);
-
-}
diff --git a/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java b/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java
deleted file mode 100644
index 581e8e0..0000000
--- a/src/java/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentService.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.avalon.excalibur.component.DefaultRoleManager;
-import org.apache.avalon.excalibur.component.ExcaliburComponentManager;
-import org.apache.avalon.excalibur.logger.Log4JLoggerManager;
-import org.apache.avalon.excalibur.logger.LoggerManager;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
-import org.apache.avalon.framework.component.Component;
-import org.apache.avalon.framework.component.ComponentException;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
-import org.apache.avalon.framework.context.DefaultContext;
-import org.apache.avalon.framework.logger.Logger;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * An implementation of AvalonComponentService which loads all the
- * components given in the TurbineResources.properties File.
- * <p>
- * For component which require the location of the application or
- * context root, there are two ways to get it.
- * <ol>
- * <li>
- *   Implement the Contextualizable interface.  The full path to the
- *   correct OS directory can be found under the ComponentAppRoot key.
- * </li>
- * <li>
- *   The system property "applicationRoot" is also set to the full path
- *   of the correct OS directory.
- * </li>
- * </ol>
- * If you want to initialize Torque by using the AvalonComponentService, you
- * must activate Torque at initialization time by specifying
- *
- * services.AvalonComponentService.lookup = org.apache.torque.Torque 
- *
- * in your TurbineResources.properties.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineAvalonComponentService
-        extends TurbineBaseService
-        implements AvalonComponentService, Initializable, Disposable
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(
-            TurbineAvalonComponentService.class);
-
-    /** Component manager */
-    private ExcaliburComponentManager manager = null;
-
-    // -------------------------------------------------------------
-    // Service initialization
-    // -------------------------------------------------------------
-
-    /**
-     * Load all configured components and initialize them. This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        try
-        {
-            initialize();
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException("init failed", e);
-        }
-    }
-
-    /**
-     * Shuts the Component Service down, calls dispose on the components that
-     * implement this interface
-     *
-     */
-    public void shutdown()
-    {
-        dispose();
-        setInit(false);
-    }
-
-    // -------------------------------------------------------------
-    // Avalon lifecycle interfaces
-    // -------------------------------------------------------------
-
-    /**
-     * Initializes the container
-     *
-     * @throws Exception generic exception
-     */
-    public void initialize() throws Exception
-    {
-        org.apache.commons.configuration.Configuration conf 
-                = getConfiguration();
-
-        // get the filenames and expand them relative to webapp root
-        String sysConfigFilename = Turbine.getRealPath(
-                conf.getString(COMPONENT_CONFIG_KEY, COMPONENT_CONFIG_VALUE));
-        String roleConfigFilename = Turbine.getRealPath(
-                conf.getString(COMPONENT_ROLE_KEY, COMPONENT_ROLE_VALUE));
-
-        log.debug("Config File: " + sysConfigFilename);
-        log.debug("Role File:   " + roleConfigFilename);
-
-        // process configuration files
-
-        DefaultConfigurationBuilder builder = new DefaultConfigurationBuilder();
-        Configuration sysConfig  = builder.buildFromFile(sysConfigFilename);
-        Configuration roleConfig = builder.buildFromFile(roleConfigFilename);
-
-        // Create the LoggerManager for Log4J
-        LoggerManager lm = new Log4JLoggerManager();
-
-        // Setup the RoleManager
-        DefaultRoleManager roles = new DefaultRoleManager();
-
-        Logger logger = lm.getLoggerForCategory(AVALON_LOG_CATEGORY);
-
-        roles.enableLogging(logger);
-        roles.configure(roleConfig);
-
-        // Setup ECM
-        manager = new ExcaliburComponentManager();
-
-        manager.setLoggerManager(lm);
-        manager.enableLogging(logger);
-
-        DefaultContext context = new DefaultContext();
-        String realPath = Turbine.getRealPath("/");
-
-        context.put(AvalonComponentService.COMPONENT_APP_ROOT, realPath);
-        // urn:avalon:home is used by Merlinized components.  Makes things
-        // a bit more backwards compatible.
-        context.put("urn:avalon:home", realPath);
-        System.setProperty("applicationRoot", realPath);
-        System.setProperty("urn:avalon:home", realPath);
-
-        log.debug("Application Root is " + realPath);
-
-        manager.contextualize(context);
-        manager.setRoleManager(roles);
-        manager.configure(sysConfig);
-
-        // Init ECM!!!!
-        manager.initialize();
-
-        List lookupComponents = conf.getList(COMPONENT_LOOKUP_KEY,
-                new ArrayList());
-        
-        for (Iterator it = lookupComponents.iterator(); it.hasNext();)
-        {
-            String component = (String) it.next();
-            try
-            {
-                Component c = manager.lookup(component);
-                log.info("Lookup for Component " + component + " successful");
-                manager.release(c);
-            }
-            catch (Exception e)
-            {
-                log.error("Lookup for Component " + component + " failed!");
-            }
-        }
-    }
-
-    /**
-     * Disposes of the container and releases resources
-     */
-    public void dispose()
-    {
-        manager.dispose();
-    }
-
-    /**
-     * Returns an instance of the named component
-     *
-     * @param roleName Name of the role the component fills.
-     * @return an instance of the named component
-     * @throws ComponentException generic exception
-     */
-    public Component lookup(String roleName)
-            throws ComponentException
-    {
-        return manager.lookup(roleName);
-    }
-
-    /**
-     * Releases the component
-     *
-     * @param component the component to release
-     */
-    public void release(Component component)
-    {
-        manager.release(component);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/avaloncomponent/TurbineMerlinComponentService.java b/src/java/org/apache/turbine/services/avaloncomponent/TurbineMerlinComponentService.java
deleted file mode 100644
index dfa3b30..0000000
--- a/src/java/org/apache/turbine/services/avaloncomponent/TurbineMerlinComponentService.java
+++ /dev/null
@@ -1,232 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.net.URL;
-
-import org.apache.avalon.activation.appliance.Block;
-import org.apache.avalon.composition.util.ExceptionHelper;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
-import org.apache.avalon.merlin.kernel.impl.DefaultKernel;
-import org.apache.avalon.merlin.kernel.impl.DefaultKernelContext;
-import org.apache.avalon.repository.impl.DefaultFileRepository;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * An implementation of AvalonComponentService based on the Avalon 
- * Merlin 3.2 container.  Not ready for Prime Time yet.
- * 
- * @author <a mailto="peter@courcoux.biz">Peter Courcoux</a>
- * @author <a mailto="epugh@upstate.com">Eric Pugh</a>
- */
-public class TurbineMerlinComponentService
-    extends TurbineBaseService
-    implements MerlinComponentService, Initializable, Disposable
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineMerlinComponentService.class);
-
-    /** Merlin kernel */
-    private DefaultKernel m_kernel = null;
-
-    // -------------------------------------------------------------
-    // Service initialization
-    // -------------------------------------------------------------
-
-    /**
-	 * Load all configured components and initialize them. This is a zero parameter variant which
-	 * queries the Turbine Servlet for its config.
-	 * 
-	 * @throws InitializationException Something went wrong in the init stage
-	 */
-    public void init() throws InitializationException
-    {
-        try
-        {
-            initialize();
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            log.error("Exception caught initialising service: ", e);
-            throw new InitializationException("init failed", e);
-        }
-    }
-
-    /**
-	 * Shuts the Component Service down, calls dispose on the components that implement this
-	 * interface
-	 *  
-	 */
-    public void shutdown()
-    {
-        dispose();
-        setInit(false);
-    }
-
-    // -------------------------------------------------------------
-    // Avalon lifecycle interfaces
-    // -------------------------------------------------------------
-
-    /**
-	 * Initializes the container
-	 * 
-	 * @throws Exception generic exception
-	 */
-    public void initialize() throws Exception
-    {
-		org.apache.commons.configuration.Configuration conf 
-					   = getConfiguration();
-		
-        String homePath = Turbine.getApplicationRoot();
-        File home = new File(homePath);
-        // Eric. The next thing to do is to decide how to create the blocks array.
-        // Steve suggested listing all the block URL's in WEB.xml as initialisation params.
-        // I think it needs to come from some local config. while we are keeping everything
-        // in the webapp context.
-        
-		String blockPath = Turbine.getRealPath(
-						conf.getString(BLOCK_CONFIG_KEY, BLOCK_CONFIG_PATH));
-		File kernal = new File(Turbine.getRealPath(
-								conf.getString(KERNAL_CONFIG_KEY, KERNAL_CONFIG_PATH)));
-		//File userDir = new File(Turbine.getRealPath("target/test-classes"));
-		if(!kernal.exists()){
-		    throw new Exception("Kernal file " + kernal + " doesn't exist.  You must provide a " +
-		    		"valid kernal file.");
-		}
-		
-        URL block = new File(blockPath).toURL();
-        URL[] blocks = new URL[1];
-        blocks[0] = block;
-        // Create the kernel context
-        try
-        {
-                DefaultKernelContext context =
-                    new DefaultKernelContext(
-                        new DefaultFileRepository(new File(Turbine.getRealPath("merlin/dud"))),
-            // system repo
-        null, //new File( Turbine.getRealPath("merlin/repository")), // user repo directory
-        null, //new File( Turbine.getRealPath("merlin/ext")), // ext directory
-        home, // home
-        kernal.toURL(), // kernel config
-        blocks, // block urls
-        null, // config override
-        true, // server
-        true, // info
-        true // debug
-    );
-            m_kernel = new DefaultKernel(context);
-            m_kernel.startup();
-            log.info("kernel established");
-
-            log.info("Application Root is " + homePath);
-        }
-        catch (Exception e)
-        {
-            final String message = "Turbine/Merlin problem.";
-            final String error = ExceptionHelper.packException(message, e, true);
-            log.info(error);
-            System.out.println(error);
-        }
-
-    }
-
-    /**
-	 * Disposes of the container and releases resources
-	 */
-    public void dispose()
-    {
-        if (m_kernel != null)
-        {
-            m_kernel.shutdown();
-            m_kernel = null;
-        }
-    }
-
-    /**
-	 * Returns an instance of the named component
-	 * 
-	 * @param roleName Name of the role the component fills.
-	 * @return an instance of the named component
-	 * @throws Exception generic exception
-	 */
-    public Object lookup(String path) throws Exception
-    {
-        Block root = m_kernel.getRootBlock();
-        return root.locate(path).resolve();
-    }
-
-    /**
-	 * Releases the component
-	 * 
-	 * @param source. The path to the handler for this component For example, if the object is a
-	 *            java.sql.Connection object sourced from the "/turbine-merlin/datasource"
-	 *            component, the call would be :- release("/turbine-merlin/datasource", conn);
-	 * @param component the component to release
-	 */
-    public void release(Object component)
-    {
-        Block root = m_kernel.getRootBlock();
-        root.release(component);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/avaloncomponent/package.html b/src/java/org/apache/turbine/services/avaloncomponent/package.html
deleted file mode 100644
index cc95c09..0000000
--- a/src/java/org/apache/turbine/services/avaloncomponent/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Avalon based component service to provide access to avalon components for Turbine applications.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/cache/CachedObject.java b/src/java/org/apache/turbine/services/cache/CachedObject.java
deleted file mode 100644
index 2028625..0000000
--- a/src/java/org/apache/turbine/services/cache/CachedObject.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import org.apache.turbine.Turbine;
-
-/**
- * Wrapper for an object you want to store in a cache for a period of
- * time.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class CachedObject
-        implements Serializable
-{
-
-    /** Cache the object with the Default TTL */
-    public static final int DEFAULT = 0;
-
-    /** Do not expire the object */
-    public static final int FOREVER = -1;
-
-    /** The object to be cached. */
-    private Object contents = null;
-
-    /** Default age (30 minutes). */
-    private long defaultage =
-            Turbine.getConfiguration()
-            .getLong("cachedobject.defaultage", 1800000);
-
-    /** When created. **/
-    protected long created = 0;
-
-    /** When it expires. **/
-    private long expires = 0;
-
-    /** Is this object stale/expired? */
-    private boolean stale = false;
-
-    /**
-     * Constructor; sets the object to expire in the default time (30
-     * minutes).
-     *
-     * @param o The object you want to cache.
-     */
-    public CachedObject(Object o)
-    {
-        this.contents = o;
-        this.expires = defaultage;
-        this.created = System.currentTimeMillis();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param o The object to cache.
-     * @param expires How long before the object expires, in ms,
-     * e.g. 1000 = 1 second.
-     */
-    public CachedObject(Object o, long expires)
-    {
-        if (expires == DEFAULT)
-        {
-            this.expires = defaultage;
-        }
-
-        this.contents = o;
-        this.expires = expires;
-        this.created = System.currentTimeMillis();
-    }
-
-    /**
-     * Returns the cached object.
-     *
-     * @return The cached object.
-     */
-    public Object getContents()
-    {
-        return contents;
-    }
-
-    /**
-     * Returns the creation time for the object.
-     *
-     * @return When the object was created.
-     */
-    public long getCreated()
-    {
-        return created;
-    }
-
-    /**
-     * Returns the expiration time for the object.
-     *
-     * @return When the object expires.
-     */
-    public long getExpires()
-    {
-        return expires;
-    }
-
-    /**
-     * Set the expiration interval for the object.
-     *
-     * @param expires Expiration interval in millis ( 1 second = 1000 millis)
-     */
-    public void setExpires(long expires)
-    {
-        if (expires == DEFAULT)
-        {
-            this.expires = defaultage;
-        }
-        else
-        {
-            this.expires = expires;
-        }
-        if (expires == FOREVER)
-        {
-            setStale(false);
-        }
-        else
-        {
-            setStale((System.currentTimeMillis() - created) > expires);
-        }
-    }
-
-    /**
-     * Set the stale status for the object.
-     *
-     * @param stale Whether the object is stale or not.
-     */
-    public synchronized void setStale(boolean stale)
-    {
-        this.stale = stale;
-    }
-
-    /**
-     * Get the stale status for the object.
-     *
-     * @return Whether the object is stale or not.
-     */
-    public synchronized boolean getStale()
-    {
-        return stale;
-    }
-
-    /**
-     * Is the object stale?
-     *
-     * @return True if the object is stale.
-     */
-    public synchronized boolean isStale()
-    {
-        if (expires == FOREVER)
-        {
-            return false;
-        }
-
-        setStale((System.currentTimeMillis() - created) > expires);
-        return getStale();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/cache/GlobalCacheService.java b/src/java/org/apache/turbine/services/cache/GlobalCacheService.java
deleted file mode 100644
index 2f81136..0000000
--- a/src/java/org/apache/turbine/services/cache/GlobalCacheService.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.services.Service;
-
-/**
- * GlobalCacheService interface.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public interface GlobalCacheService
-        extends Service
-{
-    String SERVICE_NAME = "GlobalCacheService";
-
-    /**
-     * Gets a cached object given its id (a String).
-     *
-     * @param id The String id for the object.
-     * @return A CachedObject.
-     * @exception ObjectExpiredException, if the object has expired in
-     * the cache.
-     */
-    CachedObject getObject(String id)
-            throws ObjectExpiredException;
-
-    /**
-     * Adds an object to the cache.
-     *
-     * @param id The String id for the object.
-     * @param o The object to add to the cache.
-     */
-    void addObject(String id, CachedObject o);
-
-    /**
-     * Removes an object from the cache.
-     *
-     * @param id The String id for the object.
-     */
-    void removeObject(String id);
-
-    /**
-     * Returns the current size of the cache.
-     * @return int representing current cache size in number of bytes
-     */
-    int getCacheSize()
-            throws IOException;
-
-    /**
-     * Returns the number of objects in the cache.
-     * @return int The current number of objects in the cache.
-     */
-    int getNumberOfObjects();
-
-    /**
-     * Flush the cache of all objects.
-     */
-    void flushCache();
-}
diff --git a/src/java/org/apache/turbine/services/cache/ObjectExpiredException.java b/src/java/org/apache/turbine/services/cache/ObjectExpiredException.java
deleted file mode 100644
index 021123b..0000000
--- a/src/java/org/apache/turbine/services/cache/ObjectExpiredException.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Exception thrown when an item either does not exist or has expired
- * from the GlobalCache.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public class ObjectExpiredException
-        extends Exception
-{
-}
diff --git a/src/java/org/apache/turbine/services/cache/Refreshable.java b/src/java/org/apache/turbine/services/cache/Refreshable.java
deleted file mode 100644
index 14e0e4c..0000000
--- a/src/java/org/apache/turbine/services/cache/Refreshable.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This is the interface for objects you want to refresh themselves
- * from the cache.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:nissim@nksystems.com">Nissim Karpenstein</a>
- * @version $Id$
- */
-public interface Refreshable
-{
-    /**
-     * Refreshes the object.
-     */
-    void refresh();
-}
diff --git a/src/java/org/apache/turbine/services/cache/RefreshableCachedObject.java b/src/java/org/apache/turbine/services/cache/RefreshableCachedObject.java
deleted file mode 100644
index a2c0409..0000000
--- a/src/java/org/apache/turbine/services/cache/RefreshableCachedObject.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * The idea of the RefreshableCachedObject is that, rather than
- * removing items from the cache when they become stale, we'll tell them to
- * refresh themselves instead.  That way they'll always be in the
- * cache, and the code to refresh them will be run by the background
- * thread rather than by a user request thread.  You can also set a TTL (Time
- * To Live) for the object.  This way, if the object hasn't been touched
- * for the TTL period, then it will be removed from the cache.
- *
- * This extends CachedObject and provides a method for refreshing the
- * cached object, and resetting its expire time.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:nissim@nksystems.com">Nissim Karpenstein</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class RefreshableCachedObject
-        extends CachedObject
-{
-
-    /**
-     * How long to wait before removing an untouched object from the cache.
-     * Negative numbers mean never remove (the default).
-     */
-    private long timeToLive = -1;
-
-    /**
-     * The last time the Object was accessed from the cache.
-     */
-    private long lastAccess;
-
-    /**
-     * Constructor; sets the object to expire in the default time (30
-     * minutes).
-     *
-     * @param o The object you want to cache.
-     */
-    public RefreshableCachedObject(Refreshable o)
-    {
-        super(o);
-        lastAccess = System.currentTimeMillis();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param o The object to cache.
-     * @param expires How long before the object expires, in ms,
-     * e.g. 1000 = 1 second.
-     */
-    public RefreshableCachedObject(Refreshable o,
-                                   long expires)
-    {
-        super(o, expires);
-        lastAccess = System.currentTimeMillis();
-    }
-
-    /**
-     * Sets the timeToLive value
-     *
-     * @param timeToLive the new Value in milliseconds
-     */
-    public synchronized void setTTL(long timeToLive)
-    {
-        this.timeToLive = timeToLive;
-    }
-
-    /**
-     * Gets the timeToLive value.
-     *
-     * @return The current timeToLive value (in milliseconds)
-     */
-    public synchronized long getTTL()
-    {
-        return timeToLive;
-    }
-
-    /**
-     * Sets the last acccess time to the current time.
-     */
-    public synchronized void touch()
-    {
-        lastAccess = System.currentTimeMillis();
-    }
-
-    /**
-     * Returns true if the object hasn't been touched
-     * in the previous TTL period.
-     */
-    public synchronized boolean isUntouched()
-    {
-        if (timeToLive < 0)
-            return false;
-
-        if (lastAccess + timeToLive < System.currentTimeMillis())
-            return true;
-        else
-            return false;
-    }
-
-    /**
-     * Refresh the object and the created time.
-     */
-    public void refresh()
-    {
-        Refreshable r = (Refreshable) getContents();
-        synchronized (this)
-        {
-            created = System.currentTimeMillis();
-            r.refresh();
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/cache/TurbineGlobalCache.java b/src/java/org/apache/turbine/services/cache/TurbineGlobalCache.java
deleted file mode 100644
index a3a0d1e..0000000
--- a/src/java/org/apache/turbine/services/cache/TurbineGlobalCache.java
+++ /dev/null
@@ -1,140 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * This is a Facade class for GlobalCacheService.
- *
- * This class provides static methods that call related methods of the
- * implementation of the GlobalCacheService used by the System, according to
- * the settings in TurbineResources.
- *
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @version $Id$
- */
-public abstract class TurbineGlobalCache
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a GlobalCacheService implementation instance
-     */
-    protected static GlobalCacheService getService()
-    {
-        return (GlobalCacheService) TurbineServices
-                .getInstance().getService(GlobalCacheService.SERVICE_NAME);
-    }
-
-    /**
-     * Gets a cached object given its id (a String).
-     *
-     * @param id The String id for the object.
-     * @return A CachedObject.
-     * @exception ObjectExpiredException, if the object has expired in
-     * the cache.
-     */
-    public static CachedObject getObject(String id)
-            throws ObjectExpiredException
-    {
-        return getService().getObject(id);
-    }
-
-    /**
-     * Adds an object to the cache.
-     *
-     * @param id The String id for the object.
-     * @param o The object to add to the cache.
-     */
-    public static void addObject(String id,
-                                 CachedObject o)
-    {
-        getService().addObject(id, o);
-    }
-
-    /**
-     * Removes an object from the cache.
-     *
-     * @param id The String id for the object.
-     */
-    public static void removeObject(String id)
-    {
-        getService().removeObject(id);
-    }
-
-    /**
-     * Returns the current size of the cache.
-     * @return int representing current cache size in number of bytes
-     */
-    public static int getCacheSize()
-            throws IOException
-    {
-        return getService().getCacheSize();
-    }
-
-    /**
-     * Returns the number of objects in the cache.
-     * @return int The current number of objects in the cache.
-     */
-    public static int getNumberOfObjects()
-    {
-        return getService().getNumberOfObjects();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/cache/TurbineGlobalCacheService.java b/src/java/org/apache/turbine/services/cache/TurbineGlobalCacheService.java
deleted file mode 100644
index a7495e0..0000000
--- a/src/java/org/apache/turbine/services/cache/TurbineGlobalCacheService.java
+++ /dev/null
@@ -1,386 +0,0 @@
-package org.apache.turbine.services.cache;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * This Service functions as a Global Cache.  A global cache is a good
- * place to store items that you may need to access often but don't
- * necessarily need (or want) to fetch from the database everytime.  A
- * good example would be a look up table of States that you store in a
- * database and use throughout your application.  Since information
- * about States doesn't change very often, you could store this
- * information in the Global Cache and decrease the overhead of
- * hitting the database everytime you need State information.
- *
- * The following properties are needed to configure this service:<br>
- *
- * <code><pre>
- * services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
- * services.GlobalCacheService.cache.initial.size=20
- * services.GlobalCacheService.cache.check.frequency=5000
- * </pre></code>
- *
- * <dl>
- * <dt>classname</dt><dd>the classname of this service</dd>
- * <dt>cache.initial.size</dt><dd>Initial size of hash table use to store cached
- objects.  If this property is not present, the default value is 20</dd>
- * <dt>cache.check.frequency</dt><dd>Cache check frequency in Millis (1000
- Millis = 1 second).  If this property is not present, the default value is 5000</dd>
- * </dl>
- * 
- * @deprecated Use the Fulcrum Cache component instead.
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:john@zenplex.com">John Thorhauer</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineGlobalCacheService
-        extends TurbineBaseService
-        implements GlobalCacheService,
-        Runnable
-{
-    /**
-     * Initial size of hash table
-     * Value must be > 0.
-     * Default = 20
-     */
-    public static final int DEFAULT_INITIAL_CACHE_SIZE = 20;
-
-    /**
-     * The property for the InitalCacheSize
-     */
-    public static final String INITIAL_CACHE_SIZE = "cache.initial.size";
-
-    /**
-     * The property for the Cache check frequency
-     */
-    public static final String CACHE_CHECK_FREQUENCY = "cache.check.frequency";
-
-    /**
-     * Cache check frequency in Millis (1000 Millis = 1 second).
-     * Value must be > 0.
-     * Default = 5 seconds
-     */
-    public static final long DEFAULT_CACHE_CHECK_FREQUENCY = 5000; // 5 seconds
-
-    /** The cache. **/
-    private Hashtable cache = null;
-
-    /** cacheCheckFrequency (default - 5 seconds) */
-    private long cacheCheckFrequency = DEFAULT_CACHE_CHECK_FREQUENCY;
-
-    /**
-     * Constructor.
-     */
-    public TurbineGlobalCacheService()
-    {
-    }
-
-    /**
-     * Called the first time the Service is used.
-     */
-    public void init()
-            throws InitializationException
-    {
-        int cacheInitialSize = DEFAULT_INITIAL_CACHE_SIZE;
-        Configuration conf = getConfiguration();
-        if (conf != null)
-        {
-            try
-            {
-                cacheInitialSize = conf.getInt(INITIAL_CACHE_SIZE, DEFAULT_INITIAL_CACHE_SIZE);
-                if (cacheInitialSize <= 0)
-                {
-                    throw new IllegalArgumentException(INITIAL_CACHE_SIZE + " must be >0");
-                }
-                cacheCheckFrequency = conf.getLong(CACHE_CHECK_FREQUENCY, DEFAULT_CACHE_CHECK_FREQUENCY);
-                if (cacheCheckFrequency <= 0)
-                {
-                    throw new IllegalArgumentException(CACHE_CHECK_FREQUENCY + " must be >0");
-                }
-            }
-            catch (Exception x)
-            {
-                throw new InitializationException(
-                        "Failed to initialize TurbineGlobalCacheService", x);
-            }
-        }
-
-        try
-        {
-            cache = new Hashtable(cacheInitialSize);
-
-            // Start housekeeping thread.
-            Thread housekeeping = new Thread(this);
-            // Indicate that this is a system thread. JVM will quit only when there
-            // are no more active user threads. Settings threads spawned internally
-            // by Turbine as daemons allows commandline applications using Turbine
-            // to terminate in an orderly manner.
-            housekeeping.setDaemon(true);
-            housekeeping.start();
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                    "TurbineGlobalCacheService failed to initialize", e);
-        }
-    }
-
-    /**
-     * Returns an item from the cache.  RefreshableCachedObject will be
-     * refreshed if it is expired and not untouched.
-     *
-     * @param id The key of the stored object.
-     * @return The object from the cache.
-     * @exception ObjectExpiredException when either the object is
-     * not in the cache or it has expired.
-     */
-    public CachedObject getObject(String id)
-            throws ObjectExpiredException
-    {
-        CachedObject obj = null;
-        
-        obj = (CachedObject) cache.get(id);
-
-        if (obj == null)
-        {
-            // Not in the cache.
-            throw new ObjectExpiredException();
-        }
-
-        if (obj.isStale())
-        {
-            if (obj instanceof RefreshableCachedObject)
-            {
-                RefreshableCachedObject rco = (RefreshableCachedObject) obj;
-                if (rco.isUntouched())
-                // Do not refresh an object that has exceeded TimeToLive
-                    throw new ObjectExpiredException();
-                // Refresh Object
-                rco.refresh();
-                if (rco.isStale())
-                // Object is Expired.
-                    throw new ObjectExpiredException();
-            }
-            else
-            {
-                // Expired.
-                throw new ObjectExpiredException();
-            }
-        }
-
-        if (obj instanceof RefreshableCachedObject)
-        {
-            // notify it that it's being accessed.
-            RefreshableCachedObject rco = (RefreshableCachedObject) obj;
-            rco.touch();
-        }
-
-        return obj;
-    }
-
-    /**
-     * Adds an object to the cache.
-     *
-     * @param id The key to store the object by.
-     * @param o The object to cache.
-     */
-    public void addObject(String id,
-                          CachedObject o)
-    {
-        // If the cache already contains the key, remove it and add
-        // the fresh one.
-        if (cache.containsKey(id))
-        {
-            cache.remove(id);
-        }
-        cache.put(id, o);
-    }
-
-    /**
-     * Removes an object from the cache.
-     *
-     * @param id The String id for the object.
-     */
-    public void removeObject(String id)
-    {
-        cache.remove(id);
-    }
-
-    /**
-     * Circle through the cache and remove stale objects.  Frequency
-     * is determined by the cacheCheckFrequency property.
-     */
-    public void run()
-    {
-        while (true)
-        {
-            // Sleep for amount of time set in cacheCheckFrequency -
-            // default = 5 seconds.
-            try
-            {
-                Thread.sleep(cacheCheckFrequency);
-            }
-            catch (InterruptedException exc)
-            {
-            }
-
-            clearCache();
-        }
-    }
-
-    /**
-     * Iterate through the cache and remove or refresh stale objects.
-     */
-    public void clearCache()
-    {
-        Vector refreshThese = new Vector(20);
-        // Sync on this object so that other threads do not
-        // change the Hashtable while enumerating over it.
-        synchronized (this)
-        {
-            for (Enumeration e = cache.keys(); e.hasMoreElements();)
-            {
-                String key = (String) e.nextElement();
-                CachedObject co = (CachedObject) cache.get(key);
-                if (co instanceof RefreshableCachedObject)
-                {
-                    RefreshableCachedObject rco = (RefreshableCachedObject) co;
-                    if (rco.isUntouched())
-                        cache.remove(key);
-                    else if (rco.isStale())
-                    // Do refreshing outside of sync block so as not
-                    // to prolong holding the lock on this object
-                        refreshThese.addElement(key);
-                }
-                else if (co.isStale())
-                {
-                    cache.remove(key);
-                }
-            }
-        }
-
-        for (Enumeration e = refreshThese.elements(); e.hasMoreElements();)
-        {
-            String key = (String) e.nextElement();
-            CachedObject co = (CachedObject) cache.get(key);
-            RefreshableCachedObject rco = (RefreshableCachedObject) co;
-            rco.refresh();
-        }
-    }
-
-    /**
-     * Returns the number of objects currently stored in the cache
-     *
-     * @return int number of object in the cache
-     */
-    public int getNumberOfObjects()
-    {
-        return cache.size();
-    }
-
-    /**
-     * Returns the current size of the cache.
-     *
-     * @return int representing current cache size in number of bytes
-     */
-    public int getCacheSize()
-            throws IOException
-    {
-        ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        ObjectOutputStream out = new ObjectOutputStream(baos);
-        out.writeObject(cache);
-        out.flush();
-        //
-        // Subtract 4 bytes from the length, because the serialization
-        // magic number (2 bytes) and version number (2 bytes) are
-        // both written to the stream before the object
-        //
-        int objectsize = baos.toByteArray().length - 4;
-        return objectsize;
-    }
-
-    /**
-     * Flush the cache of all objects.
-     */
-    public void flushCache()
-    {
-
-        synchronized (this)
-        {
-            for (Enumeration e = cache.keys(); e.hasMoreElements();)
-            {
-                String key = (String) e.nextElement();     
-                cache.remove(key);
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/cache/package.html b/src/java/org/apache/turbine/services/cache/package.html
deleted file mode 100644
index 721f161..0000000
--- a/src/java/org/apache/turbine/services/cache/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Global caching service for java objects.
-<br/>
-This service has been deprecated in favor of the Fulcrum Cache component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-cache">Fulcrum Cache</a>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/component/ComponentService.java b/src/java/org/apache/turbine/services/component/ComponentService.java
deleted file mode 100644
index 29f63be..0000000
--- a/src/java/org/apache/turbine/services/component/ComponentService.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.turbine.services.component;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-/**
- * This service loads components that can be loaded by the Stratum
- * component loader, e.g. the decoupled Torque.
- * 
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated torque is now loaded using the AvalonComponentService
- */
-public interface ComponentService
-        extends Service
-{
-    /** The publically visible name of the service */
-    String SERVICE_NAME = "ComponentService";
-
-}
diff --git a/src/java/org/apache/turbine/services/component/TurbineComponentService.java b/src/java/org/apache/turbine/services/component/TurbineComponentService.java
deleted file mode 100644
index 5f6c63e..0000000
--- a/src/java/org/apache/turbine/services/component/TurbineComponentService.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.apache.turbine.services.component;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratum.component.ComponentLoader;
-import org.apache.stratum.lifecycle.Disposable;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * An implementation of ComponentService which loads all the
- * components given in the TurbineResources.properties File
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated torque is now loaded using the AvalonComponentService
- */
-public class TurbineComponentService
-        extends TurbineBaseService
-        implements ComponentService
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineComponentService.class);
-
-    /** Extension used for Configuration files. */
-    private static String CONFIG = "config";
-
-    /** Name tag used in Configurations */
-    private static String NAME = "name";
-
-    /** Prefix used by the Component Loader */
-    private static String COMPONENT = "component";
-
-    /** List of Components that was initialized */
-    private Object[] components = null;
-
-    /**
-     * Load all configured components and initialize them. This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        ServletConfig config = Turbine.getTurbineServletConfig();
-        Configuration loaderConf = new BaseConfiguration();
-
-        String[] names = getConfiguration().getStringArray(NAME);
-        
-        log.warn("The ComponentService is deprecated!");
-
-        for (int i = 0; i < names.length; i++)
-        {
-            String key = names[i];
-
-            loaderConf.addProperty(COMPONENT + "." + NAME, key);
-
-            String subProperty = COMPONENT + "." + key;
-            Configuration subConf = getConfiguration().subset(key);
-
-            for (Iterator it = subConf.getKeys(); it.hasNext();)
-            {
-                String subKey = (String) it.next();
-                Object subVal = subConf.getProperty(subKey);
-
-                if (subKey.equals(CONFIG))
-                {
-                    log.debug("Fixing up " + subVal);
-                    String newPath =
-                            config.getServletContext().getRealPath((String) subVal);
-
-                    if (newPath == null)
-                    {
-                      throw new InitializationException("Could not translate path " + subVal);
-                    }
-
-                    subVal = newPath;
-                    log.debug("Now: " + subVal);
-                }
-
-                loaderConf.addProperty(subProperty + "." + subKey,
-                        subVal);
-            }
-
-            log.info("Added " + key + " as a component");
-        }
-
-        try
-        {
-            ComponentLoader cl = new ComponentLoader(loaderConf);
-            components = cl.load();
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            log.error("Component Service failed: ", e);
-            throw new InitializationException("ComponentService failed: ", e);
-        }
-    }
-
-    /**
-     * Inits the service using servlet parameters to obtain path to the
-     * configuration file. Change relatives paths.
-     *
-     * @param config The ServletConfiguration from Turbine
-     *
-     * @throws InitializationException Something went wrong when starting up.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config)
-            throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Shuts the Component Service down, calls dispose on the components that
-     * implement this interface
-     *
-     */
-
-    public void shutdown()
-    {
-        if (components != null)
-        {
-            for (int i = 0; i < components.length; i++)
-            {
-                if (components[i] instanceof Disposable)
-                {
-                    log.debug("Disposing a " + components[i].getClass().getName() + " object");
-                    ((Disposable) components[i]).dispose();
-                }
-                else
-                {
-                    log.debug("Not disposing " + components[i].getClass().getName() + ", not a Disposable Object");
-                }
-            }
-        }
-        setInit(false);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/CryptoAlgorithm.java b/src/java/org/apache/turbine/services/crypto/CryptoAlgorithm.java
deleted file mode 100644
index 4b66ed1..0000000
--- a/src/java/org/apache/turbine/services/crypto/CryptoAlgorithm.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface describes the various Crypto Algorithms that are
- * handed out by the Crypto Service.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface CryptoAlgorithm
-{
-    /**
-     * Allows the user to set a salt value whenever the
-     * algorithm is used. Setting a new salt should invalidate
-     * all internal state of this object.
-     * <p>
-     * Algorithms that do not use a salt are allowed to ignore
-     * this parameter.
-     * <p>
-     * Algorithms must be able to deal with the null value as salt.
-     * They should treat it as "use a random salt".
-     *
-     * @param salt      The salt value
-     *
-     */
-
-    void setSeed(String salt);
-
-    /**
-     * Performs the actual encryption.
-     *
-     * @param value       The value to be encrypted
-     *
-     * @return The encrypted value
-     *
-     * @throws Exception various errors from the underlying ciphers.
-     *                   The caller should catch them and report accordingly.
-     *
-     */
-
-    String encrypt(String value)
-            throws Exception;
-
-    /**
-     * Algorithms that perform multiple ciphers get told
-     * with setCipher, which cipher to use. This should be
-     * called before any other method call.
-     *
-     * If called after any call to encrypt or setSeed, the
-     * CryptoAlgorithm may choose to ignore this or to reset
-     * and use the new cipher.
-     *
-     * If any other call is used before this, the algorithm
-     * should use a default cipher and not throw an error.
-     *
-     * @param cipher    The cipher to use.
-     *
-     */
-
-    void setCipher(String cipher);
-
-}
diff --git a/src/java/org/apache/turbine/services/crypto/CryptoService.java b/src/java/org/apache/turbine/services/crypto/CryptoService.java
deleted file mode 100644
index 5d5008d..0000000
--- a/src/java/org/apache/turbine/services/crypto/CryptoService.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.security.NoSuchAlgorithmException;
-
-import org.apache.turbine.services.Service;
-
-/**
- * The Crypto Service manages the availability of various crypto
- * sources. It provides a consistent interface to things like the
- * various java.security Message Digest stuff or the Unix Crypt
- * algorithm.
- *
- * It contains no actual crypto code so it should be fine to import/export
- * everywhere.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public interface CryptoService
-        extends Service
-{
-    /** The name of the service */
-    String SERVICE_NAME = "CryptoService";
-
-    /**
-     * Returns a CryptoAlgorithm Object which represents the requested
-     * crypto algorithm.
-     *
-     * @param algorithm      Name of the requested algorithm
-     *
-     * @return An Object representing the algorithm
-     *
-     * @throws NoSuchAlgorithmException  Requested algorithm is not available
-     *
-     */
-
-    CryptoAlgorithm getCryptoAlgorithm(String algorithm)
-            throws NoSuchAlgorithmException;
-}
diff --git a/src/java/org/apache/turbine/services/crypto/TurbineCrypto.java b/src/java/org/apache/turbine/services/crypto/TurbineCrypto.java
deleted file mode 100644
index 0f3b7f3..0000000
--- a/src/java/org/apache/turbine/services/crypto/TurbineCrypto.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.security.NoSuchAlgorithmException;
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * This is a facade class for the CryptoService.
- *
- * Here are the static methods that call related methods of the
- * various implementations of the Crypto Security Service, according
- * to the settings in TurbineResources.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public abstract class TurbineCrypto
-{
-    /**
-     * Retrieves an implementation of the CryptoService, based on
-     * the settings in TurbineResources.
-     *
-     * @return an implementation of the CryptoService
-     */
-
-    public static CryptoService getService()
-    {
-        return (CryptoService) TurbineServices.getInstance()
-                .getService(CryptoService.SERVICE_NAME);
-    }
-
-    /**
-     * Returns a CryptoAlgorithm Object which represents the requested
-     * crypto algorithm.
-     *
-     * @param algo      Name of the requested algorithm
-     *
-     * @return An Object representing the algorithm
-     *
-     * @throws NoSuchAlgorithmException  Requested algorithm is not available
-     *
-     */
-    public static CryptoAlgorithm getCryptoAlgorithm(String algo)
-            throws NoSuchAlgorithmException
-    {
-        return getService().getCryptoAlgorithm(algo);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/TurbineCryptoService.java b/src/java/org/apache/turbine/services/crypto/TurbineCryptoService.java
deleted file mode 100644
index 1b16c9f..0000000
--- a/src/java/org/apache/turbine/services/crypto/TurbineCryptoService.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.security.NoSuchAlgorithmException;
-
-import java.util.Hashtable;
-import java.util.Iterator;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.BaseService;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.crypto.provider.JavaCrypt;
-import org.apache.turbine.services.factory.FactoryService;
-
-/**
- * An implementation of CryptoService that uses either supplied crypto
- * Algorithms (provided in Turbine.Services.properties) or tries to get them via
- * the normal java mechanisms if this fails.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public class TurbineCryptoService
-        extends BaseService
-        implements CryptoService
-{
-    /** Key Prefix for our algorithms */
-    private static final String ALGORITHM = "algorithm";
-
-    /** Default Key */
-    private static final String DEFAULT_KEY = "default";
-
-    /** Default Encryption Class */
-    private static final String DEFAULT_CLASS =
-            JavaCrypt.class.getName();
-
-    /** Names of the registered algorithms and the wanted classes */
-    private Hashtable algos = null;
-
-    /** A factory to construct CryptoAlgorithm objects  */
-    private FactoryService factoryService = null;
-
-    /**
-     * There is not much to initialize here. This runs
-     * as early init method.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-
-    public void init()
-            throws InitializationException
-    {
-        this.algos = new Hashtable();
-
-        /*
-         * Set up default (Can be overridden by default key
-         * from the properties
-         */
-
-        algos.put(DEFAULT_KEY, DEFAULT_CLASS);
-
-        /* get the parts of the configuration relevant to us. */
-
-        Configuration conf = getConfiguration().subset(ALGORITHM);
-
-        if (conf != null)
-        {
-            for (Iterator it = conf.getKeys(); it.hasNext();)
-            {
-                String key = (String) it.next();
-                String val = conf.getString(key);
-                // Log.debug("Registered " + val
-                //            + " for Crypto Algorithm " + key);
-                algos.put(key, val);
-            }
-        }
-
-        try
-        {
-            factoryService = (FactoryService) TurbineServices.getInstance().
-                    getService(FactoryService.SERVICE_NAME);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                    "Failed to get a Factory object: ", e);
-        }
-
-        setInit(true);
-    }
-
-    /**
-     * Returns a CryptoAlgorithm Object which represents the requested
-     * crypto algorithm.
-     *
-     * @param algo      Name of the requested algorithm
-     *
-     * @return An Object representing the algorithm
-     *
-     * @throws NoSuchAlgorithmException  Requested algorithm is not available
-     *
-     */
-
-    public CryptoAlgorithm getCryptoAlgorithm(String algo)
-            throws NoSuchAlgorithmException
-    {
-        String cryptoClass = (String) algos.get(algo);
-        CryptoAlgorithm ca = null;
-
-        if (cryptoClass == null)
-        {
-            cryptoClass = (String) algos.get(DEFAULT_KEY);
-        }
-
-        if (cryptoClass == null || cryptoClass.equalsIgnoreCase("none"))
-        {
-            throw new NoSuchAlgorithmException(
-                    "TurbineCryptoService: No Algorithm for "
-                    + algo + " found");
-        }
-
-        try
-        {
-            ca = (CryptoAlgorithm) factoryService.getInstance(cryptoClass);
-        }
-        catch (Exception e)
-        {
-            throw new NoSuchAlgorithmException(
-                    "TurbineCryptoService: Error instantiating "
-                    + cryptoClass + " for " + algo);
-        }
-
-        ca.setCipher(algo);
-
-        return ca;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/package.html b/src/java/org/apache/turbine/services/crypto/package.html
deleted file mode 100644
index 98e8999..0000000
--- a/src/java/org/apache/turbine/services/crypto/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Contains the Crypto Service providing you with a variety of Crypto algorithms.
-<br/>
-This service has been deprecated in favor of the Fulcrum Crypto component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-crypto">Fulcrum Crypto</a>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/crypto/provider/ClearCrypt.java b/src/java/org/apache/turbine/services/crypto/provider/ClearCrypt.java
deleted file mode 100644
index ee64c20..0000000
--- a/src/java/org/apache/turbine/services/crypto/provider/ClearCrypt.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package org.apache.turbine.services.crypto.provider;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.crypto.CryptoAlgorithm;
-
-/**
- * This is a dummy for "cleartext" encryption. It goes through
- * the notions of the CryptoAlgorithm interface but actually does
- * nothing. It can be used as a replacement for the "encrypt = no"
- * setting in the TR.props.
- *
- * Can be used as the default crypto algorithm
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ClearCrypt
-        implements CryptoAlgorithm
-{
-    /**
-     * C'tor
-     *
-     */
-
-    public ClearCrypt()
-    {
-    }
-
-    /**
-     * This class never uses an algorithm, so this is
-     * just a dummy.
-     *
-     * @param cipher    Cipher (ignored)
-     */
-
-    public void setCipher(String cipher)
-    {
-        /* dummy */
-    }
-
-    /**
-     * This class never uses a seed, so this is
-     * just a dummy.
-     *
-     * @param seed        Seed (ignored)
-     */
-
-    public void setSeed(String seed)
-    {
-        /* dummy */
-    }
-
-    /**
-     * encrypt the supplied string with the requested cipher
-     *
-     * @param value       The value to be encrypted
-     *
-     * @return The encrypted value
-     *
-     * @throws Exception An Exception of the underlying implementation.
-     *
-     */
-
-    public String encrypt(String value)
-            throws Exception
-    {
-        /*
-         * Ultra-clever implementation. ;-)
-         */
-
-        return value;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/provider/JavaCrypt.java b/src/java/org/apache/turbine/services/crypto/provider/JavaCrypt.java
deleted file mode 100644
index 49bb950..0000000
--- a/src/java/org/apache/turbine/services/crypto/provider/JavaCrypt.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package org.apache.turbine.services.crypto.provider;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.security.MessageDigest;
-
-import org.apache.commons.codec.base64.Base64;
-
-import org.apache.turbine.services.crypto.CryptoAlgorithm;
-
-/**
- * Implements the normal java.security.MessageDigest stream cipers.
- * Base64 strings returned by this provider are correctly padded to
- * multiples of four bytes. If you run into interoperability problems
- * with other languages, especially perl and the Digest::MD5 module,
- * note that the md5_base64 function from this package incorrectly drops
- * the pad bytes. Use the MIME::Base64 package instead.
- *
- * If you upgrade from Turbine 2.1 and suddently your old stored passwords
- * no longer work, please take a look at the OldJavaCrypt provider for
- * bug-to-bug compatibility.
- *
- * This provider can be used as the default crypto algorithm provider.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class JavaCrypt
-        implements CryptoAlgorithm
-{
-
-    /** The default cipher */
-    public static final String DEFAULT_CIPHER = "SHA";
-
-    /** The cipher to use for encryption */
-    private String cipher = null;
-
-    /**
-     * C'tor
-     *
-     */
-
-    public JavaCrypt()
-    {
-        this.cipher = DEFAULT_CIPHER;
-    }
-
-    /**
-     * Setting the actual cipher requested. If not
-     * called, then the default cipher (SHA) is used.
-     *
-     * This will never throw an error even if there is no
-     * provider for this cipher. The error will be thrown
-     * by encrypt() (Fixme?)
-     *
-     * @param cipher     The cipher to use.
-     *
-     */
-
-    public void setCipher(String cipher)
-    {
-        this.cipher = cipher;
-    }
-
-    /**
-     * This class never uses a seed, so this is
-     * just a dummy.
-     *
-     * @param seed        Seed (ignored)
-     *
-     */
-
-    public void setSeed(String seed)
-    {
-        /* dummy */
-    }
-
-    /**
-     * encrypt the supplied string with the requested cipher
-     *
-     * @param value       The value to be encrypted
-     *
-     * @return The encrypted value
-     *
-     * @throws Exception An Exception of the underlying implementation.
-     */
-
-    public String encrypt(String value)
-            throws Exception
-    {
-        MessageDigest md = MessageDigest.getInstance(cipher);
-
-        // We need to use unicode here, to be independent of platform's
-        // default encoding. Thanks to SGawin for spotting this.
-        byte[] digest = md.digest(value.getBytes("UTF-8"));
-
-        // Base64-encode the digest.
-        byte[] encodedDigest = Base64.encode(digest);
-        return (encodedDigest == null ? null : new String(encodedDigest));
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/provider/OldJavaCrypt.java b/src/java/org/apache/turbine/services/crypto/provider/OldJavaCrypt.java
deleted file mode 100644
index b09c614..0000000
--- a/src/java/org/apache/turbine/services/crypto/provider/OldJavaCrypt.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package org.apache.turbine.services.crypto.provider;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import java.security.MessageDigest;
-
-import javax.mail.internet.MimeUtility;
-
-import org.apache.turbine.services.crypto.CryptoAlgorithm;
-
-/**
- * This is the Message Digest Implementation of Turbine 2.1. It does
- * not pad the Base64 encryption of the Message Digests correctly but
- * truncates after 20 chars. This leads to interoperability problems
- * if you want to use e.g. database columns between two languages.
- *
- * If you upgrade an application from Turbine 2.1 and have already used
- * the Security Service with encrypted passwords and no way to rebuild
- * your databases, use this provider. It is bug-compatible.
- *
- * DO NOT USE THIS PROVIDER FOR ANY NEW APPLICATION!
- *
- * Nevertheless it can be used as the default crypto algorithm .
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class OldJavaCrypt
-        implements CryptoAlgorithm
-{
-
-    /** The default cipher */
-    public static final String DEFAULT_CIPHER = "SHA";
-
-    /** The cipher to use for encryption */
-    private String cipher = null;
-
-    /**
-     * C'tor
-     *
-     */
-
-    public OldJavaCrypt()
-    {
-        this.cipher = DEFAULT_CIPHER;
-    }
-
-    /**
-     * Setting the actual cipher requested. If not
-     * called, then the default cipher (SHA) is used.
-     *
-     * This will never throw an error even if there is no
-     * provider for this cipher. The error will be thrown
-     * by encrypt() (Fixme?)
-     *
-     * @param cipher     The cipher to use.
-     *
-     */
-
-    public void setCipher(String cipher)
-    {
-        this.cipher = cipher;
-    }
-
-    /**
-     * This class never uses a seed, so this is
-     * just a dummy.
-     *
-     * @param seed        Seed (ignored)
-     *
-     */
-
-    public void setSeed(String seed)
-    {
-        /* dummy */
-    }
-
-    /**
-     * encrypt the supplied string with the requested cipher
-     *
-     * @param value       The value to be encrypted
-     *
-     * @return The encrypted value
-     *
-     * @throws Exception An Exception of the underlying implementation.
-     */
-
-    public String encrypt(String value)
-            throws Exception
-    {
-        MessageDigest md = MessageDigest.getInstance(cipher);
-
-        // We need to use unicode here, to be independent of platform's
-        // default encoding. Thanks to SGawin for spotting this.
-
-        byte[] digest = md.digest(value.getBytes("UTF-8"));
-        ByteArrayOutputStream bas =
-                new ByteArrayOutputStream(digest.length + digest.length / 3 + 1);
-        OutputStream encodedStream = MimeUtility.encode(bas, "base64");
-        encodedStream.write(digest);
-        return bas.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/provider/UnixCrypt.java b/src/java/org/apache/turbine/services/crypto/provider/UnixCrypt.java
deleted file mode 100644
index c2c35fd..0000000
--- a/src/java/org/apache/turbine/services/crypto/provider/UnixCrypt.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.apache.turbine.services.crypto.provider;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.crypto.CryptoAlgorithm;
-
-/**
- * Implements Standard Unix crypt(3) for use with the Crypto Service.
- *
- * @deprecated Use the Fulcrum Crypto component instead.
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class UnixCrypt
-        implements CryptoAlgorithm
-{
-
-    /** The seed to use */
-    private String seed = null;
-
-    /** standard Unix crypt chars (64) */
-    private static final char[] SALT_CHARS =
-            (("abcdefghijklmnopqrstuvwxyz"
-            + "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./").toCharArray());
-
-    /**
-     * C'tor
-     *
-     */
-
-    public UnixCrypt()
-    {
-    }
-
-    /**
-     * This class never uses anything but
-     * UnixCrypt, so it is just a dummy
-     * (Fixme: Should we throw an exception if
-     * something is requested that we don't support?
-     *
-     * @param cipher    Cipher (ignored)
-     */
-
-    public void setCipher(String cipher)
-    {
-        /* dummy */
-    }
-
-    /**
-     * Setting the seed for the UnixCrypt
-     * algorithm. If a null value is supplied,
-     * or no seed is set, then a random seed is used.
-     *
-     * @param seed     The seed value to use.
-     */
-
-    public void setSeed(String seed)
-    {
-        this.seed = seed;
-    }
-
-    /**
-     * encrypt the supplied string with the requested cipher
-     *
-     * @param value       The value to be encrypted
-     *
-     * @return The encrypted value
-     *
-     * @throws Exception An Exception of the underlying implementation.
-     */
-
-    public String encrypt(String value)
-            throws Exception
-    {
-        if (seed == null)
-        {
-            java.util.Random randomGenerator = new java.util.Random();
-            int numSaltChars = SALT_CHARS.length;
-
-            seed = (new StringBuffer())
-                    .append(SALT_CHARS[Math.abs(randomGenerator.nextInt())
-                    % numSaltChars])
-                    .append(SALT_CHARS[Math.abs(randomGenerator.nextInt())
-                    % numSaltChars])
-                    .toString();
-        }
-
-        /* UnixCrypt seems to be a really widespread name... */
-        return new cryptix.tools.UnixCrypt(seed).crypt(value);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/crypto/provider/package.html b/src/java/org/apache/turbine/services/crypto/provider/package.html
deleted file mode 100644
index 8550f80..0000000
--- a/src/java/org/apache/turbine/services/crypto/provider/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Algorithm providers for the Crypto Service.
-<br/>
-This service has been deprecated in favor of the Fulcrum Crypto component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-crypto">Fulcrum Crypto</a>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/factory/Factory.java b/src/java/org/apache/turbine/services/factory/Factory.java
deleted file mode 100644
index a3a2e8c..0000000
--- a/src/java/org/apache/turbine/services/factory/Factory.java
+++ /dev/null
@@ -1,143 +0,0 @@
-package org.apache.turbine.services.factory;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Factory is an interface for object factories. Object factories
- * can be registered with the Factory Service to support customized
- * functionality during instantiation of specific classes that
- * the service itself cannot provide. Examples include
- * instantiation of XML parsers and secure sockets requiring
- * provider specific initializations before instantiation.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface Factory
-{
-    /**
-     * Initializes the factory. This method is called by
-     * the Factory Service before the factory is used.
-     *
-     * @param className the name of the production class
-     * @throws TurbineException if initialization fails.
-     */
-    void init(String className)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a class.
-     *
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance()
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a class using a specified class loader.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(ClassLoader loader)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(Object[] params,
-                       String[] signature)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(ClassLoader loader,
-                       Object[] params,
-                       String[] signature)
-            throws TurbineException;
-
-    /**
-     * Tests if this object factory supports specified class loaders.
-     *
-     * @return true if class loaders are supported, false otherwise.
-     */
-    boolean isLoaderSupported();
-}
diff --git a/src/java/org/apache/turbine/services/factory/FactoryService.java b/src/java/org/apache/turbine/services/factory/FactoryService.java
deleted file mode 100644
index a9b0c0d..0000000
--- a/src/java/org/apache/turbine/services/factory/FactoryService.java
+++ /dev/null
@@ -1,164 +0,0 @@
-package org.apache.turbine.services.factory;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The Factory Service instantiates objects using either default
- * class loaders or a specified one. Whether specified class
- * loaders are supported for a class depends on implementation
- * and can be tested with the isLoaderSupported method.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface FactoryService
-        extends Service
-{
-    /**
-     * The key under which this service is stored in TurbineServices.
-     */
-    String SERVICE_NAME = "FactoryService";
-
-    /**
-     * Gets an instance of a named class.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            ClassLoader loader)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            Object[] params,
-            String[] signature)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            ClassLoader loader,
-            Object[] params,
-            String[] signature)
-            throws TurbineException;
-
-    /**
-     * Tests if specified class loaders are supported for a named class.
-     *
-     * @param className the name of the class.
-     * @return true if class loaders are supported, false otherwise.
-     * @throws TurbineException if test fails.
-     */
-    boolean isLoaderSupported(String className)
-            throws TurbineException;
-
-    /**
-     * Gets the signature classes for parameters of a method of a class.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the method.
-     * @param signature an array containing the signature of the method.
-     * @return an array of signature classes. Note that in some cases
-     * objects in the parameter array can be switched to the context
-     * of a different class loader.
-     * @throws ClassNotFoundException if any of the classes is not found.
-     */
-    Class[] getSignature(Class clazz,
-            Object params[],
-            String signature[])
-            throws ClassNotFoundException;
-}
diff --git a/src/java/org/apache/turbine/services/factory/TurbineFactory.java b/src/java/org/apache/turbine/services/factory/TurbineFactory.java
deleted file mode 100644
index 3f6d6a3..0000000
--- a/src/java/org/apache/turbine/services/factory/TurbineFactory.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.apache.turbine.services.factory;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The Factory Service instantiates objects using either default
- * class loaders or a specified one. Whether specified class
- * loaders are supported for a class depends on implementation
- * and can be tested with the isLoaderSupported method.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class TurbineFactory
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return An AssemblerBroker implementation instance
-     */
-    public static FactoryService getService()
-    {
-        return (FactoryService) TurbineServices.getInstance()
-                .getService(FactoryService.SERVICE_NAME);
-    }
-    /**
-     * Gets an instance of a named class.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public static Object getInstance(String className)
-            throws TurbineException
-    {
-        return getService().getInstance(className);
-    }
-    
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public static Object getInstance(String className,
-            ClassLoader loader)
-            throws TurbineException
-    {
-        return getService().getInstance(className,
-                loader);
-    }
-
-    /**
-     * Gets an instance of a named class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public static Object getInstance(String className,
-            Object[] params,
-            String[] signature)
-            throws TurbineException
-    {
-        return getService().getInstance(className,
-                params,
-                signature);
-    }
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public static Object getInstance(String className,
-            ClassLoader loader,
-            Object[] params,
-            String[] signature)
-            throws TurbineException
-    {
-        return getService().getInstance(className,
-                loader,
-                params,
-                signature);
-    }
-            
-
-    /**
-     * Tests if specified class loaders are supported for a named class.
-     *
-     * @param className the name of the class.
-     * @return true if class loaders are supported, false otherwise.
-     * @throws TurbineException if test fails.
-     */
-    public static boolean isLoaderSupported(String className)
-            throws TurbineException
-    {
-        return getService().isLoaderSupported(className);
-    }
-
-    /**
-     * Gets the signature classes for parameters of a method of a class.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the method.
-     * @param signature an array containing the signature of the method.
-     * @return an array of signature classes. Note that in some cases
-     * objects in the parameter array can be switched to the context
-     * of a different class loader.
-     * @throws ClassNotFoundException if any of the classes is not found.
-     */
-    public static Class[] getSignature(Class clazz,
-            Object params[],
-            String signature[])
-            throws ClassNotFoundException
-    {
-        return getService().getSignature(clazz, params, signature);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/factory/TurbineFactoryService.java b/src/java/org/apache/turbine/services/factory/TurbineFactoryService.java
deleted file mode 100644
index 6263077..0000000
--- a/src/java/org/apache/turbine/services/factory/TurbineFactoryService.java
+++ /dev/null
@@ -1,627 +0,0 @@
-package org.apache.turbine.services.factory;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.pool.ObjectInputStreamForContext;
-
-/**
- * The Factory Service instantiates objects using specified
- * class loaders. If none is specified, the default one
- * will be used.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class TurbineFactoryService
-        extends TurbineBaseService
-        implements FactoryService
-{
-    /**
-     * The property specifying a set of additional class loaders.
-     */
-    public static final String CLASS_LOADERS = "class.loaders";
-
-    /**
-     * The property prefix specifying additional object factories.
-     */
-    public static final String OBJECT_FACTORY = "factory.";
-
-    /**
-     * Primitive classes for reflection of constructors.
-     */
-    private static HashMap primitiveClasses;
-
-    {
-        primitiveClasses = new HashMap(8);
-        primitiveClasses.put(Boolean.TYPE.toString(), Boolean.TYPE);
-        primitiveClasses.put(Character.TYPE.toString(), Character.TYPE);
-        primitiveClasses.put(Byte.TYPE.toString(), Byte.TYPE);
-        primitiveClasses.put(Short.TYPE.toString(), Short.TYPE);
-        primitiveClasses.put(Integer.TYPE.toString(), Integer.TYPE);
-        primitiveClasses.put(Long.TYPE.toString(), Long.TYPE);
-        primitiveClasses.put(Float.TYPE.toString(), Float.TYPE);
-        primitiveClasses.put(Double.TYPE.toString(), Double.TYPE);
-    }
-
-    /**
-     * Additional class loaders.
-     */
-    private ArrayList classLoaders = new ArrayList();
-
-    /**
-     * Customized object factories.
-     */
-    private HashMap objectFactories = new HashMap();
-
-    /**
-     * Gets the class of a primitive type.
-     *
-     * @param type a primitive type.
-     * @return the corresponding class, or null.
-     */
-    protected static Class getPrimitiveClass(String type)
-    {
-        return (Class) primitiveClasses.get(type);
-    }
-
-    /**
-     * Constructs a Factory Service.
-     */
-    public TurbineFactoryService()
-    {
-    }
-
-    /**
-     * Initializes the service by loading default class loaders
-     * and customized object factories.
-     *
-     * @throws InitializationException if initialization fails.
-     */
-    public void init() throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-        if (conf != null)
-        {
-            List loaders = conf.getList(CLASS_LOADERS);
-            if (loaders != null)
-            {
-                for (int i = 0; i < loaders.size(); i++)
-                {
-                    try
-                    {
-                        classLoaders.add(
-                                loadClass((String) loaders.get(i)).newInstance());
-                    }
-                    catch (Exception x)
-                    {
-                        throw new InitializationException(
-                                "No such class loader '" +
-                                (String) loaders.get(i) +
-                                "' for TurbineFactoryService", x);
-                    }
-                }
-            }
-
-            String key,factory;
-            for (Iterator i = conf.getKeys(OBJECT_FACTORY); i.hasNext();)
-            {
-                key = (String) i.next();
-                factory = conf.getString(key);
-
-                /*
-                 * Store the factory to the table as a string and
-                 * instantiate it by using the service when needed.
-                 */
-                objectFactories.put(
-                        key.substring(OBJECT_FACTORY.length()), factory);
-            }
-        }
-        setInit(true);
-    }
-
-    /**
-     * Gets an instance of a named class.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public Object getInstance(String className)
-            throws TurbineException
-    {
-        if (className == null)
-        {
-            throw new TurbineException(
-                    new NullPointerException("String className"));
-        }
-
-        Factory factory = getFactory(className);
-        if (factory == null)
-        {
-            Class clazz;
-            try
-            {
-                clazz = loadClass(className);
-            }
-            catch (ClassNotFoundException x)
-            {
-                throw new TurbineException(
-                        "Instantiation failed for class " + className, x);
-            }
-            return getInstance(clazz);
-        }
-        else
-        {
-            return factory.getInstance();
-        }
-    }
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public Object getInstance(String className,
-            ClassLoader loader)
-            throws TurbineException
-    {
-        if (className == null)
-        {
-            throw new TurbineException(
-                    new NullPointerException("String className"));
-        }
-
-        Factory factory = getFactory(className);
-        if (factory == null)
-        {
-            if (loader != null)
-            {
-                Class clazz;
-                try
-                {
-                    clazz = loadClass(className, loader);
-                }
-                catch (ClassNotFoundException x)
-                {
-                    throw new TurbineException(
-                            "Instantiation failed for class " + className, x);
-                }
-                return getInstance(clazz);
-            }
-            else
-            {
-                return getInstance(className);
-            }
-        }
-        else
-        {
-            return factory.getInstance(loader);
-        }
-    }
-
-    /**
-     * Gets an instance of a named class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public Object getInstance(String className,
-            Object[] params,
-            String[] signature)
-            throws TurbineException
-    {
-        if (className == null)
-        {
-            throw new TurbineException(
-                    new NullPointerException("String className"));
-        }
-
-        Factory factory = getFactory(className);
-        if (factory == null)
-        {
-            Class clazz;
-            try
-            {
-                clazz = loadClass(className);
-            }
-            catch (ClassNotFoundException x)
-            {
-                throw new TurbineException(
-                        "Instantiation failed for class " + className, x);
-            }
-            return getInstance(clazz, params, signature);
-        }
-        else
-        {
-            return factory.getInstance(params, signature);
-        }
-    }
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    public Object getInstance(String className,
-            ClassLoader loader,
-            Object[] params,
-            String[] signature)
-            throws TurbineException
-    {
-        if (className == null)
-        {
-            throw new TurbineException(
-                    new NullPointerException("String className"));
-        }
-
-        Factory factory = getFactory(className);
-        if (factory == null)
-        {
-            if (loader != null)
-            {
-                Class clazz;
-                try
-                {
-                    clazz = loadClass(className, loader);
-                }
-                catch (ClassNotFoundException x)
-                {
-                    throw new TurbineException(
-                            "Instantiation failed for class " + className, x);
-                }
-                return getInstance(clazz, params, signature);
-            }
-            else
-            {
-                return getInstance(className, params, signature);
-            }
-        }
-        else
-        {
-            return factory.getInstance(loader, params, signature);
-        }
-    }
-
-    /**
-     * Tests if specified class loaders are supported for a named class.
-     *
-     * @param className the name of the class.
-     * @return true if class loaders are supported, false otherwise.
-     * @throws TurbineException if test fails.
-     */
-    public boolean isLoaderSupported(String className)
-            throws TurbineException
-    {
-        Factory factory = getFactory(className);
-        return factory != null ?
-                factory.isLoaderSupported() : true;
-    }
-
-    /**
-     * Gets an instance of a specified class.
-     *
-     * @param clazz the class.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    protected Object getInstance(Class clazz)
-            throws TurbineException
-    {
-        try
-        {
-            return clazz.newInstance();
-        }
-        catch (Exception x)
-        {
-            throw new TurbineException(
-                    "Instantiation failed for " + clazz.getName(), x);
-        }
-    }
-
-    /**
-     * Gets an instance of a specified class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    protected Object getInstance(Class clazz,
-            Object params[],
-            String signature[])
-            throws TurbineException
-    {
-        /* Try to construct. */
-        try
-        {
-            Class[] sign = getSignature(clazz, params, signature);
-            return clazz.getConstructor(sign).newInstance(params);
-        }
-        catch (Exception x)
-        {
-            throw new TurbineException(
-                    "Instantiation failed for " + clazz.getName(), x);
-        }
-    }
-
-    /**
-     * Gets the signature classes for parameters of a method of a class.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the method.
-     * @param signature an array containing the signature of the method.
-     * @return an array of signature classes. Note that in some cases
-     * objects in the parameter array can be switched to the context
-     * of a different class loader.
-     * @throws ClassNotFoundException if any of the classes is not found.
-     */
-    public Class[] getSignature(Class clazz,
-            Object params[],
-            String signature[])
-            throws ClassNotFoundException
-    {
-        if (signature != null)
-        {
-            /* We have parameters. */
-            ClassLoader tempLoader;
-            ClassLoader loader = clazz.getClassLoader();
-            Class[] sign = new Class[signature.length];
-            for (int i = 0; i < signature.length; i++)
-            {
-                /* Check primitive types. */
-                sign[i] = getPrimitiveClass(signature[i]);
-                if (sign[i] == null)
-                {
-                    /* Not a primitive one, continue building. */
-                    if (loader != null)
-                    {
-                        /* Use the class loader of the target object. */
-                        sign[i] = loader.loadClass(signature[i]);
-                        tempLoader = sign[i].getClassLoader();
-                        if ((params[i] != null) &&
-                                (tempLoader != null) &&
-                                !tempLoader.equals(params[i].getClass().getClassLoader()))
-                        {
-                            /*
-                             * The class uses a different class loader,
-                             * switch the parameter.
-                             */
-                            params[i] = switchObjectContext(params[i], loader);
-                        }
-                    }
-                    else
-                    {
-                        /* Use the default class loader. */
-                        sign[i] = loadClass(signature[i]);
-                    }
-                }
-            }
-            return sign;
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Switches an object into the context of a different class loader.
-     *
-     * @param object an object to switch.
-     * @param loader the loader of the new context.
-     */
-    protected Object switchObjectContext(Object object,
-            ClassLoader loader)
-    {
-        ByteArrayOutputStream bout =
-                new ByteArrayOutputStream();
-        try
-        {
-            ObjectOutputStream out =
-                    new ObjectOutputStream(bout);
-            out.writeObject(object);
-            out.flush();
-        }
-        catch (Exception x)
-        {
-            return object;
-        }
-
-        try
-        {
-            ByteArrayInputStream bin =
-                    new ByteArrayInputStream(bout.toByteArray());
-            ObjectInputStreamForContext in =
-                    new ObjectInputStreamForContext(bin, loader);
-
-            return in.readObject();
-        }
-        catch (Exception x)
-        {
-            return object;
-        }
-    }
-
-    /**
-     * Loads the named class using the default class loader.
-     *
-     * @param className the name of the class to load.
-     * @return the loaded class.
-     * @throws ClassNotFoundException if the class was not found.
-     */
-    protected Class loadClass(String className)
-            throws ClassNotFoundException
-    {
-        ClassLoader loader = this.getClass().getClassLoader();
-        try
-        {
-            return loader != null ?
-                    loader.loadClass(className) : Class.forName(className);
-        }
-        catch (ClassNotFoundException x)
-        {
-            /* Go through additional loaders. */
-            for (Iterator i = classLoaders.iterator(); i.hasNext();)
-            {
-                try
-                {
-                    return ((ClassLoader) i.next()).loadClass(className);
-                }
-                catch (ClassNotFoundException xx)
-                {
-                }
-            }
-
-            /* Give up. */
-            throw x;
-        }
-    }
-
-    /**
-     * Loads the named class using a specified class loader.
-     *
-     * @param className the name of the class to load.
-     * @param loader the loader to use.
-     * @return the loaded class.
-     * @throws ClassNotFoundException if the class was not found.
-     */
-    protected Class loadClass(String className,
-            ClassLoader loader)
-            throws ClassNotFoundException
-    {
-        return loader != null ?
-                loader.loadClass(className) : loadClass(className);
-    }
-
-    /**
-     * Gets a customized factory for a named class.
-     *
-     * @param className the name of the class to load.
-     * @return the factory or null if not specified.
-     * @throws TurbineException if instantiation of the factory fails.
-     */
-    protected Factory getFactory(String className)
-            throws TurbineException
-    {
-        HashMap factories = objectFactories;
-        Object factory = factories.get(className);
-        if (factory != null)
-        {
-            if (factory instanceof String)
-            {
-                /* Not yet instantiated... */
-                try
-                {
-                    factory = (Factory) getInstance((String) factory);
-                    ((Factory) factory).init(className);
-                }
-                catch (TurbineException x)
-                {
-                    throw x;
-                }
-                catch (ClassCastException x)
-                {
-                    throw new TurbineException(
-                            "Incorrect factory " + (String) factory +
-                            " for class " + className, x);
-                }
-                factories = (HashMap) factories.clone();
-                factories.put(className, factory);
-                objectFactories = factories;
-            }
-            return (Factory) factory;
-        }
-        else
-        {
-            return null;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/factory/package.html b/src/java/org/apache/turbine/services/factory/package.html
deleted file mode 100644
index 599b0f6..0000000
--- a/src/java/org/apache/turbine/services/factory/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Contains a generic factory for generating new objects.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/intake/IntakeException.java b/src/java/org/apache/turbine/services/intake/IntakeException.java
deleted file mode 100644
index cde96ec..0000000
--- a/src/java/org/apache/turbine/services/intake/IntakeException.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine.services.intake;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Base exception thrown by the Intake service.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class IntakeException extends TurbineException
-{
-    /**
-     * Constructs a new <code>TurbineException</code> without specified
-     * detail message.
-     */
-    public IntakeException()
-    {
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * detail message.
-     *
-     * @param msg The error message.
-     */
-    public IntakeException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * nested <code>Throwable</code>.
-     *
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public IntakeException(Throwable nested)
-    {
-        super(nested);
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * detail message and nested <code>Throwable</code>.
-     *
-     * @param msg    The error message.
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public IntakeException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/intake/IntakeService.java b/src/java/org/apache/turbine/services/intake/IntakeService.java
deleted file mode 100644
index 7d2a9b5..0000000
--- a/src/java/org/apache/turbine/services/intake/IntakeService.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.turbine.services.intake;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.IntrospectionException;
-
-import java.lang.reflect.Method;
-
-import org.apache.turbine.services.intake.model.Group;
-
-/**
- * This service provides access to input processing objects based
- * on an XML specification.
- *
- * <p>Localization of Intake's error messages can be accomplished
- * using Turbine's <code>LocalizationTool</code> from a Velocity template
- * as follows:
- * <blockquote><code></pre>
- * $l10n.get($intake.SomeGroup.SomeField.Message)
- * </pre></code></blockquote>
- * </p>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface IntakeService
-{
-    /**
-     * The key under which this service is stored in TurbineServices.
-     */
-    String SERVICE_NAME = "IntakeService";
-
-    /**
-     * The property specifying the location of the xml specification.
-     */
-    String XML_PATH = "xml.path";
-
-    /**
-     * The default location of the xml specification.
-     */
-    String XML_PATH_DEFAULT = "WEB-INF/conf/intake.xml";
-
-    /**
-     * The property specifying the location where a serialized version of 
-     * the xml specification can be written for faster restarts..
-     */
-    String SERIAL_XML = "serialize.path";
-
-    /**
-     * The default location where a serialized version of
-     * the xml specification can be written for faster restarts..
-     */
-    String SERIAL_XML_DEFAULT = "WEB-INF/appData.ser";
-
-    /**
-     * The default pool capacity.
-     */
-    int DEFAULT_POOL_CAPACITY = 1024;
-
-    /**
-     * Gets an instance of a named group either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     *
-     * @param groupName the name of the group.
-     * @return a Group instance.
-     * @throws IntakeException if recycling fails.
-     */
-    Group getGroup(String groupName)
-            throws IntakeException;
-
-    /**
-     * Puts a group back to the pool.
-     * @param instance the object instance to recycle.
-     *
-     * @throws IntakeException The passed group name does not exist.
-     */
-    void releaseGroup(Group instance)
-            throws IntakeException;
-
-    /**
-     * Gets the current size of the pool for a named group.
-     *
-     * @param groupName the name of the group.
-     *
-     * @throws IntakeException The passed group name does not exist.
-     */
-    int getSize(String groupName)
-            throws IntakeException;
-
-    /**
-     * Names of all the defined groups.
-     *
-     * @return array of names.
-     */
-    String[] getGroupNames();
-
-    /**
-     * Gets the key (usually a short identifier) for a group.
-     *
-     * @param groupName the name of the group.
-     * @return the key.
-     */
-    String getGroupKey(String groupName);
-
-    /**
-     * Gets the group name given its key.
-     *
-     * @param groupKey the key.
-     * @return groupName the name of the group.
-     */
-    String getGroupName(String groupKey);
-
-    /**
-     * Gets the Method that can be used to set a property.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    Method getFieldSetter(String className, String propName)
-            throws ClassNotFoundException, IntrospectionException;
-
-    /**
-     * Gets the Method that can be used to get a property value.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    Method getFieldGetter(String className, String propName)
-            throws ClassNotFoundException, IntrospectionException;
-}
-
-
-
-
-
diff --git a/src/java/org/apache/turbine/services/intake/IntakeTool.java b/src/java/org/apache/turbine/services/intake/IntakeTool.java
deleted file mode 100644
index 22d8ee0..0000000
--- a/src/java/org/apache/turbine/services/intake/IntakeTool.java
+++ /dev/null
@@ -1,560 +0,0 @@
-package org.apache.turbine.services.intake;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-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.fulcrum.intake.Intake;
-import org.apache.fulcrum.intake.IntakeException;
-import org.apache.fulcrum.intake.Retrievable;
-import org.apache.fulcrum.intake.model.Group;
-
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.parser.ValueParser;
-import org.apache.turbine.util.pool.Recyclable;
-
-/**
- * The main class through which Intake is accessed.  Provides easy access
- * to the Fulcrum Intake component.
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class IntakeTool
-        implements ApplicationTool, Recyclable
-{
-    /** Used for logging */
-    private static Log log = LogFactory.getLog(IntakeTool.class);
-
-    /** Constant for default key */
-    public static final String DEFAULT_KEY = "_0";
-
-    /** Constant for the hidden fieldname */
-    public static final String INTAKE_GRP = "intake-grp";
-
-    /** Groups from intake.xml */
-    private HashMap groups;
-
-    /** ValueParser instance */
-    private ValueParser pp;
-  
-    HashMap declaredGroups = new HashMap();
-    StringBuffer allGroupsSB = new StringBuffer(256);
-    StringBuffer groupSB = new StringBuffer(128);
-
-    /** The cache of PullHelpers. **/
-    private Map pullMap;
-
-    /**
-     * Constructor
-     */
-    public IntakeTool()
-    {
-        String[] groupNames = Intake.getGroupNames();
-        int groupCount = 0;
-        if (groupNames != null)
-        {
-            groupCount = groupNames.length;
-        }
-        groups = new HashMap((int) (1.25 * groupCount + 1));
-        pullMap = new HashMap((int) (1.25 * groupCount + 1));
-
-        for (int i = groupCount - 1; i >= 0; i--)
-        {
-            pullMap.put(groupNames[i], new PullHelper(groupNames[i]));
-        }
-    }
-
-    /**
-     * Prepares intake for a single request
-     */
-    public void init(Object runData)
-    {
-        this.pp = ((RunData) runData).getParameters();
-
-        String[] groupKeys = pp.getStrings(INTAKE_GRP);
-        String[] groupNames = null;
-        if (groupKeys == null || groupKeys.length == 0)
-        {
-            groupNames = Intake.getGroupNames();
-        }
-        else
-        {
-            groupNames = new String[groupKeys.length];
-            for (int i = groupKeys.length - 1; i >= 0; i--)
-            {
-                groupNames[i] = Intake.getGroupName(groupKeys[i]);
-            }
-
-        }
-
-        for (int i = groupNames.length - 1; i >= 0; i--)
-        {
-            try
-            {
-                List foundGroups = Intake.getGroup(groupNames[i])
-                    .getObjects(pp);
-
-                if (foundGroups != null)
-                {
-                    for (Iterator iter = foundGroups.iterator();
-                         iter.hasNext();)
-                    {
-                        Group group = (Group) iter.next();
-                        groups.put(group.getObjectKey(), group);
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error(e);
-            }
-        }
-    }
-
-    public void addGroupsToParameters(ValueParser vp)
-    {
-        for (Iterator i = groups.values().iterator(); i.hasNext();)
-        {
-            Group group = (Group) i.next();
-            if (!declaredGroups.containsKey(group.getIntakeGroupName()))
-            {
-                declaredGroups.put(group.getIntakeGroupName(), null);
-                vp.add("intake-grp", group.getGID());
-            }
-            vp.add(group.getGID(), group.getOID());
-        }
-        declaredGroups.clear();
-    }
-
-    /**
-     * A convenience method to write out the hidden form fields
-     * that notify intake of the relevant groups.  It should be used
-     * only in templates with 1 form.  In multiform templates, the groups
-     * that are relevant for each form need to be declared using
-     * $intake.newForm() and $intake.declareGroup($group) for the relevant
-     * groups in the form.
-     *
-     */
-    public String declareGroups()
-    {
-        allGroupsSB.setLength(0);
-        for (Iterator i = groups.values().iterator(); i.hasNext();)
-        {
-            declareGroup((Group) i.next(), allGroupsSB);
-        }
-        return allGroupsSB.toString();
-    }
-
-    /**
-     * A convenience method to write out the hidden form fields
-     * that notify intake of the group.
-     */
-    public String declareGroup(Group group)
-    {
-        groupSB.setLength(0);
-        declareGroup(group, groupSB);
-        return groupSB.toString();
-    }
-
-    /**
-     * xhtml valid hidden input field(s) that notifies intake of the
-     * group's presence.
-     */
-    public void declareGroup(Group group, StringBuffer sb)
-    {
-        if (!declaredGroups.containsKey(group.getIntakeGroupName()))
-        {
-            declaredGroups.put(group.getIntakeGroupName(), null);
-            sb.append("<input type=\"hidden\" name=\"")
-                    .append(INTAKE_GRP)
-                    .append("\" value=\"")
-                    .append(group.getGID())
-                    .append("\"/>\n");
-        }
-        group.appendHtmlFormInput(sb);
-    }
-
-    public void newForm()
-    {
-        declaredGroups.clear();
-        for (Iterator i = groups.values().iterator(); i.hasNext();)
-        {
-            ((Group) i.next()).resetDeclared();
-        }
-    }
-
-    /**
-     * Implementation of ApplicationTool interface is not needed for this
-     * tool as it is request scoped
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /**
-     * Inner class to present a nice interface to the template designer
-     */
-    public class PullHelper
-    {
-        /** Name of the group used by the pull helper */
-        String groupName;
-
-        /**
-         * Private constructor to force use of factory method.
-         *
-         * @param groupName
-         */
-        private PullHelper(String groupName)
-        {
-            this.groupName = groupName;
-        }
-
-        /**
-         * Populates the object with the default values from the XML File
-         *
-         * @return a Group object with the default values
-         * @throws IntakeException
-         */
-        public Group getDefault()
-                throws IntakeException
-        {
-            return setKey(DEFAULT_KEY);
-        }
-
-        /**
-         * Calls setKey(key,true)
-         *
-         * @param key
-         * @return an Intake Group
-         * @throws IntakeException
-         */
-        public Group setKey(String key)
-                throws IntakeException
-        {
-            return setKey(key, true);
-        }
-
-        /**
-         *
-         * @param key
-         * @param create
-         * @return an Intake Group
-         * @throws IntakeException
-         */
-        public Group setKey(String key, boolean create)
-                throws IntakeException
-        {
-            Group g = null;
-
-            String inputKey = Intake.getGroupKey(groupName) + key;
-            if (groups.containsKey(inputKey))
-            {
-                g = (Group) groups.get(inputKey);
-            }
-            else if (create)
-            {
-                g = Intake.getGroup(groupName);
-                groups.put(inputKey, g);
-                g.init(key, pp);
-            }
-
-            return g;
-        }
-
-        /**
-         * maps an Intake Group to the values from a Retrievable object.
-         *
-         * @param obj A retrievable object
-         * @return an Intake Group
-         */
-        public Group mapTo(Retrievable obj)
-                throws IntakeException
-        {
-            Group g = null;
-
-            try
-            {
-                String inputKey = Intake.getGroupKey(groupName)
-                        + obj.getQueryKey();
-                if (groups.containsKey(inputKey))
-                {
-                    g = (Group) groups.get(inputKey);
-                }
-                else
-                {
-                    g = Intake.getGroup(groupName);
-                    groups.put(inputKey, g);
-                }
-                
-                return g.init(obj);
-            }
-            catch (Exception e)
-            {
-                log.error(e);
-            }
-
-            return null;
-        }
-    }    
-
-    /**
-     * get a specific group
-     */
-    public PullHelper get(String groupName)
-            throws IntakeException
-    {
-        return (PullHelper) pullMap.get(groupName);
-    }
-
-    /**
-     * Get a specific group
-     *
-     * @param throwExceptions if false, exceptions will be supressed.
-     * @throws IntakeException could not retrieve group
-     */
-    public PullHelper get(String groupName, boolean throwExceptions)
-            throws IntakeException
-    {
-        return (PullHelper) pullMap.get(groupName);
-    }
-
-    /**
-     * Loops through all of the Groups and checks to see if
-     * the data within the Group is valid.
-     */
-    public boolean isAllValid()
-    {
-        boolean allValid = true;
-        for (Iterator iter = groups.values().iterator(); iter.hasNext();)
-        {
-            Group group = (Group) iter.next();
-            allValid &= group.isAllValid();
-        }
-        return allValid;
-    }
-
-    /**
-     * Get a specific group by name and key.
-     */
-    public Group get(String groupName, String key)
-            throws IntakeException
-    {
-        if (groupName == null)
-        {
-            throw new IntakeException("Intake.get: groupName == null");
-        }
-        if (key == null)
-        {
-            throw new IntakeException("Intake.get: key == null");
-        }
-
-        PullHelper ph = get(groupName);
-        return (ph == null) ? null : ph.setKey(key);
-    }
-
-    /**
-     * Get a specific group by name and key. Also specify
-     * whether or not you want to create a new group.
-     */
-    public Group get(String groupName, String key, boolean create)
-            throws IntakeException
-    {
-        if (groupName == null)
-        {
-            throw new IntakeException("Intake.get: groupName == null");
-        }
-        if (key == null)
-        {
-            throw new IntakeException("Intake.get: key == null");
-        }
-
-        PullHelper ph = get(groupName);
-        return (ph == null) ? null : ph.setKey(key, create);
-    }
-
-    /**
-     * Removes group.  Primary use is to remove a group that has
-     * been processed by an action and is no longer appropriate
-     * in the view (screen).
-     */
-    public void remove(Group group)
-    {
-        if (group != null)
-        {
-            groups.remove(group.getObjectKey());
-            group.removeFromRequest();
-
-            String[] groupKeys = pp.getStrings(INTAKE_GRP);
-
-            pp.remove(INTAKE_GRP);
-
-			if (groupKeys != null)
-			{
-		        for (int i = 0; i < groupKeys.length; i++)
-		        {
-		            if (!groupKeys[i].equals(group.getGID()))
-		            {
-		                 pp.add(INTAKE_GRP, groupKeys[i]);
-		            }
-                }
-		    }
-
-            
-            try
-            {
-                Intake.releaseGroup(group);
-            }
-            catch (IntakeException ie)
-            {
-                log.error("Tried to release unknown group "
-                        + group.getIntakeGroupName());
-            }
-        }
-    }
-
-    /**
-     * Removes all groups.  Primary use is to remove groups that have
-     * been processed by an action and are no longer appropriate
-     * in the view (screen).
-     */
-    public void removeAll()
-    {
-        Object[] allGroups = groups.values().toArray();
-        for (int i = allGroups.length - 1; i >= 0; i--)
-        {
-            Group group = (Group) allGroups[i];
-            remove(group);
-        }
-    }
-
-    /**
-     * Get a Map containing all the groups.
-     *
-     * @return the Group Map
-     */
-    public Map getGroups()
-    {
-        return groups;
-    }
-
-    // ****************** Recyclable implementation ************************
-
-    private boolean disposed;
-
-    /**
-     * Recycles the object for a new client. Recycle methods with
-     * parameters must be added to implementing object and they will be
-     * automatically called by pool implementations when the object is
-     * taken from the pool for a new client. The parameters must
-     * correspond to the parameters of the constructors of the object.
-     * For new objects, constructors can call their corresponding recycle
-     * methods whenever applicable.
-     * The recycle methods must call their super.
-     */
-    public void recycle()
-    {
-        disposed = false;
-    }
-
-    /**
-     * Disposes the object after use. The method is called
-     * when the object is returned to its pool.
-     * The dispose method must call its super.
-     */
-    public void dispose()
-    {
-        for (Iterator iter = groups.values().iterator(); iter.hasNext();)
-        {
-            Group g = (Group) iter.next();
-
-            try
-            {
-                Intake.releaseGroup(g);
-            }
-            catch (IntakeException ie)
-            {
-                log.error("Tried to release unknown group "
-                        + g.getIntakeGroupName());
-            }
-        }
-
-        groups.clear();
-        declaredGroups.clear();
-        pp = null;
-
-        disposed = true;
-    }
-
-    /**
-     * Checks whether the recyclable has been disposed.
-     *
-     * @return true, if the recyclable is disposed.
-     */
-    public boolean isDisposed()
-    {
-        return disposed;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/TurbineIntake.java b/src/java/org/apache/turbine/services/intake/TurbineIntake.java
deleted file mode 100644
index 447eed9..0000000
--- a/src/java/org/apache/turbine/services/intake/TurbineIntake.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.apache.turbine.services.intake;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.IntrospectionException;
-
-import java.lang.reflect.Method;
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.intake.model.Group;
-
-/**
- * This is a Facade class for IntakeService.
- *
- * This class provides static methods that call related methods of the
- * implementation of the IntakeService used by the System, according to
- * the settings in TurbineResources.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public abstract class TurbineIntake
-{
-    /**
-     * Gets an instance of a named group either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     *
-     * @param groupName the name of the group.
-     * @return a Group instance.
-     * @throws IntakeException if recycling fails.
-     */
-    public static Group getGroup(String groupName)
-            throws IntakeException
-    {
-        if (groupName == null)
-        {
-            throw new IntakeException(
-                    "TurbineIntake.getGroup(groupName) is null");
-        }
-        return getService().getGroup(groupName);
-    }
-
-    /**
-     * Puts a group back to the pool.
-     * @param instance the object instance to recycle.
-     * @throws IntakeException A non existant group was passed
-     */
-    public static void releaseGroup(Group instance)
-            throws IntakeException
-    {
-        getService().releaseGroup(instance);
-    }
-
-    /**
-     * Gets the current size of the pool for a named group.
-     *
-     * @param groupName the name of the group.
-     * @return the current pool size
-     * @throws IntakeException A non existant group was passed
-     */
-    public static int getSize(String groupName)
-            throws IntakeException
-    {
-        return getService().getSize(groupName);
-    }
-
-    /**
-     * Names of all the defined groups.
-     *
-     * @return array of names.
-     */
-    public static String[] getGroupNames()
-    {
-        return getService().getGroupNames();
-    }
-
-    /**
-     * Gets the key (usually a short identifier) for a group.
-     *
-     * @param groupName the name of the group.
-     * @return the the key.
-     */
-    public static String getGroupKey(String groupName)
-    {
-        return getService().getGroupKey(groupName);
-    }
-
-    /**
-     * Gets the group name given its key.
-     *
-     * @param groupKey the key.
-     * @return groupName the name of the group.
-     */
-    public static String getGroupName(String groupKey)
-    {
-        return getService().getGroupName(groupKey);
-    }
-
-    /**
-     * Gets the Method that can be used to set a property.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    public static Method getFieldSetter(String className, String propName)
-            throws IntrospectionException, ClassNotFoundException
-    {
-        return getService().getFieldSetter(className, propName);
-    }
-
-    /**
-     * Gets the Method that can be used to get a property value.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    public static Method getFieldGetter(String className, String propName)
-            throws IntrospectionException, ClassNotFoundException
-    {
-        return getService().getFieldGetter(className, propName);
-    }
-
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a IntakeService implementation instance
-     */
-    private static IntakeService getService()
-    {
-        return (IntakeService) TurbineServices
-                .getInstance().getService(IntakeService.SERVICE_NAME);
-    }
-
-}
-
-
-
-
-
-
-
-
-
-
diff --git a/src/java/org/apache/turbine/services/intake/TurbineIntakeService.java b/src/java/org/apache/turbine/services/intake/TurbineIntakeService.java
deleted file mode 100644
index eb0a094..0000000
--- a/src/java/org/apache/turbine/services/intake/TurbineIntakeService.java
+++ /dev/null
@@ -1,793 +0,0 @@
-package org.apache.turbine.services.intake;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.IntrospectionException;
-import java.beans.PropertyDescriptor;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-
-import java.lang.reflect.Method;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.commons.pool.KeyedObjectPool;
-import org.apache.commons.pool.KeyedPoolableObjectFactory;
-import org.apache.commons.pool.impl.StackKeyedObjectPool;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.intake.model.Group;
-import org.apache.turbine.services.intake.transform.XmlToAppData;
-import org.apache.turbine.services.intake.xmlmodel.AppData;
-import org.apache.turbine.services.intake.xmlmodel.XmlGroup;
-
-/**
- * This service provides access to input processing objects based
- * on an XML specification.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineIntakeService
-        extends TurbineBaseService
-        implements IntakeService
-{
-    /** Map of groupNames -> appData elements */
-    private Map groupNames;
-
-    /** The cache of group names. */
-    private Map groupNameMap;
-
-    /** The cache of group keys. */
-    private Map groupKeyMap;
-
-    /** The cache of property getters. */
-    private Map getterMap;
-
-    /** The cache of property setters. */
-    private Map setterMap;
-
-    /** AppData -> keyed Pools Map */
-    private Map keyedPools;
-
-    /** Used for logging */
-    private static Log log = LogFactory.getLog(TurbineIntakeService.class);
-
-    /**
-     * Constructor. All Components need a public no argument constructor
-     * to be a legal Component.
-     */
-    public TurbineIntakeService()
-    {
-    }
-
-    /**
-     * Called the first time the Service is used.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        Vector defaultXmlPathes = new Vector();
-        defaultXmlPathes.add(XML_PATH_DEFAULT);
-
-        List xmlPathes = getConfiguration()
-                .getList(XML_PATH, defaultXmlPathes);
-
-        Map appDataElements = null;
-
-        String serialDataPath = getConfiguration()
-                .getString(SERIAL_XML, SERIAL_XML_DEFAULT);
-
-        if (!serialDataPath.equalsIgnoreCase("none"))
-        {
-            serialDataPath = Turbine.getRealPath(serialDataPath);
-        }
-        else
-        {
-            serialDataPath = null;
-        }
-
-        log.debug("Path for serializing: " + serialDataPath);
-
-        groupNames = new HashMap();
-        groupKeyMap = new HashMap();
-        groupNameMap = new HashMap();
-        getterMap = new HashMap();
-        setterMap = new HashMap();
-        keyedPools = new HashMap();
-
-        if (xmlPathes == null)
-        {
-            String LOAD_ERROR = "No pathes for XML files were specified. " +
-                    "Check that the property exists in " +
-                    "TurbineResources.props and were loaded.";
-
-            log.error(LOAD_ERROR);
-            throw new InitializationException(LOAD_ERROR);
-        }
-
-        Set xmlFiles = new HashSet();
-
-        long timeStamp = 0;
-
-        for (Iterator it = xmlPathes.iterator(); it.hasNext();)
-        {
-            // Files are webapp.root relative
-            String xmlPath = Turbine.getRealPath((String) it.next());
-            File xmlFile = new File(xmlPath);
-
-            log.debug("Path for XML File: " + xmlFile);
-
-            if (!xmlFile.canRead())
-            {
-                String READ_ERR = "Could not read input file " + xmlPath;
-
-                log.error(READ_ERR);
-                throw new InitializationException(READ_ERR);
-            }
-
-            xmlFiles.add(xmlPath);
-
-            log.debug("Added " + xmlPath + " as File to parse");
-
-            // Get the timestamp of the youngest file to be compared with
-            // a serialized file. If it is younger than the serialized file,
-            // then we have to parse the XML anyway.
-            timeStamp =
-                    (xmlFile.lastModified() > timeStamp) ? xmlFile.lastModified() : timeStamp;
-        }
-
-        Map serializedMap = loadSerialized(serialDataPath, timeStamp);
-
-        if (serializedMap != null)
-        {
-            // Use the serialized data as XML groups. Don't parse.
-            appDataElements = serializedMap;
-            log.debug("Using the serialized map");
-        }
-        else
-        {
-            // Parse all the given XML files
-            appDataElements = new HashMap();
-
-            for (Iterator it = xmlFiles.iterator(); it.hasNext();)
-            {
-                String xmlPath = (String) it.next();
-                AppData appData = null;
-
-                log.debug("Now parsing: " + xmlPath);
-                try
-                {
-                    XmlToAppData xmlApp = new XmlToAppData();
-                    appData = xmlApp.parseFile(xmlPath);
-                }
-                catch (Exception e)
-                {
-                    log.error("Could not parse XML file " + xmlPath, e);
-
-                    throw new InitializationException("Could not parse XML file " +
-                            xmlPath, e);
-                }
-
-                appDataElements.put(appData, xmlPath);
-                log.debug("Saving appData for " + xmlPath);
-            }
-
-            saveSerialized(serialDataPath, appDataElements);
-        }
-
-        try
-        {
-            for (Iterator it = appDataElements.keySet().iterator(); it.hasNext();)
-            {
-                AppData appData = (AppData) it.next();                
-
-                int maxPooledGroups = 0;
-                List glist = appData.getGroups();
-
-                String groupPrefix = appData.getGroupPrefix();
-
-                for (int i = glist.size() - 1; i >= 0; i--)
-                {
-                    XmlGroup g = (XmlGroup) glist.get(i);
-                    String groupName = g.getName();
-
-                    boolean registerUnqualified = registerGroup(groupName, g, appData, true);
-
-                    if (!registerUnqualified)
-                    {
-                        log.info("Ignored redefinition of Group " + groupName
-                                + " or Key " + g.getKey()
-                                + " from " + appDataElements.get(appData));
-                    }
-
-                    if (groupPrefix != null)
-                    {
-                        StringBuffer qualifiedName = new StringBuffer();
-                        qualifiedName.append(groupPrefix)
-                                .append(':')
-                                .append(groupName);
-
-                        // Add the fully qualified group name. Do _not_ check for
-                        // the existence of the key if the unqualified registration succeeded
-                        // (because then it was added by the registerGroup above).
-                        if (!registerGroup(qualifiedName.toString(), g, appData, !registerUnqualified))
-                        {
-                            log.error("Could not register fully qualified name " + qualifiedName
-                                    + ", maybe two XML files have the same prefix. Ignoring it.");
-                        }
-                    }
-
-                    maxPooledGroups =
-                            Math.max(maxPooledGroups,
-                                    Integer.parseInt(g.getPoolCapacity()));
-
-                }
-
-                KeyedPoolableObjectFactory factory =
-                        new Group.GroupFactory(appData);
-                keyedPools.put(appData, new StackKeyedObjectPool(factory, maxPooledGroups));
-            }
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                    "TurbineIntakeService failed to initialize", e);
-        }
-    }
-
-    /**
-     * Called the first time the Service is used.
-     *
-     * @param config A ServletConfig.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config)
-            throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Registers a given group name in the system
-     *
-     * @param groupName The name to register the group under
-     * @param group The XML Group to register in
-     * @param appData The app Data object where the group can be found
-     * @param checkKey Whether to check if the key also exists.
-     *
-     * @return true if successful, false if not
-     */
-    private boolean registerGroup(String groupName, XmlGroup group, AppData appData, boolean checkKey)
-    {
-        if (groupNames.keySet().contains(groupName))
-        {
-            // This name already exists.
-            return false;
-        }
-
-        boolean keyExists = groupNameMap.keySet().contains(group.getKey());
-
-        if (checkKey && keyExists)
-        {
-            // The key for this package is already registered for another group
-            return false;
-        }
-
-        groupNames.put(groupName, appData);
-
-        groupKeyMap.put(groupName, group.getKey());
-
-        if (!keyExists)
-        {
-            // This key does not exist. Add it to the hash.
-            groupNameMap.put(group.getKey(), groupName);
-        }
-
-        List classNames = group.getMapToObjects();
-        for (Iterator iter2 = classNames.iterator(); iter2.hasNext();)
-        {
-            String className = (String) iter2.next();
-            if (!getterMap.containsKey(className))
-            {
-                getterMap.put(className, new HashMap());
-                setterMap.put(className, new HashMap());
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Tries to load a serialized Intake Group file. This
-     * can reduce the startup time of Turbine.
-     *
-     * @param serialDataPath The path of the File to load.
-     *
-     * @return A map with appData objects loaded from the file
-     *          or null if the map could not be loaded.
-     */
-    private Map loadSerialized(String serialDataPath, long timeStamp)
-    {
-        log.debug("Entered loadSerialized("
-                + serialDataPath + ", "
-                + timeStamp + ")");
-
-        if (serialDataPath == null)
-        {
-            return null;
-        }
-
-        File serialDataFile = new File(serialDataPath);
-
-        if (!serialDataFile.exists())
-        {
-            log.info("No serialized file found, parsing XML");
-            return null;
-        }
-
-        if (serialDataFile.lastModified() <= timeStamp)
-        {
-            log.info("serialized file too old, parsing XML");
-            return null;
-        }
-
-        InputStream in = null;
-        Map serialData = null;
-
-        try
-        {
-            in = new FileInputStream(serialDataFile);
-            ObjectInputStream p = new ObjectInputStream(in);
-            Object o = p.readObject();
-
-            if (o instanceof Map)
-            {
-                serialData = (Map) o;
-            }
-            else
-            {
-                // Maybe an old file from intake. Ignore it and try to delete
-                log.info("serialized object is not an intake map, ignoring");
-                in.close();
-                in = null;
-                serialDataFile.delete(); // Try to delete the file lying around
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Serialized File could not be read.", e);
-
-            // We got a corrupt file for some reason.
-            // Null out serialData to be sure
-            serialData = null;
-        }
-        finally
-        {
-            // Could be null if we opened a file, didn't find it to be a
-            // Map object and then nuked it away.
-            try
-            {
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Exception while closing file", e);
-            }
-        }
-
-        log.info("Loaded serialized map object, ignoring XML");
-        return serialData;
-    }
-
-    /**
-     * Writes a parsed XML map with all the appData groups into a
-     * file. This will speed up loading time when you restart the
-     * Intake Service because it will only unserialize this file instead
-     * of reloading all of the XML files
-     *
-     * @param serialDataPath  The path of the file to write to
-     * @param appDataElements A Map containing all of the XML parsed appdata elements
-     */
-    private void saveSerialized(String serialDataPath, Map appDataElements)
-    {
-
-        log.debug("Entered saveSerialized("
-                + serialDataPath + ", appDataElements)");
-
-        if (serialDataPath == null)
-        {
-            return;
-        }
-
-        File serialData = new File(serialDataPath);
-
-        try
-        {
-            serialData.createNewFile();
-            serialData.delete();
-        }
-        catch (Exception e)
-        {
-            log.info("Could not create serialized file " + serialDataPath
-                    + ", not serializing the XML data");
-            return;
-        }
-
-        OutputStream out = null;
-        InputStream in = null;
-
-        try
-        {
-            // write the appData file out
-            out = new FileOutputStream(serialDataPath);
-            ObjectOutputStream pout = new ObjectOutputStream(out);
-            pout.writeObject(appDataElements);
-            pout.flush();
-
-            // read the file back in. for some reason on OSX 10.1
-            // this is necessary.
-            in = new FileInputStream(serialDataPath);
-            ObjectInputStream pin = new ObjectInputStream(in);
-            Map dummy = (Map) pin.readObject();
-
-            log.debug("Serializing successful");
-        }
-        catch (Exception e)
-        {
-            log.info("Could not write serialized file to " + serialDataPath
-                    + ", not serializing the XML data");
-        }
-        finally
-        {
-            try
-            {
-                if (out != null)
-                {
-                    out.close();
-                }
-                if (in != null)
-                {
-                    in.close();
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Exception while closing file", e);
-            }
-        }
-    }
-
-    /**
-     * Gets an instance of a named group either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     *
-     * @param groupName the name of the group.
-     * @return a Group instance.
-     * @throws IntakeException if recycling fails.
-     */
-    public Group getGroup(String groupName)
-            throws IntakeException
-    {
-        Group group = null;
-
-        AppData appData = (AppData) groupNames.get(groupName);
-
-        if (groupName == null)
-        {
-            throw new IntakeException(
-                    "Intake TurbineIntakeService.getGroup(groupName) is null");
-        }
-        if (appData == null)
-        {
-            throw new IntakeException(
-                    "Intake TurbineIntakeService.getGroup(groupName): No XML definition for Group "
-                    + groupName + " found");
-        }
-        try
-        {
-            group = (Group) ((KeyedObjectPool) keyedPools.get(appData)).borrowObject(groupName);
-        }
-        catch (Exception e)
-        {
-            throw new IntakeException("Could not get group " + groupName, e);
-        }
-        return group;
-    }
-
-    /**
-     * Puts a Group back to the pool.
-     *
-     * @param instance the object instance to recycle.
-     *
-     * @throws IntakeException The passed group name does not exist.
-     */
-    public void releaseGroup(Group instance)
-            throws IntakeException
-    {
-        if (instance != null)
-        {
-            String groupName = instance.getIntakeGroupName();
-            AppData appData = (AppData) groupNames.get(groupName);
-
-            if (appData == null)
-            {
-                throw new IntakeException(
-                        "Intake TurbineIntakeService.releaseGroup(groupName): "
-                        + "No XML definition for Group " + groupName + " found");
-            }
-
-            try
-            {
-                ((KeyedObjectPool) keyedPools.get(appData)).returnObject(groupName, instance);
-            }
-            catch (Exception e)
-            {
-                new IntakeException("Could not get group " + groupName, e);
-            }
-        }
-    }
-
-    /**
-     * Gets the current size of the pool for a group.
-     *
-     * @param groupName the name of the group.
-     *
-     * @throws IntakeException The passed group name does not exist.
-     */
-    public int getSize(String groupName)
-            throws IntakeException
-    {
-        AppData appData = (AppData) groupNames.get(groupName);
-        if (appData == null)
-        {
-            throw new IntakeException(
-                    "Intake TurbineIntakeService.Size(groupName): No XML definition for Group "
-                    + groupName + " found");
-        }
-
-        KeyedObjectPool kop = (KeyedObjectPool) keyedPools.get(groupName);
-
-        return kop.getNumActive(groupName)
-                + kop.getNumIdle(groupName);
-    }
-
-    /**
-     * Names of all the defined groups.
-     *
-     * @return array of names.
-     */
-    public String[] getGroupNames()
-    {
-        return (String[]) groupNames.keySet().toArray(new String[0]);
-    }
-
-    /**
-     * Gets the key (usually a short identifier) for a group.
-     *
-     * @param groupName the name of the group.
-     * @return the the key.
-     */
-    public String getGroupKey(String groupName)
-    {
-        return (String) groupKeyMap.get(groupName);
-    }
-
-    /**
-     * Gets the group name given its key.
-     *
-     * @param groupKey the key.
-     * @return groupName the name of the group.
-     */
-    public String getGroupName(String groupKey)
-    {
-        return (String) groupNameMap.get(groupKey);
-    }
-
-    /**
-     * Gets the Method that can be used to set a property.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the setter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    public Method getFieldSetter(String className, String propName)
-            throws ClassNotFoundException, IntrospectionException
-    {
-        Map settersForClassName = (Map) setterMap.get(className);
-
-        if (settersForClassName == null)
-        {
-            throw new IntrospectionException("No setter Map for " + className + " available!");
-        }
-
-        Method setter = (Method) settersForClassName.get(propName);
-
-        if (setter == null)
-        {
-            PropertyDescriptor pd =
-                    new PropertyDescriptor(propName,
-                            Class.forName(className));
-            synchronized (setterMap)
-            {
-                setter = pd.getWriteMethod();
-                settersForClassName.put(propName, setter);
-                if (setter == null)
-                {
-                    log.error("Intake: setter for '" + propName
-                            + "' in class '" + className
-                            + "' could not be found.");
-                }
-            }
-            // we have already completed the reflection on the getter, so
-            // save it so we do not have to repeat
-            synchronized (getterMap)
-            {
-                Map gettersForClassName = (Map) getterMap.get(className);
-
-                if (gettersForClassName != null)
-                {
-                    try
-                    {
-                        Method getter = pd.getReadMethod();
-                        if (getter != null)
-                        {
-                            gettersForClassName.put(propName, getter);
-                        }
-                    }
-                    catch (Exception e)
-                    {
-                        // Do nothing
-                    }
-                }
-            }
-        }
-        return setter;
-    }
-
-    /**
-     * Gets the Method that can be used to get a property value.
-     *
-     * @param className the name of the object.
-     * @param propName the name of the property.
-     * @return the getter.
-     * @throws ClassNotFoundException
-     * @throws IntrospectionException
-     */
-    public Method getFieldGetter(String className, String propName)
-            throws ClassNotFoundException, IntrospectionException
-    {
-        Map gettersForClassName = (Map) getterMap.get(className);
-
-        if (gettersForClassName == null)
-        {
-            throw new IntrospectionException("No getter Map for " + className + " available!");
-        }
-
-        Method getter = (Method) gettersForClassName.get(propName);
-
-        if (getter == null)
-        {
-            PropertyDescriptor pd = null;
-            synchronized (getterMap)
-            {
-                pd = new PropertyDescriptor(propName,
-                        Class.forName(className));
-                getter = pd.getReadMethod();
-                gettersForClassName.put(propName, getter);
-                if (getter == null)
-                {
-                    log.error("Intake: getter for '" + propName
-                            + "' in class '" + className
-                            + "' could not be found.");
-                }
-            }
-            // we have already completed the reflection on the setter, so
-            // save it so we do not have to repeat
-            synchronized (setterMap)
-            {
-                Map settersForClassName = (Map) getterMap.get(className);
-
-                if (settersForClassName != null)
-                {
-                    try
-                    {
-                        Method setter = pd.getWriteMethod();
-                        if (setter != null)
-                        {
-                            settersForClassName.put(propName, setter);
-                        }
-                    }
-                    catch (Exception e)
-                    {
-                        // Do nothing
-                    }
-                }
-            }
-        }
-        return getter;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java b/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java
deleted file mode 100644
index 8000eb6..0000000
--- a/src/java/org/apache/turbine/services/intake/model/BigDecimalField.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.math.BigDecimal;
-
-import java.text.DecimalFormatSymbols;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.BigDecimalValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class BigDecimalField
-        extends Field
-{
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public BigDecimalField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for a BigDecimal field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new BigDecimal(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new BigDecimal(prop);
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return BigDecimalValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            BigDecimal[] values = new BigDecimal[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? canonicalizeDecimalInput(inputs[i]) : (BigDecimal) getEmptyValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) ? canonicalizeDecimalInput(val) : (BigDecimal) getEmptyValue());
-        }
-    }
-
-    /**
-     * Canonicalizes an user-inputted <code>BigDecimal</code> string
-     * to the system's internal format.
-     *
-     * @param bigDecimal Text conforming to a <code>BigDecimal</code>
-     * description for a set of <code>DecimalFormatSymbols</code>.
-     * @return The canonicalized representation.
-     */
-    protected final BigDecimal canonicalizeDecimalInput(String bigDecimal)
-    {
-        if (getLocale() != null)
-        {
-            DecimalFormatSymbols internal = new DecimalFormatSymbols();
-            DecimalFormatSymbols user = new DecimalFormatSymbols(getLocale());
-
-            if (!internal.equals(user))
-            {
-                bigDecimal = bigDecimal.replace(user.getDecimalSeparator(),
-                        internal.getDecimalSeparator());
-            }
-        }
-        return new BigDecimal(bigDecimal);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/BooleanField.java b/src/java/org/apache/turbine/services/intake/model/BooleanField.java
deleted file mode 100644
index bd05fb4..0000000
--- a/src/java/org/apache/turbine/services/intake/model/BooleanField.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.ParseException;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.BooleanValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Processor for boolean fields.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @version $Id$
- */
-public class BooleanField
-        extends Field
-{
-    public BooleanField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for a Boolean field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Boolean(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Boolean(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new boolean[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) ? Boolean.FALSE : getEmptyValue();
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return class name of the validator
-     */
-    protected String getDefaultValidator()
-    {
-        return BooleanValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            boolean[] values = new boolean[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? getBoolean(inputs[i]).booleanValue() 
-                        : ((Boolean) getEmptyValue()).booleanValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) ? getBoolean(val) : (Boolean) getEmptyValue());
-        }
-    }
-
-    /**
-     * Parses a string into a Boolean object.  If the field has a validator
-     * and the validator is an instance of BooleanValidator, the parse()
-     * method is used to convert the string into the Boolean.  Otherwise,
-     * the string value is passed to the constructor to the Boolean
-     * object.
-     *
-     * @param stringValue string to parse
-     * @return a <code>Boolean</code> object
-     */
-    private Boolean getBoolean(String stringValue)
-    {
-        Boolean result = null;
-
-        if (validator != null && validator instanceof BooleanValidator)
-        {
-            BooleanValidator bValidator = (BooleanValidator) validator;
-            try
-            {
-                result = bValidator.parse(stringValue);
-            }
-            catch (ParseException e)
-            {
-                // do nothing.  This should never be thrown since this method will not be
-                // executed unless the Validator has already been able to parse the
-                // string value
-            }
-        }
-        else
-        {
-            result = new Boolean(stringValue);
-        }
-
-        return result;
-    }
-
-    /**
-     * Gets the boolean value of the field.  A value of false will be returned
-     * if the value of the field is null.
-     *
-     * @return value of the field.
-     */
-    public boolean booleanValue()
-    {
-        boolean result = false;
-        try
-        {
-            result = ((Boolean) getValue()).booleanValue();
-        }
-        catch (Exception e)
-        {
-            log.error(e);
-        }
-        return result;
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/DateStringField.java b/src/java/org/apache/turbine/services/intake/model/DateStringField.java
deleted file mode 100644
index 2aae853..0000000
--- a/src/java/org/apache/turbine/services/intake/model/DateStringField.java
+++ /dev/null
@@ -1,257 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.DateFormat;
-import java.text.ParseException;
-
-import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.DateStringValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-import org.apache.turbine.util.TurbineRuntimeException;
-
-/**
- * Field for date inputs as free form text.  The parsing of date strings
- * is dependent on any rules that are defined, so this field will expect that
- * any validator will be (or extend) DateStringValidator.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class DateStringField
-        extends Field
-{
-    /** date format */
-    private DateFormat df = null;
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public DateStringField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-
-        if (validator == null || !(validator instanceof DateStringValidator))
-        {
-            df = DateFormat.getInstance();
-            df.setLenient(true);
-        }
-    }
-
-    /**
-     * Sets the default value for a DateString field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        try
-        {
-            defaultValue = getDate(prop);
-        }
-        catch (ParseException e)
-        {
-            throw new TurbineRuntimeException("Could not parse " + prop
-                    + " into a valid Date for the default value", e);
-        }
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        try
-        {
-            emptyValue = getDate(prop);
-        }
-        catch (ParseException e)
-        {
-            throw new TurbineRuntimeException("Could not parse " + prop
-                    + " into a valid Date for the empty value", e);
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return "DateStringValidator"
-     */
-    protected String getDefaultValidator()
-    {
-        return DateStringValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            Date[] values = new Date[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                try
-                {
-                    values[i] = StringUtils.isNotEmpty(inputs[i])
-                            ? getDate(inputs[i]) : (Date) getEmptyValue();
-                }
-                catch (ParseException e)
-                {
-                    values[i] = null;
-                }
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            try
-            {
-                setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : (Date) getEmptyValue());
-            }
-            catch (ParseException e)
-            {
-                setTestValue(null);
-            }
-        }
-    }
-
-    /**
-     * Parses a test date string using the Validator if is exists and
-     * is an instance of DateStringValidator.  Otherwise, DateFormat.parse()
-     * is used.
-     *
-     * @param dateString The string date to parse
-     * @return A <code>Date</code> object
-     * @throws ParseException The date could not be parsed.
-     */
-    private Date getDate(String dateString)
-            throws ParseException
-    {
-        Date date = null;
-        // FIXME: Canonicalize user-entered date strings.
-        if (validator != null && validator instanceof DateStringValidator)
-        {
-            date = ((DateStringValidator) validator).parse(dateString);
-        }
-        else
-        {
-            date = df.parse(dateString);
-        }
-        return date;
-    }
-
-    /**
-     * returns a String representation
-     *
-     * @return a String representation
-     */
-    public String toString()
-    {
-        String s = null;
-        Object value = getValue();
-        if (value == null)
-        {
-            s = "";
-        }
-        else if (value instanceof String)
-        {
-            s = (String) value;
-        }
-        else if (validator != null && validator instanceof DateStringValidator)
-        {
-            s = ((DateStringValidator) validator).format((Date) value);
-        }
-        else
-        {
-            s = df.format((Date) value);
-        }
-        return s;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/DoubleField.java b/src/java/org/apache/turbine/services/intake/model/DoubleField.java
deleted file mode 100644
index a4bc4b9..0000000
--- a/src/java/org/apache/turbine/services/intake/model/DoubleField.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.DoubleValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Creates Double Field objects.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @version $Id$
- */
-public class DoubleField
-        extends Field
-{
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public DoubleField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for a Double Field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Double(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Double(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new double[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) 
-                    ? new Double(0.0) : getEmptyValue();
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return DoubleValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            double[] values = new double[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? new Double(inputs[i]).doubleValue() 
-                        : ((Double) getEmptyValue()).doubleValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) 
-                    ? new Double(val) : (Double) getEmptyValue());
-        }
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/Field.java b/src/java/org/apache/turbine/services/intake/model/Field.java
deleted file mode 100644
index f7db45f..0000000
--- a/src/java/org/apache/turbine/services/intake/model/Field.java
+++ /dev/null
@@ -1,1032 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import java.util.Locale;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.localization.Localization;
-
-import org.apache.turbine.om.Retrievable;
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.TurbineIntake;
-import org.apache.turbine.services.intake.validator.DefaultValidator;
-import org.apache.turbine.services.intake.validator.InitableByConstraintMap;
-import org.apache.turbine.services.intake.validator.ValidationException;
-import org.apache.turbine.services.intake.validator.Validator;
-import org.apache.turbine.services.intake.xmlmodel.Rule;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-import org.apache.turbine.util.SystemError;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.parser.ValueParser;
-
-/**
- * Base class for Intake generated input processing classes.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:dlr@finemaltcoding.com>Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public abstract class Field
-{
-    /** Empty Value */
-    private static final String EMPTY = "";
-
-    /** CGI Key for "value if absent" */
-    private static final String VALUE_IF_ABSENT_KEY = "_vifa_";
-
-    /** Default Package */
-    public static final String defaultFieldPackage = "org.apache.turbine.services.intake.validator.";
-
-    // the following are set from the xml file and are permanent (final)
-
-    /** Name of the field. */
-    protected final String name;
-
-    /** Key used to identify the field in the parser */
-    protected final String key;
-
-    /** Display name of the field to be used on data entry forms... */
-    protected String displayName;
-
-    /** Class name of the object to which the field is mapped */
-    protected final String mapToObject;
-
-    /** Used to validate the contents of the field */
-    protected Validator validator;
-
-    /** Getter method in the mapped object used to populate the field */
-    protected final Method getter;
-
-    /** Setter method in the mapped object used to store the value of field */
-    protected final Method setter;
-
-    /** Error message set on the field if required and not set by parser */
-    protected String ifRequiredMessage;
-
-    /** Does this field accept multiple values? */
-    protected final boolean isMultiValued;
-
-    /** Group to which the field belongs */
-    protected final Group group;
-
-    /** Is this field always required?  This is only set through the XML file */
-    protected boolean alwaysRequired;
-
-    /**
-     * Value of the field if an error occurs while getting
-     * the value from the mapped object
-     */
-    protected Object onError;
-
-    /** Default value of the field */
-    protected Object defaultValue;
-
-    /** Value of the field to use if the mapped parameter is empty or non-existant */
-    protected Object emptyValue;
-
-    /** Display size of the field */
-    private String displaySize;
-
-    /** Max size of the field */
-    private String maxSize;
-
-    // these are reset when the Field is returned to the pool
-
-    /** Has the field has been set from the parser? */
-    protected boolean setFlag;
-
-    /** Has the field passed the validation test? */
-    protected boolean validFlag;
-
-    /** Does the field require a value? */
-    protected boolean required;
-
-    /** Has the field has been set from the parser? */
-    protected boolean initialized;
-
-    /** Error message, is any, resulting from validation */
-    protected String message;
-
-    /** Mapped object used to set the initial field value */
-    protected Retrievable retrievable;
-
-    private Locale locale;
-    /** String value of the field */
-    private String stringValue;
-    /** String valuess of the field if isMultiValued=true */
-    private String[] stringValues;
-    /** Stores the value of the field from the Retrievable object */
-    private Object validValue;
-    /** Stores the value of the field from the parser */
-    private Object testValue;
-    /** Used to pass testValue to the setter mathod through reflection */
-    private Object[] valArray;
-    /** The object containing the field data. */
-    protected ValueParser parser;
-
-    /** Logging */
-    protected Log log = LogFactory.getLog(this.getClass());
-    protected boolean isDebugEnabled = false;
-
-    /**
-     * Constructs a field based on data in the xml specification
-     * and assigns it to a Group.
-     *
-     * @param field a <code>XmlField</code> value
-     * @param group a <code>Group</code> value
-     * @throws IntakeException indicates the validator was not valid or
-     * could not be loaded.
-     * @throws SystemError only occurs is the Validation object does not
-     * extend InitableByConstraintMap
-     */
-    public Field(XmlField field, Group group) throws IntakeException
-    {
-        isDebugEnabled = log.isDebugEnabled();
-
-        this.group = group;
-        key = field.getKey();
-        name = field.getName();
-        displayName = field.getDisplayName();
-        displaySize = field.getDisplaySize();
-        isMultiValued = field.isMultiValued();
-
-        try
-        {
-            setDefaultValue(field.getDefaultValue());
-        }
-        catch (RuntimeException e)
-        {
-            log.error("Could not set default value of " +
-                    this.getDisplayName() + " to "
-                    + field.getDefaultValue(), e);
-        }
-
-        try
-        {
-            setEmptyValue(field.getEmptyValue());
-        }
-        catch (RuntimeException e)
-        {
-            log.error("Could not set empty value of " +
-                    this.getDisplayName() + " to "
-                    + field.getEmptyValue(), e);
-        }
-
-        String validatorClassName = field.getValidator();
-        if (validatorClassName == null && field.getRules().size() > 0)
-        {
-            validatorClassName = getDefaultValidator();
-        }
-        else if (validatorClassName != null
-                && validatorClassName.indexOf('.') == -1)
-        {
-            validatorClassName = defaultFieldPackage + validatorClassName;
-        }
-
-        if (validatorClassName != null)
-        {
-            try
-            {
-                validator = (Validator)
-                        Class.forName(validatorClassName).newInstance();
-            }
-            catch (InstantiationException e)
-            {
-                throw new IntakeException(
-                        "Could not create new instance of Validator("
-                        + validatorClassName + ")", e);
-            }
-            catch (IllegalAccessException e)
-            {
-                throw new IntakeException(
-                        "Could not create new instance of Validator("
-                        + validatorClassName + ")", e);
-            }
-            catch (ClassNotFoundException e)
-            {
-                throw new IntakeException(
-                        "Could not load Validator class("
-                        + validatorClassName + ")", e);
-            }
-            // this should always be true for now
-            // (until bean property initialization is implemented)
-            if (validator instanceof InitableByConstraintMap)
-            {
-                ((InitableByConstraintMap) validator).init(field.getRuleMap());
-            }
-            else
-            {
-                throw new SystemError(
-                        "All Validation objects must be subclasses of "
-                        + "InitableByConstraintMap");
-            }
-        }
-
-        // field may have been declared as always required in the xml spec
-        Rule reqRule = (Rule) field.getRuleMap().get("required");
-        if (reqRule != null)
-        {
-            alwaysRequired = new Boolean(reqRule.getValue()).booleanValue();
-            ifRequiredMessage = reqRule.getMessage();
-        }
-
-        Rule maxLengthRule = (Rule) field.getRuleMap().get("maxLength");
-        if (maxLengthRule != null)
-        {
-            maxSize = maxLengthRule.getValue();
-        }
-
-        // map the getter and setter methods
-        mapToObject = field.getMapToObject();
-        String propName = field.getMapToProperty();
-        Method tmpGetter = null;
-        Method tmpSetter = null;
-        if (StringUtils.isNotEmpty(mapToObject)
-                && StringUtils.isNotEmpty(propName))
-        {
-            try
-            {
-                tmpGetter = TurbineIntake.getFieldGetter(mapToObject, propName);
-            }
-            catch (Exception e)
-            {
-                log.error("IntakeService could not map the getter for field "
-                        + this.getDisplayName() + " in group "
-                        + this.group.getIntakeGroupName()
-                        + " to the property " + propName + " in object "
-                        + mapToObject, e);
-            }
-            try
-            {
-                tmpSetter = TurbineIntake.getFieldSetter(mapToObject, propName);
-            }
-            catch (Exception e)
-            {
-                log.error("IntakeService could not map the setter for field "
-                        + this.getDisplayName() + " in group "
-                        + this.group.getIntakeGroupName()
-                        + " to the property " + propName + " in object "
-                        + mapToObject, e);
-            }
-        }
-        getter = tmpGetter;
-        setter = tmpSetter;
-
-        valArray = new Object[1];
-    }
-
-    /**
-     * Method called when this field (the group it belongs to) is
-     * pulled from the pool.  The request data is searched to determine
-     * if a value has been supplied for this field.  If so, the value
-     * is validated.
-     *
-     * @param pp a <code>ValueParser</code> value
-     * @return a <code>Field</code> value
-     * @throws IntakeException this exception is only thrown by subclasses
-     * overriding this implementation.
-     */
-    public Field init(ValueParser pp)
-            throws IntakeException
-    {
-        this.parser = pp;
-        validFlag = true;
-
-        // If the parser is for a HTTP request, use the request it's
-        // associated with to grok the locale.
-        
-        if (Localization.isInitialized())
-        {
-            if (pp instanceof ParameterParser)
-            {
-                this.locale = Localization.getLocale
-                        (((ParameterParser) pp).getRequest());
-            }
-            else
-            {
-                this.locale = Localization.getLocale((String) null);
-            }
-        }
-
-        if (pp.containsKey(getKey()))
-        {
-            if (isDebugEnabled)
-            {
-                log.debug(name + ": Found our Key in the request, setting Value");
-            }
-            if (StringUtils.isNotEmpty(pp.getString(getKey())))
-            {
-                setFlag = true;
-            }
-            validate();
-        }
-        else if (pp.containsKey(getValueIfAbsent()) &&
-                pp.getString(getValueIfAbsent()) != null)
-        {
-            pp.add(getKey(), pp.getString(getValueIfAbsent()));
-            setFlag = true;
-            validate();
-        }
-
-        initialized = true;
-        return this;
-    }
-
-    /**
-     * Method called when this field or the group it belongs to is
-     * pulled from the pool.  The retrievable object can provide
-     * a default value for the field, or using setProperty the field's
-     * value can be transferred to the retrievable.
-     *
-     * @param obj a <code>Retrievable</code> value
-     * @return a <code>Field</code> value
-     */
-    public Field init(Retrievable obj)
-    {
-        if (!initialized)
-        {
-            validFlag = true;
-        }
-        retrievable = obj;
-        return this;
-    }
-
-    /**
-     * Returns the <code>Locale</code> used when localizing data for
-     * this field, or <code>null</code> if unknown.
-     *
-     * @return Where to localize for.
-     */
-    protected Locale getLocale()
-    {
-        return locale;
-    }
-
-    /**
-     * Produces the fully qualified class name of the default validator.
-     *
-     * @return class name of the default validator
-     */
-    protected String getDefaultValidator()
-    {
-        return DefaultValidator.class.getName();
-    }
-
-    /**
-     * Gets the Validator object for this field.
-     * @return a <code>Validator</code> object
-     */
-    public Validator getValidator()
-    {
-        return validator;
-    }
-
-    /**
-     * Flag to determine whether the field has been declared as required.
-     *
-     * @return value of required.
-     */
-    public boolean isRequired()
-    {
-        return alwaysRequired || required;
-    }
-
-    /**
-     * Set whether this field is required to have a value.  If the field
-     * is already required due to a setting in the XML file, this method
-     * can not set it to false.
-     *
-     * @param v  Value to assign to required.
-     */
-    public void setRequired(boolean v)
-    {
-        setRequired(v, ifRequiredMessage);
-    }
-
-    /**
-     * Set the value of required.
-     *
-     * @param v a <code>boolean</code> value
-     * @param message override the value from intake.xml
-     */
-    public void setRequired(boolean v, String message)
-    {
-        this.required = v;
-        if (v && (!setFlag || null == getTestValue()))
-        {
-            validFlag = false;
-            this.message = message;
-        }
-    }
-
-    /**
-     * Removes references to this group and its fields from the
-     * query parameters
-     */
-    public void removeFromRequest()
-    {
-        parser.remove(getKey());
-        parser.remove(getKey()+ VALUE_IF_ABSENT_KEY);
-    }
-
-    /**
-     * Disposes the object after use. The method is called
-     * when the Group is returned to its pool.
-     * if overridden, super.dispose() should be called.
-     */
-    public void dispose()
-    {
-        parser = null;
-        initialized = false;
-        setFlag = false;
-        validFlag = false;
-        required = false;
-        message = null;
-        retrievable = null;
-
-        locale = null;
-        stringValue = null;
-        stringValues = null;
-        validValue = null;
-        testValue = null;
-        valArray[0] = null;
-    }
-
-    /**
-     * Get the key used to identify the field.
-     *
-     * @return the query data key.
-     */
-    public String getKey()
-    {
-        return (group == null) ? key : group.getObjectKey() + key;
-    }
-
-    /**
-     * Use in a hidden field assign a default value in the event the
-     * field is absent from the query parameters.  Used to track checkboxes,
-     * since they only show up if checked.
-     */
-    public String getValueIfAbsent()
-    {
-        return getKey() + VALUE_IF_ABSENT_KEY;
-    }
-
-    /**
-     * Flag set to true, if the test value met the constraints.
-     * Is also true, in the case the test value was not set,
-     * unless this field has been marked as required.
-     *
-     * @return a <code>boolean</code> value
-     */
-    public boolean isValid()
-    {
-        return validFlag;
-    }
-
-    /**
-     * Flag set to true, if the test value has been set to
-     * anything other than an empty value.
-     *
-     * @return a <code>boolean</code> value
-     */
-    public boolean isSet()
-    {
-        return setFlag;
-    }
-
-    /**
-     * Get the display name of the field. Useful for building
-     * data entry forms. Returns name of field if no display
-     * name has been assigned to the field by xml input file.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getDisplayName()
-    {
-        return (displayName == null) ? name : displayName;
-    }
-
-    /**
-     * Set the display name of the field. Display names are
-     * used in building data entry forms and serve as a
-     * user friendly description of the data contained in
-     * the field.
-     */
-    public void setDisplayName(String newDisplayName)
-    {
-        displayName = newDisplayName;
-    }
-
-    /**
-     * Get any error message resulting from invalid input.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getMessage()
-    {
-        return (message == null) ? EMPTY : message;
-    }
-
-    /**
-     * Sets an error message.  The field is also marked as invalid.
-     */
-    public void setMessage(String message)
-    {
-        this.message = message;
-        validFlag = false;
-    }
-
-    /**
-     * @deprecated Call validate() instead (with no parameters).
-     */
-    protected boolean validate(ValueParser pp)
-    {
-        return validate();
-    }
-
-    /**
-     * Compares request data with constraints and sets the valid flag.
-     */
-    protected boolean validate()
-    {
-        log.debug(name + ": validate()");
-
-        if (isMultiValued)
-        {
-            stringValues = parser.getStrings(getKey());
-
-            if (isDebugEnabled)
-            {
-                log.debug(name + ": Multi-Valued");
-                for (int i = 0; i < stringValues.length; i++)
-                {
-                    log.debug(name + ": " + i + ". Wert: " + stringValues[i]);
-                }
-            }
-
-            
-            if (validator != null)
-            {
-                // set the test value as a String[] which might be replaced by
-                // the correct type if the input is valid.
-                setTestValue(parser.getStrings(getKey()));
-                for (int i = 0; i < stringValues.length; i++)
-                {
-                    try
-                    {
-                        validator.assertValidity(stringValues[i]);
-                    }
-                    catch (ValidationException ve)
-                    {
-                        setMessage(ve.getMessage());
-                    }
-                }
-            }
-
-            if (validFlag)
-            {
-                doSetValue();
-            }
-        }
-        else
-        {
-            stringValue = parser.getString(getKey());
-
-            if (isDebugEnabled)
-            {
-                log.debug(name + ": Single Valued, Value is " + stringValue);
-            }
-
-            if (validator != null)
-            {
-                // set the test value as a String which might be replaced by
-                // the correct type if the input is valid.
-                setTestValue(parser.getString(getKey()));
-
-                try
-                {
-                    validator.assertValidity(stringValue);
-                    log.debug(name + ": Value is ok");
-                    doSetValue();
-                }
-                catch (ValidationException ve)
-                {
-                    log.debug(name + ": Value failed validation!");
-                    setMessage(ve.getMessage());
-                }
-            }
-            else
-            {
-                doSetValue();
-            }
-        }
-
-        return validFlag;
-    }
-
-    /**
-     * Set the default Value. This value is used if
-     * Intake should map this field to a new object.
-     *
-     * @param prop The value to use if the field is mapped to a new object.
-     */
-    public abstract void setDefaultValue(String prop);
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public abstract void setEmptyValue(String prop);
-
-    /**
-     * @deprecated Use doSetValue() instead (with no parameters).
-     */
-    protected void doSetValue(ValueParser pp)
-    {
-        doSetValue();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected abstract void doSetValue();
-
-    /**
-     * Set the value used as a default, in the event the field
-     * has not been set yet.
-     *
-     * @param obj an <code>Object</code> value
-     */
-    void setInitialValue(Object obj)
-    {
-        validValue = obj;
-    }
-
-    /**
-     * Get the value used as a default.  If the initial value has
-     * not been set and a <code>Retrievable</code> object has
-     * been associated with this field, the objects property will
-     * be used as the initial value.
-     *
-     * @return an <code>Object</code> value
-     * @exception IntakeException indicates the value could not be
-     * returned from the mapped object
-     */
-    public Object getInitialValue() throws IntakeException
-    {
-        if (validValue == null)
-        {
-            if (retrievable != null)
-            {
-                getProperty(retrievable);
-            }
-            else
-            {
-                getDefault();
-            }
-        }
-        return validValue;
-    }
-
-    /**
-     * Set the value input by a user that will be validated.
-     *
-     * @param obj an <code>Object</code> value
-     */
-    void setTestValue(Object obj)
-    {
-        testValue = obj;
-    }
-
-    /**
-     * Get the value input by a user that will be validated.
-     *
-     * @return an <code>Object</code> value
-     */
-    public Object getTestValue()
-    {
-        return testValue;
-    }
-
-    /**
-     * Get the value of the field.  if a test value has been set, it
-     * will be returned as is, unless it is so badly formed that the
-     * validation could not parse it.  In most cases the test value
-     * is returned even though invalid, so that it can be returned to
-     * the user to make modifications.  If the test value is not set
-     * the initial value is returned.
-     *
-     * @return an <code>Object</code> value
-     */
-    public Object getValue()
-    {
-        Object val = null;
-        try
-        {
-            val = getInitialValue();
-        }
-        catch (IntakeException e)
-        {
-            log.error("Could not get intial value of " + this.getDisplayName() +
-                    " in group " + this.group.getIntakeGroupName(), e);
-        }
-
-        if (getTestValue() != null)
-        {
-            val = getTestValue();
-        }
-
-        if (val == null)
-        {
-            val = onError;
-        }
-        return val;
-    }
-
-    /**
-     * Calls toString() on the object returned by getValue(),
-     * unless null; and then it returns "", the empty String.
-     *
-     * @return a <code>String</code> value
-     */
-    public String toString()
-    {
-        String res = EMPTY;
-
-        if (stringValue != null)
-        {
-            res = stringValue;
-        }
-        else if (getValue() != null)
-        {
-            res = getValue().toString();
-        }
-        return res;
-    }
-
-    /**
-     * Loads the valid value from a bean
-     *
-     * @throws IntakeException indicates a problem during the execution of the
-     * object's getter method
-     */
-    public void getProperty(Object obj)
-            throws IntakeException
-    {
-        try
-        {
-            validValue = getter.invoke(obj, null);
-        }
-        catch (IllegalAccessException e)
-        {
-            throwSetGetException("getter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-        catch (IllegalArgumentException e)
-        {
-            throwSetGetException("getter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-        catch (InvocationTargetException e)
-        {
-            throwSetGetException("getter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-    }
-
-    /**
-     * Loads the default value from the object
-     */
-
-    public void getDefault()
-    {
-        validValue = getDefaultValue();
-    }
-
-    /**
-     * Calls a setter method on obj, if this field has been set.
-     *
-     * @throws IntakeException indicates a problem during the execution of the
-     * object's setter method
-     */
-    public void setProperty(Object obj) throws IntakeException
-    {
-        if (isDebugEnabled)
-        {
-            log.debug(name + ".setProperty(" + obj.getClass().getName() + ")");
-        }
-
-        if (!isValid())
-        {
-            throw new IntakeException(
-                    "Attempted to assign an invalid input.");
-        }
-        if (isSet())
-        {
-            valArray[0] = getTestValue();
-            if (isDebugEnabled)
-            {
-                log.debug(name + ": Property is set, value is " + valArray[0]);
-            }
-        }
-        else
-        {
-            valArray[0] = getSafeEmptyValue();
-            if (isDebugEnabled)
-            {
-                log.debug(name + ": Property is not set, using emptyValue " + valArray[0]);
-            }
-        }
-
-        try
-        {
-            setter.invoke(obj, valArray);
-        }
-        catch (IllegalAccessException e)
-        {
-            throwSetGetException("setter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-        catch (IllegalArgumentException e)
-        {
-            throwSetGetException("setter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-        catch (InvocationTargetException e)
-        {
-            throwSetGetException("setter", obj, this.getDisplayName(),
-                    this.group.getIntakeGroupName(), e);
-        }
-    }
-
-    /**
-     * Used to throw an IntakeException when an error occurs execuing the
-     * get/set method of the mapped persistent object.
-     *
-     * @param type Type of method. (setter/getter)
-     * @param fieldName Name of the field
-     * @param groupName Name of the group
-     * @param e Exception that was thrown
-     * @throws IntakeException New exception with formatted message
-     */
-    private void throwSetGetException(String type, Object obj,
-                                      String fieldName, String groupName,
-                                      Exception e)
-            throws IntakeException
-    {
-        throw new IntakeException("Could not execute " + type
-                + " method for " + fieldName + " in group " + groupName
-                + " on " + obj.getClass().getName(), e);
-
-    }
-
-    /**
-     * Get the default Value
-     *
-     * @return the default value
-     */
-    public Object getDefaultValue()
-    {
-        return defaultValue;
-    }
-
-    /**
-     * Get the Value to use if the field is empty
-     *
-     * @return the value to use if the field is empty.
-     */
-    public Object getEmptyValue()
-    {
-        return emptyValue;
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        return getEmptyValue();
-    }
-
-    /**
-     * Gets the name of the field.
-     *
-     * @return name of the field as specified in the XML file.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Gets the diplay size of the field.  This is useful when
-     * building the HTML input tag.  If no displaySize was set,
-     * an empty string is returned.
-     */
-    public String getDisplaySize()
-    {
-        return (StringUtils.isEmpty(displaySize) ? "" : displaySize);
-    }
-
-    /**
-     * Gets the maximum size of the field.  This is useful when
-     * building the HTML input tag.  The maxSize is set with the maxLength
-     * rule.  If this rul was not set, an enmpty string is returned.
-     */
-    public String getMaxSize()
-    {
-        return (StringUtils.isEmpty(maxSize) ? "" : maxSize);
-    }
-
-    /**
-     * Gets the String representation of the Value. This is basically a wrapper
-     * method for the toString method which doesn't seem to show anything on
-     * screen if accessed from Template. Name is also more in line with getValue
-     * method which returns the actual Object.
-     * This is useful for displaying correctly formatted data such as dates,
-     * such as 18/11/1968 instead of the toString dump of a Date Object.
-     *
-     * @return the String Value
-     */
-    public String getStringValue()
-    {
-        return this.toString();   
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/FieldFactory.java b/src/java/org/apache/turbine/services/intake/model/FieldFactory.java
deleted file mode 100644
index 0101c08..0000000
--- a/src/java/org/apache/turbine/services/intake/model/FieldFactory.java
+++ /dev/null
@@ -1,209 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Creates Field objects.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @version $Id$
- */
-public abstract class FieldFactory
-{
-    private static Map fieldCtors = initFieldCtors();
-
-    private static Map initFieldCtors()
-    {
-        fieldCtors = new HashMap();
-
-        fieldCtors.put("int", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new IntegerField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("boolean", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new BooleanField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("String", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new StringField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("BigDecimal", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new BigDecimalField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("FileItem", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new FileItemField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("DateString", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new DateStringField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("float", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new FloatField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("double", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new DoubleField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("short", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new ShortField(f, g);
-            }
-        }
-        );
-        fieldCtors.put("long", new FieldFactory.FieldCtor()
-        {
-            public Field getInstance(XmlField f, Group g)
-                    throws IntakeException
-            {
-                return new LongField(f, g);
-            }
-        }
-        );
-        return fieldCtors;
-    }
-
-    private static abstract class FieldCtor
-    {
-        public Field getInstance(XmlField f, Group g) throws IntakeException
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Creates a Field object appropriate for the type specified
-     * in the xml file.
-     *
-     * @param xmlField a <code>XmlField</code> value
-     * @return a <code>Field</code> value
-     * @throws IntakeException indicates that an unknown type was specified for a field.
-     */
-    public static final Field getInstance(XmlField xmlField, Group xmlGroup)
-            throws IntakeException
-    {
-        FieldCtor fieldCtor = null;
-        Field field = null;
-        String type = xmlField.getType();
-
-        fieldCtor = (FieldCtor) fieldCtors.get(type);
-        if (fieldCtor == null)
-        {
-            throw new IntakeException("An Unsupported type has been specified for " +
-                    xmlField.getName() + " in group " + xmlGroup.getIntakeGroupName() + " type = " + type);
-        }
-        else
-        {
-            field = fieldCtor.getInstance(xmlField, xmlGroup);
-        }
-
-        return field;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/FileItemField.java b/src/java/org/apache/turbine/services/intake/model/FileItemField.java
deleted file mode 100644
index a39c81c..0000000
--- a/src/java/org/apache/turbine/services/intake/model/FileItemField.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.fileupload.FileItem;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.FileValidator;
-import org.apache.turbine.services.intake.validator.ValidationException;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-import org.apache.turbine.util.TurbineRuntimeException;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.parser.ValueParser;
-
-/**
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class FileItemField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public FileItemField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * It is not possible to set the default value for this field type.
-     * Calling this method with a non-null parameter will result in a
-     * TurbineRuntimeException
-     *
-     * @param prop Parameter for the default values
-     * @throws TurbineRuntimeException
-     */
-    public void setDefaultValue(String prop)
-    {
-        if (prop != null)
-        {
-            throw new TurbineRuntimeException(
-                    "Default values are not valid for "
-                    + this.getClass().getName());
-        }
-
-        defaultValue = null;
-    }
-
-    /**
-     * It is not possible to set the empty value for this field type.
-     * Calling this method with a non-null parameter will result in a
-     * TurbineRuntimeException
-     *
-     * @param prop Parameter for the empty values
-     * @throws TurbineRuntimeException
-     */
-    public void setEmptyValue(String prop)
-    {
-        if (prop != null)
-        {
-            throw new TurbineRuntimeException(
-                    "Empty values are not valid for "
-                    + this.getClass().getName());
-        }
-
-        emptyValue = null;
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return FileValidator.class.getName();
-    }
-
-    /**
-     * Method called when this field (the group it belongs to) is
-     * pulled from the pool.  The request data is searched to determine
-     * if a value has been supplied for this field.  if so, the value
-     * is validated.
-     *
-     * @param vp a <code>ValueParser</code> value
-     * @return a <code>Field</code> value
-     * @exception IntakeException if an error occurs
-     */
-    public Field init(ValueParser vp)
-            throws IntakeException
-    {
-        try
-        {
-            super.parser = (ParameterParser) vp;
-        }
-        catch (ClassCastException e)
-        {
-            throw new IntakeException(
-                    "FileItemFields can only be used with ParameterParser");
-        }
-
-        validFlag = true;
-
-        if (parser.containsKey(getKey()))
-        {
-            setFlag = true;
-            validate();
-        }
-
-        initialized = true;
-        return this;
-    }
-
-    /**
-     * Compares request data with constraints and sets the valid flag.
-     *
-     * @return the valid flag
-     */
-    protected boolean validate()
-    {
-        ParameterParser pp = (ParameterParser) super.parser;
-        if (isMultiValued)
-        {
-            FileItem[] ss = pp.getFileItems(getKey());
-            // this definition of not set might need refined.  But
-            // not sure the situation will arise.
-            if (ss.length == 0)
-            {
-                setFlag = false;
-            }
-
-            if (validator != null)
-            {
-                for (int i = 0; i < ss.length; i++)
-                {
-                    try
-                    {
-                        ((FileValidator) validator).assertValidity(ss[i]);
-                    }
-                    catch (ValidationException ve)
-                    {
-                        setMessage(ve.getMessage());
-                    }
-                }
-            }
-
-            if (setFlag && validFlag)
-            {
-                doSetValue();
-            }
-        }
-        else
-        {
-            FileItem s = pp.getFileItem(getKey());
-            if (s == null || s.getSize() == 0)
-            {
-                setFlag = false;
-            }
-
-            if (validator != null)
-            {
-                try
-                {
-                    ((FileValidator) validator).assertValidity(s);
-
-                    if (setFlag)
-                    {
-                        doSetValue();
-                    }
-                }
-                catch (ValidationException ve)
-                {
-                    setMessage(ve.getMessage());
-                }
-            }
-            else if (setFlag)
-            {
-                doSetValue();
-            }
-        }
-
-        return validFlag;
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        ParameterParser pp = (ParameterParser) super.parser;
-        if (isMultiValued)
-        {
-            setTestValue(pp.getFileItems(getKey()));
-        }
-        else
-        {
-            setTestValue(pp.getFileItem(getKey()));
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/FloatField.java b/src/java/org/apache/turbine/services/intake/model/FloatField.java
deleted file mode 100644
index a82c64f..0000000
--- a/src/java/org/apache/turbine/services/intake/model/FloatField.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.FloatValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Creates Float Field objects.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @version $Id$
- */
-public class FloatField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public FloatField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for an Float Field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Float(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Double(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new float[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) 
-                    ? new Float(0.0) : getEmptyValue();
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return FloatValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            float[] values = new float[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? new Float(inputs[i]).floatValue() 
-                        : ((Float) getEmptyValue()).floatValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) 
-                    ? new Float(val) : getEmptyValue());
-        }
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/Group.java b/src/java/org/apache/turbine/services/intake/model/Group.java
deleted file mode 100644
index c105238..0000000
--- a/src/java/org/apache/turbine/services/intake/model/Group.java
+++ /dev/null
@@ -1,582 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-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.commons.pool.BaseKeyedPoolableObjectFactory;
-
-import org.apache.turbine.om.Retrievable;
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.TurbineIntake;
-import org.apache.turbine.services.intake.xmlmodel.AppData;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-import org.apache.turbine.services.intake.xmlmodel.XmlGroup;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.ValueParser;
-
-/**
- * Holds a group of Fields
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class Group
-{
-    public static final String EMPTY = "";
-
-    /*
-     * An id representing a new object.
-     */
-    public static final String NEW = "_0";
-
-    private static final Log log;
-    private static final boolean isDebugEnabled;
-
-    static
-    {
-        log = LogFactory.getLog(Group.class);
-        isDebugEnabled = log.isDebugEnabled();
-    }
-
-    /**
-     * The key used to represent this group in a parameter.
-     * This key is usually a prefix as part of a field key.
-     */
-    protected final String gid;
-
-    /**
-     * The name used in templates and java code to refer to this group.
-     */
-    protected final String name;
-
-    /**
-     * The number of Groups with the same name that will be pooled.
-     */
-    private final int poolCapacity;
-
-    /**
-     * A map of the fields in this group mapped by field name.
-     */
-    protected Map fields;
-
-    /**
-     * Map of the fields by mapToObject
-     */
-    protected Map mapToObjectFields;
-
-    /**
-     * An array of fields in this group.
-     */
-    protected Field[] fieldsArray;
-
-    /**
-     * The object id used to associate this group to a bean
-     * for one request cycle
-     */
-    protected String oid;
-
-    /**
-     * The object containing the request data
-     */
-    protected ValueParser pp;
-
-    /**
-     * A flag to help prevent duplicate hidden fields declaring this group.
-     */
-    protected boolean isDeclared;
-
-    /**
-     * Constructs a new Group based on the xml specification.  Groups are
-     * instantiated and pooled by the IntakeService and should not
-     * be instantiated otherwise.
-     *
-     * @param group a <code>XmlGroup</code> value
-     * @exception IntakeException if an error occurs in other classes
-     */
-    public Group(XmlGroup group) throws IntakeException
-    {
-        gid = group.getKey();
-        name = group.getName();
-        poolCapacity = Integer.parseInt(group.getPoolCapacity());
-
-        List inputFields = group.getFields();
-        int size = inputFields.size();
-        fields = new HashMap((int) (1.25 * size + 1));
-        mapToObjectFields = new HashMap((int) (1.25 * size + 1));
-        fieldsArray = new Field[size];
-        for (int i = size - 1; i >= 0; i--)
-        {
-            XmlField f = (XmlField) inputFields.get(i);
-            Field field = FieldFactory.getInstance(f, this);
-            fieldsArray[i] = field;
-            fields.put(f.getName(), field);
-
-            // map fields by their mapToObject
-            List tmpFields = (List) mapToObjectFields.get(f.getMapToObject());
-            if (tmpFields == null)
-            {
-                tmpFields = new ArrayList(size);
-                mapToObjectFields.put(f.getMapToObject(), tmpFields);
-            }
-            tmpFields.add(field);
-        }
-
-        // Change the mapToObjectFields values to Field[]
-        for (Iterator keys = mapToObjectFields.keySet().iterator(); keys.hasNext();)
-        {
-            Object key = keys.next();
-            List tmpFields = (List) mapToObjectFields.get(key);
-            mapToObjectFields.put(key,
-                    tmpFields.toArray(new Field[tmpFields.size()]));
-        }
-    }
-
-    /**
-     * Initializes the default Group using parameters.
-     *
-     * @param pp a <code>ValueParser</code> value
-     * @return this Group
-     */
-    public Group init(ValueParser pp) throws TurbineException
-    {
-        return init(NEW, pp);
-    }
-
-    /**
-     * Initializes the Group with parameters from RunData
-     * corresponding to key.
-     *
-     * @param pp a <code>ValueParser</code> value
-     * @return this Group
-     */
-    public Group init(String key, ValueParser pp) throws IntakeException
-    {
-        this.oid = key;
-        this.pp = pp;
-        for (int i = fieldsArray.length - 1; i >= 0; i--)
-        {
-            fieldsArray[i].init(pp);
-        }
-        return this;
-    }
-
-    /**
-     * Initializes the group with properties from an object.
-     *
-     * @param obj a <code>Persistent</code> value
-     * @return a <code>Group</code> value
-     */
-    public Group init(Retrievable obj)
-    {
-        this.oid = obj.getQueryKey();
-
-        Class cls = obj.getClass();
-        while (cls != null)
-        {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
-            if (flds != null)
-            {
-                for (int i = flds.length - 1; i >= 0; i--)
-                {
-                    flds[i].init(obj);
-                }
-            }
-
-            cls = cls.getSuperclass();
-        }
-
-        return this;
-    }
-
-    /**
-     * Gets a list of the names of the fields stored in this object.
-     *
-     * @return A String array containing the list of names.
-     */
-    public String[] getFieldNames()
-    {
-        String nameList[] = new String[fieldsArray.length];
-        for (int i = 0; i < nameList.length; i++)
-        {
-            nameList[i] = fieldsArray[i].name;
-        }
-        return nameList;
-    }
-
-    /**
-     * Return the name given to this group.  The long name is to
-     * avoid conflicts with the get(String key) method.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getIntakeGroupName()
-    {
-        return name;
-    }
-
-    /**
-     * Get the number of Group objects that will be pooled.
-     *
-     * @return an <code>int</code> value
-     */
-    public int getPoolCapacity()
-    {
-        return poolCapacity;
-    }
-
-    /**
-     * Get the part of the key used to specify the group.
-     * This is specified in the key attribute in the xml file.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getGID()
-    {
-        return gid;
-    }
-
-    /**
-     * Get the part of the key that distinguishes a group
-     * from others of the same name.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getOID()
-    {
-        return oid;
-    }
-
-    /**
-     * Concatenation of gid and oid.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getObjectKey()
-    {
-        return gid + oid;
-    }
-
-    /**
-     * Describe <code>getObjects</code> method here.
-     *
-     * @param pp a <code>ValueParser</code> value
-     * @return an <code>ArrayList</code> value
-     * @exception IntakeException if an error occurs
-     */
-    public ArrayList getObjects(ValueParser pp) throws IntakeException
-    {
-        ArrayList objs = null;
-        String[] oids = pp.getStrings(gid);
-        if (oids != null)
-        {
-            objs = new ArrayList(oids.length);
-            for (int i = oids.length - 1; i >= 0; i--)
-            {
-                objs.add(TurbineIntake.getGroup(name).init(oids[i], pp));
-            }
-        }
-        return objs;
-    }
-
-    /**
-     * Get the Field .
-     * @return Field.
-     * @throws IntakeException indicates the field could not be found.
-     */
-    public Field get(String fieldName)
-            throws IntakeException
-    {
-        if (fields.containsKey(fieldName))
-        {
-            return (Field) fields.get(fieldName);
-        }
-        else
-        {
-            throw new IntakeException("Intake Field name: " + fieldName +
-                    " not found!");
-        }
-    }
-
-    /**
-     * Performs an AND between all the fields in this group.
-     *
-     * @return a <code>boolean</code> value
-     */
-    public boolean isAllValid()
-    {
-        boolean valid = true;
-        for (int i = fieldsArray.length - 1; i >= 0; i--)
-        {
-            valid &= fieldsArray[i].isValid();
-            if (isDebugEnabled && !fieldsArray[i].isValid())
-            {
-                log.debug("Group(" + oid + "): " + name + "; Field: "
-                        + fieldsArray[i].name + "; value=" +
-                        fieldsArray[i].getValue() + " is invalid!");
-            }
-        }
-        return valid;
-    }
-
-    /**
-     * Calls a setter methods on obj, for fields which have been set.
-     *
-     * @param obj Object to be set with the values from the group.
-     * @throws IntakeException indicates that a failure occurred while
-     * executing the setter methods of the mapped object.
-     */
-    public void setProperties(Object obj) throws IntakeException
-    {
-        Class cls = obj.getClass();
-
-        while (cls != null)
-        {
-            if (isDebugEnabled)
-            {
-                log.debug("setProperties(" + cls.getName() + ")");
-            }
-
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
-            if (flds != null)
-            {
-                for (int i = flds.length - 1; i >= 0; i--)
-                {
-                    flds[i].setProperty(obj);
-                }
-            }
-
-            cls = cls.getSuperclass();
-        }
-        log.debug("setProperties() finished");
-    }
-
-    /**
-     * Calls a setter methods on obj, for fields which pass validity tests.
-     * In most cases one should call Intake.isAllValid() and then if that
-     * test passes call setProperties.  Use this method when some data is
-     * known to be invalid, but you still want to set the object properties
-     * that are valid.
-     */
-    public void setValidProperties(Object obj)
-    {
-        Class cls = obj.getClass();
-        while (cls != null)
-        {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
-            if (flds != null)
-            {
-                for (int i = flds.length - 1; i >= 0; i--)
-                {
-                    try
-                    {
-                        flds[i].setProperty(obj);
-                    }
-                    catch (Exception e)
-                    {
-                        // just move on to next field
-                    }
-                }
-            }
-
-            cls = cls.getSuperclass();
-        }
-    }
-
-    /**
-     * Calls getter methods on objects that are known to Intake
-     * so that field values in forms can be initialized from
-     * the values contained in the intake tool.
-     *
-     * @param obj Object that will be used to as a source of data for
-     * setting the values of the fields within the group.
-     * @throws IntakeException indicates that a failure occurred while
-     * executing the setter methods of the mapped object.
-     */
-    public void getProperties(Object obj) throws IntakeException
-    {
-        Class cls = obj.getClass();
-        while (cls != null)
-        {
-            Field[] flds = (Field[]) mapToObjectFields.get(cls.getName());
-            if (flds != null)
-            {
-                for (int i = flds.length - 1; i >= 0; i--)
-                {
-                    flds[i].getProperty(obj);
-                }
-            }
-
-            cls = cls.getSuperclass();
-        }
-    }
-
-    /**
-     * Removes references to this group and its fields from the
-     * query parameters
-     */
-    public void removeFromRequest()
-    {
-        if (pp != null)
-        {
-            String[] groups = pp.getStrings(gid);
-            if (groups != null)
-            {
-                pp.remove(gid);
-                for (int i = 0; i < groups.length; i++)
-                {
-                    if (groups[i] != null && !groups[i].equals(oid))
-                    {
-                        pp.add(gid, groups[i]);
-                    }
-                }
-                for (int i = fieldsArray.length - 1; i >= 0; i--)
-                {
-                    fieldsArray[i].removeFromRequest();
-                }
-            }
-        }
-    }
-
-    /**
-     * To be used in the event this group is used within multiple
-     * forms within the same template.
-     */
-    public void resetDeclared()
-    {
-        isDeclared = false;
-    }
-
-    /**
-     * A xhtml valid hidden input field that notifies intake of the
-     * group's presence.
-     *
-     * @return a <code>String</code> value
-     */
-    public String getHtmlFormInput()
-    {
-        StringBuffer sb = new StringBuffer(64);
-        appendHtmlFormInput(sb);
-        return sb.toString();
-    }
-
-    /**
-     * A xhtml valid hidden input field that notifies intake of the
-     * group's presence.
-     */
-    public void appendHtmlFormInput(StringBuffer sb)
-    {
-        if (!isDeclared)
-        {
-            isDeclared = true;
-            sb.append("<input type=\"hidden\" name=\"")
-                    .append(gid)
-                    .append("\" value=\"")
-                    .append(oid)
-                    .append("\"/>\n");
-        }
-    }
-
-    // ********** PoolableObjectFactory implementation ******************
-
-    public static class GroupFactory
-            extends BaseKeyedPoolableObjectFactory
-    {
-        private AppData appData;
-
-        public GroupFactory(AppData appData)
-        {
-            this.appData = appData;
-        }
-
-        /**
-         * Creates an instance that can be returned by the pool.
-         * @return an instance that can be returned by the pool.
-         * @throws IntakeException indicates that the group could not be retreived
-         */
-        public Object makeObject(Object key) throws IntakeException
-        {
-            return new Group(appData.getGroup((String) key));
-        }
-
-        /**
-         * Uninitialize an instance to be returned to the pool.
-         * @param obj the instance to be passivated
-         */
-        public void passivateObject(Object key, Object obj)
-        {
-            Group group = (Group) obj;
-            group.oid = null;
-            group.pp = null;
-            for (int i = group.fieldsArray.length - 1; i >= 0; i--)
-            {
-                group.fieldsArray[i].dispose();
-            }
-            group.isDeclared = false;
-        }
-    }
-}
-
-
diff --git a/src/java/org/apache/turbine/services/intake/model/IntegerField.java b/src/java/org/apache/turbine/services/intake/model/IntegerField.java
deleted file mode 100644
index 1d0a033..0000000
--- a/src/java/org/apache/turbine/services/intake/model/IntegerField.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.IntegerValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Processor for int fields.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- */
-public class IntegerField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public IntegerField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for an Integer Field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Integer(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Integer(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new int[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) 
-                    ? new Integer(0) : getEmptyValue();
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return IntegerValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            int[] values = new int[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? new Integer(inputs[i]).intValue() 
-                        : ((Integer) getEmptyValue()).intValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) ? new Integer(val) : (Integer) getEmptyValue());
-        }
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/LongField.java b/src/java/org/apache/turbine/services/intake/model/LongField.java
deleted file mode 100644
index 9bce590..0000000
--- a/src/java/org/apache/turbine/services/intake/model/LongField.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.LongValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Creates Short Field objects.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public class LongField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public LongField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for an Long Field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Long(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Long(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new long[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) ? new Long(0l) : getEmptyValue();
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return LongValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            Long[] values = new Long[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? new Long(inputs[i]) : (Long) getEmptyValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) ? new Long(val) : (Long) getEmptyValue());
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/ShortField.java b/src/java/org/apache/turbine/services/intake/model/ShortField.java
deleted file mode 100644
index 285095b..0000000
--- a/src/java/org/apache/turbine/services/intake/model/ShortField.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.ShortValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Creates Short Field objects.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @version $Id$
- */
-public class ShortField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public ShortField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Sets the default value for an Short Field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        defaultValue = new Short(prop);
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = null;
-
-        if (prop == null)
-        {
-            return;
-        }
-
-        emptyValue = new Short(prop);
-    }
-
-    /**
-     * Provides access to emptyValue such that the value returned will be 
-     * acceptable as an argument parameter to Method.invoke.  Subclasses
-     * that deal with primitive types should ensure that they return an 
-     * appropriate value wrapped in the object wrapper class for the 
-     * primitive type.
-     *   
-     * @return the value to use when the field is empty or an Object that
-     * wraps the empty value for primitive types.
-     */
-    protected Object getSafeEmptyValue()
-    {
-        if (isMultiValued)
-        {
-            return new short[0];
-        }
-        else
-        {
-            return (null == getEmptyValue()) 
-                    ? new Short((short) 0) : getEmptyValue(); 
-        }
-    }
-
-    /**
-     * A suitable validator.
-     *
-     * @return A suitable validator
-     */
-    protected String getDefaultValidator()
-    {
-        return ShortValidator.class.getName();
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] inputs = parser.getStrings(getKey());
-            short[] values = new short[inputs.length];
-            for (int i = 0; i < inputs.length; i++)
-            {
-                values[i] = StringUtils.isNotEmpty(inputs[i])
-                        ? new Short(inputs[i]).shortValue() 
-                        : ((Short) getEmptyValue()).shortValue();
-            }
-            setTestValue(values);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) 
-                    ? new Short(val) : (Short) getEmptyValue());
-        }
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/services/intake/model/StringField.java b/src/java/org/apache/turbine/services/intake/model/StringField.java
deleted file mode 100644
index 85be9dc..0000000
--- a/src/java/org/apache/turbine/services/intake/model/StringField.java
+++ /dev/null
@@ -1,191 +0,0 @@
-package org.apache.turbine.services.intake.model;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-import org.apache.turbine.services.intake.validator.StringValidator;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-
-/**
- * Text field.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class StringField
-        extends Field
-{
-
-    /**
-     * Constructor.
-     *
-     * @param field xml field definition object
-     * @param group xml group definition object
-     * @throws IntakeException thrown by superclass
-     */
-    public StringField(XmlField field, Group group)
-            throws IntakeException
-    {
-        super(field, group);
-    }
-
-    /**
-     * Produces the fully qualified class name of the default validator.
-     *
-     * @return class name of the default validator
-     */
-    protected String getDefaultValidator()
-    {
-        return StringValidator.class.getName();
-    }
-
-    /**
-     * Sets the default value for a String field
-     *
-     * @param prop Parameter for the default values
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = prop;
-    }
-
-    /**
-     * Set the empty Value. This value is used if Intake
-     * maps a field to a parameter returned by the user and
-     * the corresponding field is either empty (empty string)
-     * or non-existant.
-     *
-     * @param prop The value to use if the field is empty.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = prop;
-    }
-
-    /**
-     * Sets the value of the field from data in the parser.
-     */
-    protected void doSetValue()
-    {
-        if (isMultiValued)
-        {
-            String[] ss = parser.getStrings(getKey());
-            String[] sval = new String[ss.length];
-            for (int i = 0; i < ss.length; i++)
-            {
-                sval[i] = (StringUtils.isNotEmpty(ss[i])) ? ss[i] : (String) getEmptyValue();
-            }
-            setTestValue(sval);
-        }
-        else
-        {
-            String val = parser.getString(getKey());
-            setTestValue(StringUtils.isNotEmpty(val) ? val : (String) getEmptyValue());
-        }
-    }
-
-    /**
-     * Set the value of required.
-     *
-     * @param v  Value to assign to required.
-     * @param message an error message
-     */
-    public void setRequired(boolean v, String message)
-    {
-        this.required = v;
-        if (v)
-        {
-            if (isMultiValued)
-            {
-                String[] ss = (String[]) getTestValue();
-                if (ss == null || ss.length == 0)
-                {
-                    validFlag = false;
-                    this.message = message;
-                }
-                else
-                {
-                    boolean set = false;
-                    for (int i = 0; i < ss.length; i++)
-                    {
-                        set |= StringUtils.isNotEmpty(ss[i]);
-                        if (set)
-                        {
-                            break;
-                        }
-                    }
-                    if (!set)
-                    {
-                        validFlag = false;
-                        this.message = message;
-                    }
-                }
-            }
-            else
-            {
-                if (!setFlag || StringUtils.isEmpty((String) getTestValue()))
-                {
-                    validFlag = false;
-                    this.message = message;
-                }
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/package.html b/src/java/org/apache/turbine/services/intake/package.html
deleted file mode 100644
index 456ac60..0000000
--- a/src/java/org/apache/turbine/services/intake/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The intake service can validate user input from HTML forms.
-<br/>
-This service has been deprecated in favor of the Fulcrum Intake component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-intake">Fulcrum Intake</a>
-<br/>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java b/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java
deleted file mode 100644
index 3a1069c..0000000
--- a/src/java/org/apache/turbine/services/intake/transform/DTDResolver.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.apache.turbine.services.intake.transform;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
-
-/**
- * A resolver to get the database.dtd file for the XML parser from the jar.
- * This does not work with jdk1.3 on linux and OSX, see
- * <a href="http://developer.java.sun.com/developer/bugParade/bugs/4337703.html">
- * Bug 4337703</a>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class DTDResolver implements EntityResolver
-{
-    private static final String WEB_SITE_DTD =
-            "http://jakarta.apache.org/turbine/dtd/intake_2_3.dtd";
-
-    /** InputSource for <code>intake.dtd</code>. */
-    private InputSource intakeDTD = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(DTDResolver.class);
-
-    /**
-     * constructor
-     */
-    public DTDResolver()
-    {
-        try
-        {
-            InputStream dtdStream =
-                    getClass().getResourceAsStream("intake.dtd");
-
-            // getResource was buggy on many systems including Linux,
-            // OSX, and some versions of windows in jdk1.3.
-            // getResourceAsStream works on linux, maybe others?
-            if (dtdStream != null)
-            {
-                intakeDTD = new InputSource(dtdStream);
-            }
-            else
-            {
-                log.warn("Could not located the intake.dtd");
-            }
-        }
-        catch (Exception ex)
-        {
-            log.error("Could not get stream for dtd", ex);
-        }
-    }
-
-    /**
-     * called by the XML parser
-     *
-     * @return an InputSource for the intake.dtd file
-     */
-    public InputSource resolveEntity(String publicId, String systemId)
-    {
-        if (intakeDTD != null && WEB_SITE_DTD.equals(systemId))
-        {
-            String pkg = getClass().getName()
-                    .substring(0, getClass().getName().lastIndexOf("."));
-
-            log.info("Resolver: used intake.dtd from " +
-                    pkg + " package ");
-
-            return intakeDTD;
-        }
-        else if (systemId == null)
-        {
-            log.info("Resolver: used intake.dtd from Jakarta Web site");
-            return getInputSource(WEB_SITE_DTD);
-        }
-        else
-        {
-            log.info("Resolver: used System DTD for " + systemId);
-            return getInputSource(systemId);
-        }
-    }
-
-    /**
-     * Retrieves a XML input source for the specified URL.
-     *
-     * @param urlString The URL of the input source.
-     * @return <code>InputSource</code> for the URL.
-     */
-    private InputSource getInputSource(String urlString)
-    {
-        try
-        {
-            URL url = new URL(urlString);
-            return new InputSource(url.openStream());
-        }
-        catch (IOException ex)
-        {
-            log.error("Could not get InputSource for " + urlString, ex);
-        }
-        return new InputSource();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/transform/XmlToAppData.java b/src/java/org/apache/turbine/services/intake/transform/XmlToAppData.java
deleted file mode 100644
index 494e80d..0000000
--- a/src/java/org/apache/turbine/services/intake/transform/XmlToAppData.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.apache.turbine.services.intake.transform;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-
-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.turbine.services.intake.xmlmodel.AppData;
-import org.apache.turbine.services.intake.xmlmodel.Rule;
-import org.apache.turbine.services.intake.xmlmodel.XmlField;
-import org.apache.turbine.services.intake.xmlmodel.XmlGroup;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * A Class that is used to parse an input
- * xml schema file and creates and AppData java structure.
- * It uses apache Xerces to do the xml parsing.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class XmlToAppData extends DefaultHandler
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(XmlToAppData.class);
-
-    private AppData app;
-    private XmlGroup currGroup;
-    private XmlField currField;
-    private Rule currRule;
-    private String currElement;
-
-    private static SAXParserFactory saxFactory;
-
-    static
-    {
-        saxFactory = SAXParserFactory.newInstance();
-        saxFactory.setValidating(true);
-    }
-
-    /**
-     * Creates a new instance of the Intake XML Parser
-     */
-    public XmlToAppData()
-    {
-        app = new AppData();
-    }
-
-    /**
-     * Parses a XML input file and returns a newly created and
-     * populated AppData structure.
-     *
-     * @param xmlFile The input file to parse.
-     * @return AppData populated by <code>xmlFile</code>.
-     * @throws ParserConfigurationException
-     * @throws SAXException
-     * @throws IOException
-     */
-    public AppData parseFile(String xmlFile)
-            throws ParserConfigurationException, SAXException, IOException
-    {
-        SAXParser parser = saxFactory.newSAXParser();
-
-        FileReader fr = new FileReader(xmlFile);
-        BufferedReader br = new BufferedReader(fr);
-        try
-        {
-            InputSource is = new InputSource(br);
-            parser.parse(is, this);
-        }
-        finally
-        {
-            br.close();
-        }
-
-        return app;
-    }
-
-    /**
-     * EntityResolver implementation. Called by the XML parser
-     *
-     * @return an InputSource for the database.dtd file
-     */
-    public InputSource resolveEntity(String publicId, String systemId)
-    {
-        return new DTDResolver().resolveEntity(publicId, systemId);
-    }
-
-    /**
-     * Handles opening elements of the xml file.
-     */
-    public void startElement(String uri, String localName,
-                             String rawName, Attributes attributes)
-    {
-        currElement = rawName;
-        if (rawName.equals("input-data"))
-        {
-            app.loadFromXML(attributes);
-        }
-        else if (rawName.equals("group"))
-        {
-            currGroup = app.addGroup(attributes);
-        }
-        else if (rawName.equals("field"))
-        {
-            currField = currGroup.addField(attributes);
-        }
-        else if (rawName.equals("rule"))
-        {
-            currRule = currField.addRule(attributes);
-        }
-    }
-
-    /**
-     * Handles the character data, which we are using to specify the
-     * error message.
-     */
-    public void characters(char[] mesgArray, int start, int length)
-    {
-        String cdata = new String(mesgArray, start, length).trim();
-        if ("rule".equals(currElement) && cdata.length() > 0)
-        {
-            currRule.setMessage(cdata);
-        }
-        if ("required-message".equals(currElement) && cdata.length() > 0)
-        {
-            log.warn("The required-message element is deprecated!  " +
-                    "You should update your intake.xml file to use the " +
-                    "'required' rule instead.");
-            currField.setIfRequiredMessage(cdata);
-        }
-    }
-
-    /**
-     * Callback function for the xml parser to give warnings.
-     *
-     * @param spe a <code>SAXParseException</code> value
-     */
-    public void warning(SAXParseException spe)
-    {
-        log.warn("Parser Exception: " +
-                "Line " + spe.getLineNumber() +
-                " Row: " + spe.getColumnNumber() +
-                " Msg: " + spe.getMessage());
-    }
-
-    /**
-     * Callback function for the xml parser to give errors.
-     *
-     * @param spe a <code>SAXParseException</code> value
-     */
-    public void error(SAXParseException spe)
-    {
-        log.error("Parser Exception: " +
-                "Line " + spe.getLineNumber() +
-                " Row: " + spe.getColumnNumber() +
-                " Msg: " + spe.getMessage());
-    }
-
-    /**
-     * Callback function for the xml parser to give fatalErrors.
-     *
-     * @param spe a <code>SAXParseException</code> value
-     */
-    public void fatalError(SAXParseException spe)
-    {
-        log.fatal("Parser Exception: " +
-                "Line " + spe.getLineNumber() +
-                " Row: " + spe.getColumnNumber() +
-                " Msg: " + spe.getMessage());
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java b/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java
deleted file mode 100644
index bb23d6f..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/BigDecimalValidator.java
+++ /dev/null
@@ -1,220 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.math.BigDecimal;
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates BigDecimals with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than BigDecimal minValue</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than BigDecimal maxValue</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class BigDecimalValidator
-        extends NumberValidator
-{
-    private BigDecimal minValue = null;
-    private BigDecimal maxValue = null;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public BigDecimalValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid BigDecimal";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public BigDecimalValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = new BigDecimal(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = new BigDecimal(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            BigDecimal bd = null;
-            try
-            {
-                bd = new BigDecimal(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-
-            if (minValue != null && bd.compareTo(minValue) < 0)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (maxValue != null && bd.compareTo(maxValue) > 0)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public BigDecimal getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(BigDecimal minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public BigDecimal getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(BigDecimal maxValue)
-    {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/BooleanValidator.java b/src/java/org/apache/turbine/services/intake/validator/BooleanValidator.java
deleted file mode 100644
index dff5438..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/BooleanValidator.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.ParseException;
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validator for boolean field types.<br><br>
- *
- * Values are validated by attemting to match the value to
- * a list of strings for true and false values.  The string
- * values are compared without reguard to case.<br>
- *
- * Valid values for Boolean.TRUE:
- * <ul>
- * <li>TRUE</li>
- * <li>T</li>
- * <li>YES</li>
- * <li>Y</li>
- * <li>1</li>
- * </ul>
- * Valid values for Boolean.FALSE:
- * <ul>
- * <li>FALSE</li>
- * <li>F</li>
- * <li>NO</li>
- * <li>N</li>
- * <li>0</li>
- * </ul>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class BooleanValidator
-        extends DefaultValidator
-{
-    /** String values which would evaluate to Boolean.TRUE */
-    private static String[] trueValues = {"TRUE","T","YES","Y","1"};
-
-    /** String values which would evaluate to Boolean.FALSE */
-    private static String[] falseValues = {"FALSE","F","NO","N","0"};
-
-    /**
-     * Default Constructor
-     */
-    public BooleanValidator()
-    {
-    }
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public BooleanValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        super(paramMap);
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            try
-            {
-                parse(testValue);
-            }
-            catch (ParseException e)
-            {
-                throw new ValidationException(e.getMessage());
-            }
-        }
-    }
-
-    /**
-     * Parses a srting value into a Boolean object.
-     *
-     * @param stringValue the value to parse
-     * @return a <code>Boolean</a> object
-     */
-    public Boolean parse(String stringValue)
-            throws ParseException
-    {
-        Boolean result = null;
-
-        for (int cnt = 0; 
-             cnt < Math.max(trueValues.length, falseValues.length); cnt++)
-        {
-            // Short-cut evaluation or bust!
-            if ((cnt < trueValues.length) && 
-                    stringValue.equalsIgnoreCase(trueValues[cnt]))
-            {
-                result = Boolean.TRUE;
-                break;
-            }
-
-            if ((cnt < falseValues.length) && 
-                    stringValue.equalsIgnoreCase(falseValues[cnt]))
-            {
-                result = Boolean.FALSE;
-                break;
-            }
-        }
-
-        if (result == null)
-        {
-            throw new ParseException(stringValue +
-                    " could not be converted to a Boolean", 0);
-        }
-        return result;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/Constraint.java b/src/java/org/apache/turbine/services/intake/validator/Constraint.java
deleted file mode 100644
index 01d97ad..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/Constraint.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * A constraint has a name and a value and an optional message.
- * The name/value pair will have meaning to a Validator and the
- * message will serve as an error message in the event the Validator
- * determines the constraint is violated.
- * example:
- * name="maxLength"
- * value="255"
- * message="Value cannot be longer than 255 characters."
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public interface Constraint
-{
-    /**
-     * Get the name of the constraint.
-     */
-    String getName();
-
-    /**
-     * Get the value of the constraint.
-     */
-    String getValue();
-
-    /**
-     * Get the error message.
-     */
-    String getMessage();
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/DateStringValidator.java b/src/java/org/apache/turbine/services/intake/validator/DateStringValidator.java
deleted file mode 100644
index e464fff..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/DateStringValidator.java
+++ /dev/null
@@ -1,363 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.DateFormat;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.intake.IntakeException;
-
-/**
- * Validates numbers with the following constraints in addition to those
- * listed in DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>format</td><td>see SimpleDateFormat javadoc</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>formatx</td><td>see SimpleDateFormat javadoc</td>
- * <td>&nbsp;</td></tr>
- * <tr><td colspan=3>where x is &gt;= 1 to specify multiple date
- *         formats.  Only one format rule should have a message</td></tr>
- * <tr><td>flexible</td><td>true, as long as DateFormat can parse the date,
- *                            allow it, and false</td>
- * <td>false</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public class DateStringValidator
-        extends DefaultValidator
-{
-    private static final String DEFAULT_DATE_MESSAGE =
-            "Date could not be parsed";
-
-    /**  */
-    private List dateFormats = null;
-
-    /**  */
-    private String dateFormatMessage = null;
-
-    /**  */
-    private boolean flexible = false;
-
-    /**  */
-    private DateFormat df = null;
-
-    /**  */
-    private SimpleDateFormat sdf = null;
-
-    public DateStringValidator(Map paramMap)
-            throws IntakeException
-    {
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public DateStringValidator()
-    {
-        dateFormats = new ArrayList(5);
-    }
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(FORMAT_RULE_NAME);
-
-        if (constraint != null)
-        {
-            dateFormats.add(constraint.getValue());
-            setDateFormatMessage(constraint.getMessage());
-        }
-
-        for(int i = 1 ;; i++)
-        {
-            constraint = (Constraint) paramMap.get(FORMAT_RULE_NAME + i);
-
-            if (constraint == null)
-            {
-                break; // for
-            }
-
-            dateFormats.add(constraint.getValue());
-            setDateFormatMessage(constraint.getMessage());
-        } 
-
-        if (StringUtils.isEmpty(dateFormatMessage))
-        {
-            dateFormatMessage = DEFAULT_DATE_MESSAGE;
-        }
-
-        constraint = (Constraint) paramMap.get(FLEXIBLE_RULE_NAME);
-
-        if (constraint != null)
-        {
-            flexible = Boolean.valueOf(constraint.getValue()).booleanValue();
-        }
-
-        if (dateFormats.size() == 0)
-        {
-            df = DateFormat.getInstance();
-            df.setLenient(flexible);
-        }
-        else
-        {
-            sdf = new SimpleDateFormat();
-            sdf.setLenient(flexible);
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            try
-            {
-                parse(testValue);
-            }
-            catch (ParseException e)
-            {
-                errorMessage = dateFormatMessage;
-                throw new ValidationException(dateFormatMessage);
-            }
-        }
-    }
-
-    /**
-     * Parses the String s according to the rules/formats for this validator.  
-     * The formats provided by the "formatx" rules (where x is &gt;= 1) are 
-     * used <strong>before</strong> the "format" rules to allow for a display 
-     * format that includes a 4 digit year, but that will parse the date using
-     * a format that accepts 2 digit years.
-     *
-     * @throws ParseException indicates that the string could not be
-     * parsed into a date.
-     */
-    public Date parse(String s)
-            throws ParseException
-    {
-        Date date = null;
-
-        if (s == null)
-        {
-            throw new ParseException("Input string was null", -1);
-        }
-
-        for (int i = 1; i < dateFormats.size() && date == null; i++)
-        {
-            sdf.applyPattern((String) dateFormats.get(i));
-
-            try
-            {
-                date = sdf.parse(s);
-            }
-            catch (ParseException e)
-            {
-                // ignore
-            }
-        }
-
-        if (date == null)
-        {
-            sdf.applyPattern((String) dateFormats.get(0));
-
-            try
-            {
-                date = sdf.parse(s);
-            }
-            catch (ParseException e)
-            {
-                // ignore
-            }
-        }
-
-        if (date == null && df != null)
-        {
-            date = df.parse(s);
-        }
-
-        // if the date still has not been parsed at this point, throw
-        // a ParseException.
-        if (date == null)
-        {
-            throw new ParseException("Could not parse the date", 0);
-        }
-
-        return date;
-    }
-
-    /**
-     * Formats a date into a String.  The format used is from
-     * the first format rule found for the field.
-     *
-     * @param date the Date object to convert into a string.
-     * @return formatted date
-     */
-    public String format(Date date)
-    {
-        String s = null;
-        if (date != null)
-        {
-            sdf.applyPattern((String) dateFormats.get(0));
-            s = sdf.format(date);
-        }
-        return s;
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minLengthMessage.
-     *
-     * @return value of minLengthMessage.
-     */
-    public String getDateFormatMessage()
-    {
-        return dateFormatMessage;
-    }
-
-    /**
-     * Only sets the message if the new message has some information.
-     * So the last setMessage call with valid data wins.  But later calls
-     * with null or empty string will not affect a previous valid setting.
-     *
-     * @param message  Value to assign to minLengthMessage.
-     */
-    public void setDateFormatMessage(String message)
-    {
-        if (StringUtils.isNotEmpty(message))
-        {
-            dateFormatMessage = message;
-        }
-    }
-
-    /**
-     * Get the value of dateFormats.
-     *
-     * @return value of dateFormats.
-     */
-    public List getDateFormats()
-    {
-        return dateFormats;
-    }
-
-    /**
-     * Set the value of dateFormats.
-     *
-     * @param formats  Value to assign to dateFormats.
-     */
-    public void setDateFormats(List formats)
-    {
-        this.dateFormats = formats;
-    }
-
-    /**
-     * Get the value of flexible.
-     *
-     * @return value of flexible.
-     */
-    public boolean isFlexible()
-    {
-        return flexible;
-    }
-
-    /**
-     * Set the value of flexible.
-     *
-     * @param flexible  Value to assign to flexible.
-     */
-    public void setFlexible(boolean flexible)
-    {
-        this.flexible = flexible;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java b/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java
deleted file mode 100644
index a242472..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/DefaultValidator.java
+++ /dev/null
@@ -1,363 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * DefaultValidator that will compare a testValue against the following
- * constraints:
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>required</td><td>true|false</td><td>false</td></tr>
- * <tr><td>mask</td><td>regexp</td><td>&nbsp;</td></tr>
- * <tr><td>minLength</td><td>integer</td><td>0</td></tr>
- * <tr><td>maxLength</td><td>integer</td><td>&nbsp;</td></tr>
- * </table>
- *
- * This validator can serve as the base class for more specific validators
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @version $Id$
- */
-abstract public class DefaultValidator
-        implements Validator, InitableByConstraintMap
-{
-    /** A boolean value to signify if the field is definately required or not */
-    protected boolean required = false;
-
-    /** The message to show if field fails required test */
-    protected String requiredMessage = null;
-
-    /** The minimum length of the field */
-    protected int minLength = 0;
-
-    /** The message to show if field fails min-length test */
-    protected String minLengthMessage = null;
-
-    /** The maximum length of the field */
-    protected int maxLength = 0;
-
-    /** The message to show if field fails max-length test */
-    protected String maxLengthMessage = null;
-
-    /** Error message pertaining to Rule that was broken */
-    protected String errorMessage = null;
-
-    /** Logging */
-    protected Log log = LogFactory.getLog(this.getClass());
-
-    /**
-     * Constructor
-     *
-     * @param paramMap a <code>Map</code> of <code>Rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
-
-    */
-    public DefaultValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        init(paramMap);
-    }
-
-    /**
-     * Default constructor
-     */
-    public DefaultValidator()
-    {
-    }
-
-    /**
-     * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
-     *
-     * @param paramMap a <code>Map</code> of <code>Rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        Constraint constraint = (Constraint) paramMap.get(REQUIRED_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            required = new Boolean(param).booleanValue();
-            requiredMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MIN_LENGTH_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minLength = Integer.parseInt(param);
-            minLengthMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_LENGTH_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxLength = Integer.parseInt(param);
-            maxLengthMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @return true if valid, false otherwise
-     */
-    public boolean isValid(String testValue)
-    {
-        boolean valid = false;
-        try
-        {
-            assertValidity(testValue);
-            valid = true;
-        }
-        catch (ValidationException ve)
-        {
-            valid = false;
-        }
-        return valid;
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        if (!required && StringUtils.isEmpty(testValue))
-        {
-            return;
-        }
-        if (required && StringUtils.isEmpty(testValue))
-        {
-            errorMessage = requiredMessage;
-            throw new ValidationException(requiredMessage);
-        }
-
-        if (minLength > 0 && testValue.length() < minLength)
-        {
-            errorMessage = minLengthMessage;
-            throw new ValidationException(minLengthMessage);
-        }
-        if (maxLength > 0 && testValue.length() > maxLength)
-        {
-            errorMessage = maxLengthMessage;
-            throw new ValidationException(maxLengthMessage);
-        }
-    }
-
-
-    /**
-     * Get the error message resulting from invalid input.
-     *
-     * @return a <code>String</code> message, or the empty String "".
-     */
-    public String getMessage()
-    {
-        String retValue = "";
-
-        if(errorMessage != null)
-        {
-            retValue = errorMessage;
-        }
-
-        return retValue;
-    }
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of required.
-     *
-     * @return value of required.
-     */
-    public boolean isRequired()
-    {
-        return required;
-    }
-
-    /**
-     * Set the value of required.
-     *
-     * @param required  Value to assign to required.
-     */
-    public void setRequired(boolean required)
-    {
-        this.required = required;
-    }
-
-    /**
-     * Get the value of requiredMessage.
-     *
-     * @return value of requiredMessage.
-     */
-    public String getRequiredMessage()
-    {
-        return requiredMessage;
-    }
-
-    /**
-     * Set the value of requiredMessage.
-     *
-     * @param requiredMessage  Value to assign to requiredMessage.
-     */
-    public void setRequiredMessage(String requiredMessage)
-    {
-        this.requiredMessage = requiredMessage;
-    }
-
-    /**
-     * Get the value of minLength.
-     *
-     * @return value of minLength.
-     */
-    public int getMinLength()
-    {
-        return minLength;
-    }
-
-    /**
-     * Set the value of minLength.
-     *
-     * @param minLength  Value to assign to minLength.
-     */
-    public void setMinLength(int minLength)
-    {
-        this.minLength = minLength;
-    }
-
-    /**
-     * Get the value of minLengthMessage.
-     *
-     * @return value of minLengthMessage.
-     */
-    public String getMinLengthMessage()
-    {
-        return minLengthMessage;
-    }
-
-    /**
-     * Set the value of minLengthMessage.
-     *
-     * @param minLengthMessage  Value to assign to minLengthMessage.
-     */
-    public void setMinLengthMessage(String minLengthMessage)
-    {
-        this.minLengthMessage = minLengthMessage;
-    }
-
-    /**
-     * Get the value of maxLength.
-     *
-     * @return value of maxLength.
-     */
-    public int getMaxLength()
-    {
-        return maxLength;
-    }
-
-    /**
-     * Set the value of maxLength.
-     *
-     * @param maxLength  Value to assign to maxLength.
-     */
-    public void setMaxLength(int maxLength)
-    {
-        this.maxLength = maxLength;
-    }
-
-    /**
-     * Get the value of maxLengthMessage.
-     *
-     * @return value of maxLengthMessage.
-     */
-    public String getMaxLengthMessage()
-    {
-        return maxLengthMessage;
-    }
-
-    /**
-     * Set the value of maxLengthMessage.
-     *
-     * @param maxLengthMessage  Value to assign to maxLengthMessage.
-     */
-    public void setMaxLengthMessage(String maxLengthMessage)
-    {
-        this.maxLengthMessage = maxLengthMessage;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java b/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java
deleted file mode 100644
index c430ebe..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/DoubleValidator.java
+++ /dev/null
@@ -1,222 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates Doubles with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than Double.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than Double.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class DoubleValidator
-        extends NumberValidator
-{
-    /* Init the minValue to that for a Double */
-    private double minValue = Double.NEGATIVE_INFINITY;
-
-    /* Init the maxValue to that for a Double */
-    private double maxValue = Double.POSITIVE_INFINITY;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public DoubleValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid Double";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public DoubleValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = Double.parseDouble(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = Double.parseDouble(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        double d = 0.0D;
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            try
-            {
-                d = Double.parseDouble(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-            
-            if (d < minValue)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (d > maxValue)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public double getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param value  Value to assign to minValue.
-     */
-    public void setMinValue(double value)
-    {
-        this.minValue = value;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public double getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param value  Value to assign to maxValue.
-     */
-    public void setMaxValue(double value)
-    {
-        this.maxValue = value;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/FileValidator.java b/src/java/org/apache/turbine/services/intake/validator/FileValidator.java
deleted file mode 100644
index 378f00e..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/FileValidator.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.fileupload.FileItem;
-
-import org.apache.turbine.services.intake.IntakeException;
-
-/**
- * A validator that will compare a FileItem testValue against the following
- * constraints in addition to those listed in DefaultValidator.
- *
- *
- *
- * This validator can serve as the base class for more specific validators
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @version $Id$
- */
-public class FileValidator
-        extends DefaultValidator
-{
-
-    /**
-     *
-     * Constructor
-     *
-     * @param paramMap a <code>Map</code> of <code>rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException an invalid mask was specified
-     */
-    public FileValidator(Map paramMap)
-            throws IntakeException
-    {
-        init(paramMap);
-    }
-
-    /**
-     * Default constructor
-     */
-    public FileValidator()
-    {
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>FileItem</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(FileItem testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue.getString());
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java b/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java
deleted file mode 100644
index eee88cf..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/FloatValidator.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates Floats with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than Float.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than Float.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class FloatValidator
-        extends NumberValidator
-{
-    /* Init the minValue to that for a Float */
-    private float minValue = Float.NEGATIVE_INFINITY;
-
-    /* Init the maxValue to that for a Float */
-    private float maxValue = Float.POSITIVE_INFINITY;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public FloatValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid Float";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public FloatValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = Float.parseFloat(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = Float.parseFloat(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            float f = 0.0f;
-            try
-            {
-                f = Float.parseFloat(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-            
-            if (f < minValue)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (f > maxValue)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public float getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(float minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public float getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(float maxValue)
-    {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/InitableByConstraintMap.java b/src/java/org/apache/turbine/services/intake/validator/InitableByConstraintMap.java
deleted file mode 100644
index ee5735b..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/InitableByConstraintMap.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-/**
- * This interface marks a bean/class that can have its properties set
- * by values in a Map.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public interface InitableByConstraintMap
-{
-    /**
-     * Extract the relevant parameters from the constraints listed
-     * in <input-param> tags within the intake.xml file.
-     *
-     * @param inputParameters a <code>Map</code> of <code>Constraint</code>'s
-     * containing rules and error messages.
-     * @exception InvalidMaskException one of the mask rules is invalid
-     */
-    void init(Map inputParameters)
-            throws InvalidMaskException;
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/IntegerValidator.java b/src/java/org/apache/turbine/services/intake/validator/IntegerValidator.java
deleted file mode 100644
index 806249e..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/IntegerValidator.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates Integers with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than Integer.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than Integer.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class IntegerValidator
-        extends NumberValidator
-{
-    /* Init the minValue to that for a Integer */
-    private int minValue = Integer.MIN_VALUE;
-
-    /* Init the maxValue to that for a Integer */
-    private int maxValue = Integer.MAX_VALUE;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public IntegerValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid Integer";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public IntegerValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = Integer.parseInt(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = Integer.parseInt(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            int i = 0;
-            try
-            {
-                i = Integer.parseInt(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-            
-            if (i < minValue)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (i > maxValue)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public int getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(int minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public int getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(int maxValue)
-    {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/InvalidMaskException.java b/src/java/org/apache/turbine/services/intake/validator/InvalidMaskException.java
deleted file mode 100644
index 21edea5..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/InvalidMaskException.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.intake.IntakeException;
-
-/**
- * An Exception indidate an invalid field mask.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class InvalidMaskException
-        extends IntakeException
-{
-    /**
-     * Creates a new <code>InvalidMaskException</code> instance.
-     *
-     * @param message describing the reason validation failed.
-     */
-    public InvalidMaskException(String message)
-    {
-        super(message);
-    }
-
-    /**
-     * Creates a new <code>InvalidMaskException</code> instance.
-     *
-     * @param cause Cause of the exception
-     * @param message describing the reason validation failed.
-     */
-    public InvalidMaskException(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/LongValidator.java b/src/java/org/apache/turbine/services/intake/validator/LongValidator.java
deleted file mode 100644
index 3c284c5..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/LongValidator.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates Longs with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than Long.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than Long.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class LongValidator
-        extends NumberValidator
-{
-    /* Init the minValue to that for a Long */
-    private long minValue = Long.MIN_VALUE;
-
-    /* Init the maxValue to that for a Long */
-    private long maxValue = Long.MAX_VALUE;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public LongValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid Long";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public LongValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = Long.parseLong(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = Long.parseLong(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            long l = 0L;
-            try
-            {
-                l = Long.parseLong(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-            
-            if (l < minValue)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (l > maxValue)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public long getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(long minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public long getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(long maxValue)
-    {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/NumberValidator.java b/src/java/org/apache/turbine/services/intake/validator/NumberValidator.java
deleted file mode 100644
index 03ba3a0..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/NumberValidator.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-/**
- * Validates numbers with the following constraints in addition to those
- * listed in DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than BigDecimal.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than BigDecimal.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>notANumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid number</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @version $Id$
- */
-abstract class NumberValidator
-        extends DefaultValidator
-{
-    /** The message to show if field fails min-value test */
-    String minValueMessage = null;
-
-    /** The message to show if field fails max-value test */
-    String maxValueMessage = null;
-
-    /** The message to use for invalid numbers */
-    String invalidNumberMessage = null;
-
-    /**
-     * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
-     *
-     * @param paramMap a <code>Map</code> of <code>rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException an invalid mask was specified
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint =
-                (Constraint) paramMap.get(INVALID_NUMBER_RULE_NAME);
-
-        if (constraint != null)
-        {
-            invalidNumberMessage = constraint.getMessage();
-        }
-    }
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValueMessage.
-     *
-     * @return value of minValueMessage.
-     */
-    public String getMinValueMessage()
-    {
-        return minValueMessage;
-    }
-
-    /**
-     * Set the value of minValueMessage.
-     *
-     * @param minValueMessage  Value to assign to minValueMessage.
-     */
-    public void setMinValueMessage(String minValueMessage)
-    {
-        this.minValueMessage = minValueMessage;
-    }
-
-    /**
-     * Get the value of maxValueMessage.
-     *
-     * @return value of maxValueMessage.
-     */
-    public String getMaxValueMessage()
-    {
-        return maxValueMessage;
-    }
-
-    /**
-     * Set the value of maxValueMessage.
-     *
-     * @param maxValueMessage  Value to assign to maxValueMessage.
-     */
-    public void setMaxValueMessage(String maxValueMessage)
-    {
-        this.maxValueMessage = maxValueMessage;
-    }
-
-    /**
-     * Get the value of invalidNumberMessage.
-     *
-     * @return value of invalidNumberMessage.
-     */
-    public String getInvalidNumberMessage()
-    {
-        return invalidNumberMessage;
-    }
-
-    /**
-     *
-     * Set the value of invalidNumberMessage.
-     * @param invalidNumberMessage  Value to assign to invalidNumberMessage.
-     */
-    public void setInvalidNumberMessage(String invalidNumberMessage)
-    {
-        this.invalidNumberMessage = invalidNumberMessage;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/ShortValidator.java b/src/java/org/apache/turbine/services/intake/validator/ShortValidator.java
deleted file mode 100644
index 232743c..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/ShortValidator.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Validates Shorts with the following constraints in addition to those
- * listed in NumberValidator and DefaultValidator.
- *
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>minValue</td><td>greater than Short.MIN_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>maxValue</td><td>less than Short.MAX_VALUE</td>
- * <td>&nbsp;</td></tr>
- * <tr><td>invalidNumberMessage</td><td>Some text</td>
- * <td>Entry was not a valid Short</td></tr>
- * </table>
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class ShortValidator
-        extends NumberValidator
-{
-    /* Init the minValue to that for a Short */
-    private short minValue = Short.MIN_VALUE;
-
-    /* Init the maxValue to that for a Short */
-    private short maxValue = Short.MAX_VALUE;
-
-    /**
-     * Constructor to use when initialising Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public ShortValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        invalidNumberMessage = "Entry was not a valid Short";
-        init(paramMap);
-    }
-
-    /**
-     * Default Constructor
-     */
-    public ShortValidator()
-    {
-    }
-
-    /**
-     * Method to initialise Object
-     *
-     * @param paramMap
-     * @throws InvalidMaskException
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MIN_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            minValue = Short.parseShort(param);
-            minValueMessage = constraint.getMessage();
-        }
-
-        constraint = (Constraint) paramMap.get(MAX_VALUE_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            maxValue = Short.parseShort(param);
-            maxValueMessage = constraint.getMessage();
-        }
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            short s = 0;
-            try
-            {
-                s = Short.parseShort(testValue);
-            }
-            catch (RuntimeException e)
-            {
-                errorMessage = invalidNumberMessage;
-                throw new ValidationException(invalidNumberMessage);
-            }
-            
-            if (s < minValue)
-            {
-                errorMessage = minValueMessage;
-                throw new ValidationException(minValueMessage);
-            }
-            if (s > maxValue)
-            {
-                errorMessage = maxValueMessage;
-                throw new ValidationException(maxValueMessage);
-            }
-        }
-    }
-
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of minValue.
-     *
-     * @return value of minValue.
-     */
-    public short getMinValue()
-    {
-        return minValue;
-    }
-
-    /**
-     * Set the value of minValue.
-     *
-     * @param minValue  Value to assign to minValue.
-     */
-    public void setMinValue(short minValue)
-    {
-        this.minValue = minValue;
-    }
-
-    /**
-     * Get the value of maxValue.
-     *
-     * @return value of maxValue.
-     */
-    public short getMaxValue()
-    {
-        return maxValue;
-    }
-
-    /**
-     * Set the value of maxValue.
-     *
-     * @param maxValue  Value to assign to maxValue.
-     */
-    public void setMaxValue(short maxValue)
-    {
-        this.maxValue = maxValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/StringValidator.java b/src/java/org/apache/turbine/services/intake/validator/StringValidator.java
deleted file mode 100644
index bdfb8cf..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/StringValidator.java
+++ /dev/null
@@ -1,261 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.oro.text.regex.MalformedPatternException;
-import org.apache.oro.text.regex.Pattern;
-import org.apache.oro.text.regex.Perl5Compiler;
-import org.apache.oro.text.regex.Perl5Matcher;
-
-/**
- * A validator that will compare a testValue against the following
- * constraints:
- * <table>
- * <tr><th>Name</th><th>Valid Values</th><th>Default Value</th></tr>
- * <tr><td>required</td><td>true|false</td><td>false</td></tr>
- * <tr><td>mask</td><td>regexp</td><td>&nbsp;</td></tr>
- * <tr><td>minLength</td><td>integer</td><td>0</td></tr>
- * <tr><td>maxLength</td><td>integer</td><td>&nbsp;</td></tr>
- * </table>
- *
- * This validator can serve as the base class for more specific validators
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:Colin.Chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:jh@byteaction.de">J&uuml;rgen Hoffmann</a>
- * @version $Id$
- */
-public class StringValidator
-        extends DefaultValidator
-{
-    /** The matching mask String as supplied by the XML input */
-    protected String maskString = null;
-
-    /** The compiled perl5 Regular expression from the ORO Perl5Compiler */
-    protected Pattern maskPattern = null;
-
-    /** The message to report if the mask constraint is not satisfied */
-    protected String maskMessage = null;
-
-
-    /**
-     * Constructor
-     *
-     * @param paramMap a <code>Map</code> of <code>Rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
-
-    */
-    public StringValidator(Map paramMap)
-            throws InvalidMaskException
-    {
-        init(paramMap);
-    }
-
-    /**
-     * Default constructor
-     */
-    public StringValidator()
-    {
-    }
-
-    /**
-     * Extract the relevant parameters from the constraints listed
-     * in <rule> tags within the intake.xml file.
-     *
-     * @param paramMap a <code>Map</code> of <code>Rule</code>'s
-     * containing constraints on the input.
-     * @exception InvalidMaskException An invalid mask was specified for one of the rules
-     */
-    public void init(Map paramMap)
-            throws InvalidMaskException
-    {
-        super.init(paramMap);
-
-        Constraint constraint = (Constraint) paramMap.get(MASK_RULE_NAME);
-        if (constraint != null)
-        {
-            String param = constraint.getValue();
-            setMask(param);
-            maskMessage = constraint.getMessage();
-        }
-
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @return true if valid, false otherwise
-     */
-    public boolean isValid(String testValue)
-    {
-        boolean valid = false;
-        try
-        {
-            assertValidity(testValue);
-            valid = true;
-        }
-        catch (ValidationException ve)
-        {
-            valid = false;
-        }
-        return valid;
-    }
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    public void assertValidity(String testValue)
-            throws ValidationException
-    {
-        super.assertValidity(testValue);
-
-        if (required || StringUtils.isNotEmpty(testValue))
-        {
-            if (maskPattern != null)
-            {
-                /** perl5 matcher */
-                Perl5Matcher patternMatcher = new Perl5Matcher();
-            
-                boolean patternMatch =
-                        patternMatcher.matches(testValue, maskPattern);
-
-                log.debug("Trying to match " + testValue
-                        + " to pattern " + maskString);
-
-                if (!patternMatch)
-                {
-                    errorMessage = maskMessage;
-                    throw new ValidationException(maskMessage);
-                }
-            }
-        }
-    }
-
-    // ************************************************************
-    // **                Bean accessor methods                   **
-    // ************************************************************
-
-    /**
-     * Get the value of mask.
-     *
-     * @return value of mask.
-     */
-    public String getMask()
-    {
-        return maskString;
-    }
-
-    /**
-     * Set the value of mask.
-     *
-     * @param mask  Value to assign to mask.
-     * @throws InvalidMaskException the mask could not be compiled.
-     */
-    public void setMask(String mask)
-            throws InvalidMaskException
-    {
-        /** perl5 compiler, needed for setting up the masks */
-        Perl5Compiler patternCompiler = new Perl5Compiler();
-
-        maskString = mask;
-
-        // Fixme. We should make this configureable by the XML file -- hps
-        int maskOptions = Perl5Compiler.DEFAULT_MASK;
-
-        try
-        {
-            log.debug("Compiling pattern " + maskString);
-            maskPattern = patternCompiler.compile(maskString, maskOptions);
-        }
-        catch (MalformedPatternException mpe)
-        {
-            throw new InvalidMaskException("Could not compile pattern " + maskString, mpe);
-        }
-    }
-
-    /**
-     * Get the value of maskMessage.
-     *
-     * @return value of maskMessage.
-     */
-    public String getMaskMessage()
-    {
-        return maskMessage;
-    }
-
-    /**
-     * Set the value of maskMessage.
-     *
-     * @param message  Value to assign to maskMessage.
-     */
-    public void setMaskMessage(String message)
-    {
-        this.maskMessage = message;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/ValidationException.java b/src/java/org/apache/turbine/services/intake/validator/ValidationException.java
deleted file mode 100644
index 03e5592..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/ValidationException.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.intake.IntakeException;
-
-/**
- * An Exception to mark a failed validation
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class ValidationException
-        extends IntakeException
-{
-    /**
-     * Creates a new <code>ValidationException</code> instance.
-     *
-     * @param message describing the reason validation failed.
-     */
-    public ValidationException(String message)
-    {
-        super(message);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/Validator.java b/src/java/org/apache/turbine/services/intake/validator/Validator.java
deleted file mode 100644
index 298ca1f..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/Validator.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.apache.turbine.services.intake.validator;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Validator api.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public interface Validator
-{
-    /** "flexible" Rule, used in DateFormat Validator */
-    String FLEXIBLE_RULE_NAME = "flexible";
-
-    /** "format" Rule, used in DateFormat Validator */
-    String FORMAT_RULE_NAME = "format";
-
-    /** "invalidNumber" Rule, used in the various Number Validators */
-    String INVALID_NUMBER_RULE_NAME = "invalidNumber";
-
-    /** "mask" Rule, used in StringValidator */
-    String MASK_RULE_NAME = "mask";
-
-    /** "maxLength" Rule, used in all validators */
-    String MAX_LENGTH_RULE_NAME = "maxLength";
-
-    /** "maxValue" Rule, used in the various Number Validators */
-    String MAX_VALUE_RULE_NAME = "maxValue";
-
-    /** "minLength" Rule, used in all validators */
-    String MIN_LENGTH_RULE_NAME = "minLength";
-
-    /** "minValue" Rule, used in the various Number Validators */
-    String MIN_VALUE_RULE_NAME = "minValue";
-
-    /** "required" Rule, used in all validators */
-    String REQUIRED_RULE_NAME = "required";
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @return true if valid, false otherwise
-     */
-    boolean isValid(String testValue);
-
-    /**
-     * Determine whether a testValue meets the criteria specified
-     * in the constraints defined for this validator
-     *
-     * @param testValue a <code>String</code> to be tested
-     * @exception ValidationException containing an error message if the
-     * testValue did not pass the validation tests.
-     */
-    void assertValidity(String testValue)
-            throws ValidationException;
-
-    /**
-     * Get the last error message resulting from invalid input.
-     *
-     * @return a <code>String</code> message, or the empty String "".
-     */
-    String getMessage();
-}
diff --git a/src/java/org/apache/turbine/services/intake/validator/package.html b/src/java/org/apache/turbine/services/intake/validator/package.html
deleted file mode 100644
index b84f051..0000000
--- a/src/java/org/apache/turbine/services/intake/validator/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Validators for the various intake field types.
-<br/>
-This service has been deprecated in favor of the Fulcrum Intake component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/intake">Fulcrum Intake</a>
-<br/>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/intake/xmlmodel/AppData.java b/src/java/org/apache/turbine/services/intake/xmlmodel/AppData.java
deleted file mode 100644
index 40affb7..0000000
--- a/src/java/org/apache/turbine/services/intake/xmlmodel/AppData.java
+++ /dev/null
@@ -1,259 +0,0 @@
-package org.apache.turbine.services.intake.xmlmodel;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.turbine.services.intake.IntakeException;
-
-import org.xml.sax.Attributes;
-
-/**
- * A class for holding application data structures.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class AppData
-        implements Serializable
-{
-    /** List of groups */
-    private List inputs;
-
-    /** Package that will be used for all mapTo objects */
-    private String basePackage;
-
-    /** Prefix string that will be used to qualify &lt;prefix&gt;:&lt;intakegroup&gt; names */
-    private String groupPrefix;
-
-    /**
-     * Default Constructor
-     */
-    public AppData()
-    {
-        inputs = new ArrayList();
-    }
-
-    /**
-     * Imports the top level element from an XML specification
-     */
-    public void loadFromXML(Attributes attrib)
-    {
-        String basePkg = attrib.getValue("basePackage");
-        if (basePkg == null)
-        {
-            setBasePackage("");
-        }
-        else
-        {
-            if (basePkg.charAt(basePkg.length() - 1) != '.')
-            {
-                setBasePackage(basePkg + '.');
-            }
-            else
-            {
-                setBasePackage(basePkg);
-            }
-        }
-
-        setGroupPrefix(attrib.getValue("groupPrefix"));
-    }
-
-    /**
-     * Return a collection of input sections (&lt;group&gt;).
-     * The names of the groups returned here are only unique
-     * to this AppData object and not qualified with the groupPrefix.
-     * This method is used in the IntakeService to register all the
-     * groups with and without prefix in the service.
-     *
-     */
-    public List getGroups()
-    {
-        return inputs;
-    }
-
-    /**
-     * Get a XmlGroup with the given name. It finds both
-     * qualified and unqualified names in this package.
-     *
-     * @param groupName a <code>String</code> value
-     * @return a <code>XmlGroup</code> value
-     * @throws IntakeException indicates that the groupName was null
-     */
-    public XmlGroup getGroup(String groupName)
-            throws IntakeException
-    {
-        if (groupName == null)
-        {
-            throw new IntakeException(
-                    "Intake AppData.getGroup(groupName) is null");
-        }
-
-        String groupPrefix = getGroupPrefix();
-
-        for (Iterator it = inputs.iterator(); it.hasNext();)
-        {
-            XmlGroup group = (XmlGroup) it.next();
-
-            if (group.getName().equals(groupName))
-            {
-                return group;
-            }
-            if (groupPrefix != null)
-            {
-                StringBuffer qualifiedGroupName = new StringBuffer();
-
-                qualifiedGroupName.append(groupPrefix)
-                        .append(':')
-                        .append(group.getName());
-
-                if (qualifiedGroupName.toString().equals(groupName))
-                {
-                    return group;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * An utility method to add a new input group from
-     * an xml attribute.
-     */
-    public XmlGroup addGroup(Attributes attrib)
-    {
-        XmlGroup input = new XmlGroup();
-        input.loadFromXML(attrib);
-        addGroup(input);
-        return input;
-    }
-
-    /**
-     * Add an input group to the vector and sets the
-     * AppData property to this AppData
-     */
-    public void addGroup(XmlGroup input)
-    {
-        input.setAppData(this);
-        inputs.add(input);
-    }
-
-    /**
-     * Get the base package String that will be appended to
-     * any mapToObjects
-     *
-     * @return value of basePackage.
-     */
-    public String getBasePackage()
-    {
-        return basePackage;
-    }
-
-    /**
-     * Set the base package String that will be appended to
-     * any mapToObjects
-     *
-     * @param v  Value to assign to basePackage.
-     */
-    public void setBasePackage(String v)
-    {
-        this.basePackage = v;
-    }
-
-    /**
-     * Get the prefix String that will be used to qualify
-     * intake groups when using multiple XML files
-     *
-     * @return value of groupPrefix
-     */
-    public String getGroupPrefix()
-    {
-        return groupPrefix;
-    }
-
-    /**
-     * Set the prefix String that will be used to qualify
-     * intake groups when using multiple XML files
-     *
-     * @param groupPrefix  Value to assign to basePackage.
-     */
-    public void setGroupPrefix(String groupPrefix)
-    {
-        this.groupPrefix = groupPrefix;
-    }
-
-    /**
-     * Creats a string representation of this AppData.
-     * The representation is given in xml format.
-     */
-    public String toString()
-    {
-        StringBuffer result = new StringBuffer();
-
-        result.append("<input-data>\n");
-        for (Iterator iter = inputs.iterator(); iter.hasNext();)
-        {
-            result.append(iter.next());
-        }
-        result.append("</input-data>");
-        return result.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/xmlmodel/Rule.java b/src/java/org/apache/turbine/services/intake/xmlmodel/Rule.java
deleted file mode 100644
index 7f4457c..0000000
--- a/src/java/org/apache/turbine/services/intake/xmlmodel/Rule.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.apache.turbine.services.intake.xmlmodel;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import org.apache.turbine.services.intake.validator.Constraint;
-
-import org.xml.sax.Attributes;
-
-/**
- * A Class for holding data about a constraint on a property.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public class Rule
-        implements Constraint, Serializable
-{
-    private String name;
-    private String value;
-    private String message;
-    private XmlField parent;
-
-    /**
-     * Default Constructor
-     */
-    public Rule()
-    {
-    }
-
-    /**
-     * Imports a column from an XML specification
-     */
-    public void loadFromXML(Attributes attrib)
-    {
-        setName(attrib.getValue("name"));
-        setValue(attrib.getValue("value"));
-    }
-
-    /**
-     * Set the name of the parameter
-     */
-    public void setName(String newName)
-    {
-        name = newName;
-    }
-
-    /**
-     * Get the name of the parameter
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Set the value of the parameter
-     */
-    public void setValue(String newValue)
-    {
-        value = newValue;
-    }
-
-    /**
-     * Get the value of the parameter
-     */
-    public String getValue()
-    {
-        return value;
-    }
-
-    /**
-     * Set the error message
-     */
-    public void setMessage(String newMessage)
-    {
-        message = newMessage;
-    }
-
-    /**
-     * Get the error message
-     */
-    public String getMessage()
-    {
-        return message;
-    }
-
-    /**
-     * Set the parent Field of the rule
-     */
-    public void setField(XmlField parent)
-    {
-        this.parent = parent;
-    }
-
-    /**
-     * Get the parent Field of the rule
-     */
-    public XmlField getField()
-    {
-        return parent;
-    }
-
-    /**
-     * String representation of the column. This
-     * is an xml representation.
-     */
-    public String toString()
-    {
-        StringBuffer result = new StringBuffer(100);
-
-        result.append("<rule name=\"" + name + "\"")
-                .append(" value=\"" + value + "\"");
-
-        if (message == null)
-        {
-            result.append(" />\n");
-        }
-        else
-        {
-            result.append(">")
-                    .append(message)
-                    .append("</rule>\n");
-        }
-
-        return result.toString();
-    }
-
-}
-
-
-
diff --git a/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java b/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java
deleted file mode 100644
index 4bb228e..0000000
--- a/src/java/org/apache/turbine/services/intake/xmlmodel/XmlField.java
+++ /dev/null
@@ -1,514 +0,0 @@
-package org.apache.turbine.services.intake.xmlmodel;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.xml.sax.Attributes;
-
-/**
- * A Class for holding data about a property used in an Application.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class XmlField
-        implements Serializable
-{
-    private String name;
-    private String key;
-    private String type;
-    private String displayName;
-    private String multiValued;
-    private XmlGroup parent;
-    private List rules;
-    private Map ruleMap;
-    private String ifRequiredMessage;
-    private String mapToObject;
-    private String mapToProperty;
-    private String validator;
-    private String defaultValue;
-    private String emptyValue;
-    private String displaySize;
-
-    /**
-     * Default Constructor
-     */
-    public XmlField()
-    {
-        rules = new ArrayList();
-        ruleMap = new HashMap();
-    }
-
-    /**
-     * Creates a new column and set the name
-     */
-    public XmlField(String name)
-    {
-        this.name = name;
-        rules = new ArrayList();
-        ruleMap = new HashMap();
-    }
-
-    /**
-     * Imports a column from an XML specification
-     */
-    public void loadFromXML(Attributes attrib)
-    {
-        setName(attrib.getValue("name"));
-        setKey(attrib.getValue("key"));
-        setType(attrib.getValue("type"));
-        setDisplayName(attrib.getValue("displayName"));
-        setDisplaySize(attrib.getValue("displaySize"));
-        setMultiValued(attrib.getValue("multiValued"));
-
-        String mapObj = attrib.getValue("mapToObject");
-        if (mapObj != null && mapObj.length() != 0)
-        {
-            setMapToObject(mapObj);
-        }
-
-        setMapToProperty(attrib.getValue("mapToProperty"));
-        setValidator(attrib.getValue("validator"));
-        setDefaultValue(attrib.getValue("defaultValue"));
-        setEmptyValue(attrib.getValue("emptyValue"));
-    }
-
-    /**
-     * Get the name of the property
-     */
-    public String getRawName()
-    {
-        return name;
-    }
-
-    /**
-     * Get the name of the property
-     */
-    public String getName()
-    {
-        return StringUtils.replace(name, "_", "");
-    }
-
-    /**
-     * Set the name of the property
-     */
-    public void setName(String newName)
-    {
-        name = newName;
-    }
-
-    /**
-     * Get the display name of the property
-     */
-    public String getDisplayName()
-    {
-        return displayName;
-    }
-
-    /**
-     * Set the display name of the property
-     */
-    public void setDisplayName(String newDisplayName)
-    {
-        displayName = newDisplayName;
-    }
-
-    /**
-     * Sets the display size of the field.
-     */
-    private void setDisplaySize(String size)
-    {
-        this.displaySize = size;
-    }
-
-    /**
-     * Gets the display size of the field.  This is
-     * useful for constructing the HTML input tag.
-     */
-    public String getDisplaySize()
-    {
-        return this.displaySize;
-    }
-
-    /**
-     * Set the parameter key of the property
-     */
-    public void setKey(String newKey)
-    {
-        key = newKey;
-    }
-
-    /**
-     * Get the parameter key of the property
-     */
-    public String getKey()
-    {
-        return key;
-    }
-
-    /**
-     * Set the type of the property
-     */
-    public void setType(String newType)
-    {
-        type = newType;
-    }
-
-    /**
-     * Get the type of the property
-     */
-    public String getType()
-    {
-        return type;
-    }
-
-    /**
-     * Set whether this class can have multiple values
-     */
-    public void setMultiValued(String newMultiValued)
-    {
-        multiValued = newMultiValued;
-    }
-
-    /**
-     * can this field have several values?
-     */
-    public boolean isMultiValued()
-    {
-        if (multiValued != null && multiValued.equals("true"))
-        {
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Set the name of the object that takes this input
-     *
-     * @param objectName name of the class.
-     */
-    public void setMapToObject(String objectName)
-    {
-        mapToObject = objectName;
-    }
-
-    /**
-     * Get the name of the object that takes this input
-     */
-    public String getMapToObject()
-    {
-        return mapToObject;
-    }
-
-    /**
-     * Set the property method that takes this input
-     *
-     * @param prop Name of the property to which the field will be mapped.
-     */
-    public void setMapToProperty(String prop)
-    {
-        mapToProperty = prop;
-    }
-
-    /**
-     * Get the property method that takes this input
-     */
-    public String getMapToProperty()
-    {
-        if (mapToProperty == null)
-        {
-            return getName();
-        }
-        else
-        {
-            return mapToProperty;
-        }
-    }
-
-    /**
-     * Set the class name of the validator
-     */
-    public void setValidator(String prop)
-    {
-        validator = prop;
-    }
-
-    /**
-     * Get the className of the validator
-     */
-    public String getValidator()
-    {
-        return validator;
-    }
-
-    /**
-     * Set the default Value.
-     *
-     * @param prop The parameter to use as default value.
-     */
-    public void setDefaultValue(String prop)
-    {
-        defaultValue = prop;
-    }
-
-    /**
-     * Get the default Value.
-     *
-     * @return The default value for this field.
-     */
-    public String getDefaultValue()
-    {
-        return defaultValue;
-    }
-
-    /**
-     * Set the empty Value.
-     *
-     * @param prop The parameter to use as empty value.
-     */
-    public void setEmptyValue(String prop)
-    {
-        emptyValue = prop;
-    }
-
-    /**
-     * Get the empty Value.
-     *
-     * @return The empty value for this field.
-     */
-    public String getEmptyValue()
-    {
-        return emptyValue;
-    }
-
-    /**
-     * The name of the field making sure the first letter is lowercase.
-     *
-     * @return a <code>String</code> value
-     * @deprecated No replacement
-     */
-    public String getVariable()
-    {
-        String firstChar = getName().substring(0, 1).toLowerCase();
-        return firstChar + getName().substring(1);
-    }
-
-    /**
-     * Set the parent XmlGroup of the property
-     */
-    public void setGroup(XmlGroup parent)
-    {
-        this.parent = parent;
-        if (mapToObject != null && mapToObject.length() != 0)
-        {
-            mapToObject = parent.getAppData().getBasePackage() + mapToObject;
-        }
-    }
-
-    /**
-     * Get the parent XmlGroup of the property
-     */
-    public XmlGroup getGroup()
-    {
-        return parent;
-    }
-
-    /**
-     * Get the value of ifRequiredMessage.
-     *
-     * @return value of ifRequiredMessage.
-     */
-    public String getIfRequiredMessage()
-    {
-        return ifRequiredMessage;
-    }
-
-    /**
-     * Set the value of ifRequiredMessage.
-     *
-     * @param v  Value to assign to ifRequiredMessage.
-     */
-    public void setIfRequiredMessage(String v)
-    {
-        this.ifRequiredMessage = v;
-    }
-
-    /**
-     * A utility function to create a new input parameter
-     * from attrib and add it to this property.
-     */
-    public Rule addRule(Attributes attrib)
-    {
-        Rule rule = new Rule();
-        rule.loadFromXML(attrib);
-        addRule(rule);
-
-        return rule;
-    }
-
-    /**
-     * Adds a new rule to the parameter Map and set the
-     * parent property of the Rule to this property
-     */
-    public void addRule(Rule rule)
-    {
-        rule.setField(this);
-        rules.add(rule);
-        ruleMap.put(rule.getName(), rule);
-    }
-
-    /**
-     * The collection of rules for this field.
-     *
-     * @return a <code>List</code> value
-     */
-    public List getRules()
-    {
-        return rules;
-    }
-
-    /**
-     * The collection of rules for this field keyed by
-     * parameter name.
-     *
-     * @return a <code>Map</code> value
-     */
-    public Map getRuleMap()
-    {
-        return ruleMap;
-    }
-
-    /**
-     * String representation of the column. This
-     * is an xml representation.
-     */
-    public String toString()
-    {
-        StringBuffer result = new StringBuffer();
-        result.append(" <field name=\"" + name + "\"");
-        result.append(" key=\"" + key + "\"");
-        result.append(" type=\"" + type + "\"");
-
-        if (displayName != null)
-        {
-            result.append(" displayName=\"" + displayName + "\"");
-        }
-        if (mapToObject != null)
-        {
-            result.append(" mapToObject=\"" + mapToObject + "\"");
-        }
-        if (mapToProperty != null)
-        {
-            result.append(" mapToProperty=\"" + mapToProperty + "\"");
-        }
-        if (validator != null)
-        {
-            result.append(" validator=\"" + validator + "\"");
-        }
-        if (defaultValue != null)
-        {
-            result.append(" defaultValue=\"" + defaultValue + "\"");
-        }
-
-        if (emptyValue != null)
-        {
-            result.append(" emptyValue=\"" + emptyValue + "\"");
-        }
-
-        if (rules.size() == 0)
-        {
-            result.append(" />\n");
-        }
-        else
-        {
-            result.append(">\n");
-            for (Iterator i = rules.iterator(); i.hasNext();)
-            {
-                result.append(i.next());
-            }
-            result.append("</field>\n");
-        }
-
-        return result.toString();
-    }
-
-    // this methods are called during serialization
-    private void writeObject(ObjectOutputStream stream)
-            throws IOException
-    {
-        stream.defaultWriteObject();
-    }
-
-    private void readObject(ObjectInputStream stream)
-            throws IOException, ClassNotFoundException
-    {
-        stream.defaultReadObject();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/intake/xmlmodel/XmlGroup.java b/src/java/org/apache/turbine/services/intake/xmlmodel/XmlGroup.java
deleted file mode 100644
index db0859d..0000000
--- a/src/java/org/apache/turbine/services/intake/xmlmodel/XmlGroup.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package org.apache.turbine.services.intake.xmlmodel;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.xml.sax.Attributes;
-
-/**
- * A Class for holding data about a grouping of inputs used in an Application.
- *
- * @deprecated Use the Fulcrum Intake component instead.
- * @author <a href="mailto:jmcnally@collab.net>John McNally</a>
- * @version $Id$
- */
-public class XmlGroup
-        implements Serializable
-{
-    private List fields;
-    private List mapToObjects;
-    private String defaultMapToObject;
-    private AppData parent;
-    private String groupName;
-    private String key;
-    private String poolCapacity;
-
-    /**
-     * Constructs a input group object
-     */
-    public XmlGroup()
-    {
-        fields = new ArrayList();
-        mapToObjects = new ArrayList(2);
-    }
-
-    /**
-     * Load the input group object from an xml tag.
-     */
-    public void loadFromXML(Attributes attrib)
-    {
-        groupName = attrib.getValue("name");
-        key = attrib.getValue("key");
-        poolCapacity = attrib.getValue("pool-capacity");
-
-        String objName = attrib.getValue("mapToObject");
-        if (StringUtils.isNotEmpty(objName))
-        {
-            defaultMapToObject = objName;
-        }
-    }
-
-    /**
-     * Get the name that handles this group
-     */
-    public String getName()
-    {
-        return groupName;
-    }
-
-    /**
-     * Set the name that handles this group
-     */
-    public void setName(String newGroupName)
-    {
-        groupName = newGroupName;
-    }
-
-    /**
-     * Get the key used to reference this group in input (form)
-     */
-    public String getKey()
-    {
-        return key;
-    }
-
-    /**
-     * Set the key used to reference this group in input (form)
-     */
-    public void setKey(String newKey)
-    {
-        key = newKey;
-    }
-
-    /**
-     * The maximum number of classes specific to this group
-     * allowed at one time.
-     *
-     * @return an <code>String</code> value
-     */
-    public String getPoolCapacity()
-    {
-        if (poolCapacity == null)
-        {
-            return "128";
-        }
-
-        return poolCapacity;
-    }
-
-    /**
-     * A utility function to create a new field
-     * from attrib and add it to this input group.
-     */
-    public XmlField addField(Attributes attrib)
-    {
-        XmlField field = new XmlField();
-        field.loadFromXML(attrib);
-        addField(field);
-
-        return field;
-    }
-
-    /**
-     * Adds a new field to the fields list and set the
-     * parent group of the field to the current group
-     */
-    public void addField(XmlField field)
-    {
-        field.setGroup(this);
-
-        // if this field has an object defined for mapping,
-        // add it to the list
-        if (field.getMapToObject() != null)
-        {
-            boolean isNewObject = true;
-            for (int i = 0; i < mapToObjects.size(); i++)
-            {
-                if (mapToObjects.get(i).equals(field.getMapToObject()))
-                {
-                    isNewObject = false;
-                    break;
-                }
-            }
-            if (isNewObject)
-            {
-                mapToObjects.add(field.getMapToObject());
-            }
-        }
-        // if a mapToProperty exists, set the object to this group's default
-        else if (field.getMapToProperty() != null
-                && !"".equals(field.getMapToProperty())
-                && defaultMapToObject != null)
-        {
-            field.setMapToObject(defaultMapToObject);
-        }
-
-        fields.add(field);
-    }
-
-    /**
-     * Returns a collection of fields in this input group
-     */
-    public List getFields()
-    {
-        return fields;
-    }
-
-    /**
-     * Utility method to get the number of fields in this input group
-     */
-    public int getNumFields()
-    {
-        return fields.size();
-    }
-
-    /**
-     * Returns a Specified field.
-     * @return Return a XmlField object or null if it does not exist.
-     */
-    public XmlField getField(String name)
-    {
-        String curName;
-
-        for (Iterator iter = fields.iterator(); iter.hasNext();)
-        {
-            XmlField field = (XmlField) iter.next();
-            curName = field.getRawName();
-            if (curName.equals(name))
-            {
-                return field;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Returns true if the input group contains a spesified field
-     */
-    public boolean containsField(XmlField field)
-    {
-        return fields.contains(field);
-    }
-
-    /**
-     * Returns true if the input group contains a specified field
-     */
-    public boolean containsField(String name)
-    {
-        return (getField(name) != null);
-    }
-
-    public List getMapToObjects()
-    {
-        return mapToObjects;
-    }
-
-    /**
-     * Set the parent of the group
-     */
-    public void setAppData(AppData parent)
-    {
-        this.parent = parent;
-        if (defaultMapToObject != null)
-        {
-            defaultMapToObject = parent.getBasePackage() + defaultMapToObject;
-            mapToObjects.add(defaultMapToObject);
-        }
-    }
-
-    /**
-     * Get the parent of the input group
-     */
-    public AppData getAppData()
-    {
-        return parent;
-    }
-
-    /**
-     * A String which might be used as a variable of this class
-     */
-    public String getVariable()
-    {
-        String firstChar = getName().substring(0, 1).toLowerCase();
-        return firstChar + getName().substring(1);
-    }
-
-    /**
-     * Creates a string representation of this input group. This
-     * is an xml representation.
-     */
-    public String toString()
-    {
-        StringBuffer result = new StringBuffer();
-
-        result.append("<group name=\"").append(getName());
-        result.append(" key=\"" + key + "\"");
-        result.append(">\n");
-
-        if (fields != null)
-        {
-            for (Iterator iter = fields.iterator(); iter.hasNext();)
-            {
-                result.append(iter.next());
-            }
-        }
-
-        result.append("</group>\n");
-
-        return result.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/jsp/JspService.java b/src/java/org/apache/turbine/services/jsp/JspService.java
deleted file mode 100644
index 9d7856e..0000000
--- a/src/java/org/apache/turbine/services/jsp/JspService.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.apache.turbine.services.jsp;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-
-/**
- * Implementations of the JspService interface.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- */
-public interface JspService
-    extends Service
-{
-    /** The name used to specify this service in Turbine.properties */
-    String SERVICE_NAME = "JspService";
-
-    /** The key used to store an instance of RunData in the request */
-    String RUNDATA = "rundata";
-
-    /** The key used to store an instance of JspLink in the request */
-    String LINK = "link";
-
-    /** The default extension of JSPs */
-    String JSP_EXTENSION = "jsp";
-
-    /** Property key for Template Pathes */
-    String TEMPLATE_PATH_KEY = "templates";
-
-    /** Property for Jsp Page Buffer Size */
-    String BUFFER_SIZE_KEY = "buffer.size";
-
-    /** Default Value for Jsp Page Buffer Size */
-    int BUFFER_SIZE_DEFAULT = 8192;
-
-    /**
-     * Adds some convenience objects to the request.  For example an instance
-     * of JspLink which can be used to generate links to other templates.
-     *
-     * @param data the turbine rundata object
-     */
-    void addDefaultObjects(RunData data);
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     * @param isForward whether to perform a forward or include.
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    void handleRequest(RunData data, String templateName, boolean isForward)
-        throws TurbineException;
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    void handleRequest(RunData data, String templateName)
-        throws TurbineException;
-
-    /**
-     * Returns the default buffer size of the JspService
-     *
-     * @return The default buffer size.
-     */
-    int getDefaultBufferSize();
-
-    /**
-     * Searchs for a template in the default.template path[s] and
-     * returns the template name with a relative path which is required
-     * by <a href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/ServletContext.html#getRequestDispatcher(java.lang.String)">javax.servlet.RequestDispatcher</a>
-     *
-     * @param template The name of the template to search for.
-     *
-     * @return the template with a relative path
-     */
-    String getRelativeTemplateName(String template);
-
-}
diff --git a/src/java/org/apache/turbine/services/jsp/TurbineJsp.java b/src/java/org/apache/turbine/services/jsp/TurbineJsp.java
deleted file mode 100644
index 3c0b379..0000000
--- a/src/java/org/apache/turbine/services/jsp/TurbineJsp.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package org.apache.turbine.services.jsp;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Facade class for the Jsp Service.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public abstract class TurbineJsp
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a JspService implementation instance
-     */
-    protected static JspService getService()
-    {
-        return (JspService) TurbineServices
-            .getInstance().getService(JspService.SERVICE_NAME);
-    }
-
-    /**
-     * Adds some convenience objects to the request.  For example an instance
-     * of JspLink which can be used to generate links to other templates.
-     *
-     * @deprecated Use the PipelineData version.
-     * @param data the turbine rundata object
-     */
-    public static void addDefaultObjects(RunData data)
-    {
-        getService().addDefaultObjects(data);
-    }
-
-    
-    /**
-     * Adds some convenience objects to the request.  For example an instance
-     * of JspLink which can be used to generate links to other templates.
-     *
-     * @param data the turbine pipelinedData object
-     */
-    public static void addDefaultObjects(PipelineData pipelineData)
-    {
-        //Map runDataMap = (Map) pipelineData.get(RunData.class);
-        //RunData data = (RunData)runDataMap.get(RunData.class);
-        RunData runData = (RunData)pipelineData;
-        addDefaultObjects(runData);
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @deprecated Use the PipelineData version.
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     * @param isForward whether to perform a forward or include.
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    public static void handleRequest(RunData data, String templateName, boolean isForward)
-        throws TurbineException
-    {
-        getService().handleRequest(data, templateName, isForward);
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @deprecated Use the PipelineData version.
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    public static void handleRequest(RunData data, String templateName)
-        throws TurbineException
-    {
-        getService().handleRequest(data, templateName);
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     * @param isForward whether to perform a forward or include.
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    public static void handleRequest(PipelineData pipelineData, String templateName, boolean isForward)
-        throws TurbineException
-    {
-        //Map runDataMap = (Map) pipelineData.get(RunData.class);
-        //RunData data = (RunData)runDataMap.get(RunData.class);
-        RunData runData = (RunData)pipelineData;
-        handleRequest(runData, templateName, isForward);
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName The template to execute
-     *
-     * @throws TurbineException If a problem occured while executing the JSP
-     */
-    public static void handleRequest(PipelineData pipelineData, String templateName)
-        throws TurbineException
-    {
-        if(!(pipelineData instanceof RunData)){
-            throw new RuntimeException("Can't cast to rundata from pipeline data.");
-        }
-        handleRequest((RunData)pipelineData, templateName);
-    }
-
-    
-    /**
-     * Returns the default buffer size of the JspService
-     *
-     * @return The default buffer size.
-     */
-    public static int getDefaultBufferSize()
-    {
-        return getService().getDefaultBufferSize();
-    }
-
-    /**
-     * Searchs for a template in the default.template path[s] and
-     * returns the template name with a relative path which is required
-     * by <a href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/ServletContext.html#getRequestDispatcher(java.lang.String)">javax.servlet.RequestDispatcher</a>
-     *
-     * @param template The name of the template to search for.
-     *
-     * @return the template with a relative path
-     */
-    public static String getRelativeTemplateName(String template)
-    {
-        return getService().getRelativeTemplateName(template);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/jsp/TurbineJspService.java b/src/java/org/apache/turbine/services/jsp/TurbineJspService.java
deleted file mode 100644
index 8507723..0000000
--- a/src/java/org/apache/turbine/services/jsp/TurbineJspService.java
+++ /dev/null
@@ -1,348 +0,0 @@
-package org.apache.turbine.services.jsp;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.servlet.RequestDispatcher;
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.services.pull.tools.TemplateLink;
-import org.apache.turbine.services.template.BaseTemplateEngineService;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a Service that can process JSP templates from within a Turbine
- * screen.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- */
-public class TurbineJspService
-        extends BaseTemplateEngineService
-        implements JspService
-{
-    /** The base path[s] prepended to filenames given in arguments */
-    private String[] templatePaths;
-
-    /** The relative path[s] prepended to filenames */
-    private String[] relativeTemplatePaths;
-
-    /** The buffer size for the output stream. */
-    private int bufferSize;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineJspService.class);
-
-    /**
-     * Load all configured components and initialize them. This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-        throws InitializationException
-    {
-        try
-        {
-            initJsp();
-            registerConfiguration(JspService.JSP_EXTENSION);
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                "TurbineJspService failed to initialize", e);
-        }
-    }
-
-    /**
-     * Performs early initialization of this Turbine service.
-     *
-     * @param config The ServletConfiguration from Turbine
-     *
-     * @throws InitializationException Something went wrong when starting up.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config)
-        throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Adds some convenience objects to the request.  For example an instance
-     * of TemplateLink which can be used to generate links to other templates.
-     *
-     * @param data the turbine rundata object
-     */
-    public void addDefaultObjects(RunData data)
-    {
-        HttpServletRequest req = data.getRequest();
-
-        //
-        // This is a place where an Application Pull Tool is used
-        // in a regular Java Context. We have no Pull Service with the
-        // Jsp Paging stuff, but we can run our Application Tool by Hand:
-        //
-        ApplicationTool templateLink = new TemplateLink();
-        templateLink.init(data);
-
-        req.setAttribute(LINK, templateLink);
-        req.setAttribute(RUNDATA, data);
-    }
-
-    /**
-     * Returns the default buffer size of the JspService
-     *
-     * @return The default buffer size.
-     */
-    public int getDefaultBufferSize()
-    {
-        return bufferSize;
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName the filename of the template.
-     * @throws TurbineException Any exception thrown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    public void handleRequest(RunData data, String templateName)
-        throws TurbineException
-    {
-        handleRequest(data, templateName, false);
-    }
-
-    /**
-     * executes the JSP given by templateName.
-     *
-     * @param data A RunData Object
-     * @param templateName the filename of the template.
-     * @param isForward whether to perform a forward or include.
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    public void handleRequest(RunData data, String templateName, boolean isForward)
-        throws TurbineException
-    {
-        /** template name with relative path */
-        String relativeTemplateName = getRelativeTemplateName(templateName);
-
-        if (StringUtils.isEmpty(relativeTemplateName))
-        {
-            throw new TurbineException(
-                "Template " + templateName + " not found in template paths");
-        }
-
-        // get the RequestDispatcher for the JSP
-        RequestDispatcher dispatcher = data.getServletContext()
-            .getRequestDispatcher(relativeTemplateName);
-
-        try
-        {
-            if (isForward)
-            {
-                // forward the request to the JSP
-                dispatcher.forward(data.getRequest(), data.getResponse());
-            }
-            else
-            {
-                data.getOut().flush();
-                // include the JSP
-                dispatcher.include(data.getRequest(), data.getResponse());
-            }
-        }
-        catch (Exception e)
-        {
-            // as JSP service is in Alpha stage, let's try hard to send the
-            // error message to the browser, to speed up debugging
-            try
-            {
-                data.getOut().print("Error encountered processing a template: "
-                    + templateName);
-                e.printStackTrace(data.getOut());
-            }
-            catch (IOException ignored)
-            {
-            }
-
-            // pass the exception to the caller according to the general
-            // contract for tamplating services in Turbine
-            throw new TurbineException(
-                "Error encountered processing a template: " + templateName, e);
-        }
-    }
-
-    /**
-     * This method sets up the template cache.
-     */
-    private void initJsp()
-        throws Exception
-    {
-        Configuration config = getConfiguration();
-
-        // Set relative paths from config.
-        // Needed for javax.servlet.RequestDispatcher
-        relativeTemplatePaths = config.getStringArray(TEMPLATE_PATH_KEY);
-
-        // Use Turbine Servlet to translate the template paths.
-        templatePaths = new String [relativeTemplatePaths.length];
-        for (int i=0; i < relativeTemplatePaths.length; i++)
-        {
-            relativeTemplatePaths[i] = warnAbsolute(relativeTemplatePaths[i]);
-
-            templatePaths[i] = Turbine.getRealPath(relativeTemplatePaths[i]);
-        }
-
-        bufferSize = config.getInt(JspService.BUFFER_SIZE_KEY,
-            JspService.BUFFER_SIZE_DEFAULT);
-    }
-
-    /**
-     * Determine whether a given template is available on the
-     * configured template pathes.
-     *
-     * @param template The name of the requested Template
-     * @return True if the template is available.
-     */
-    public boolean templateExists(String template)
-    {
-        for (int i = 0; i < templatePaths.length; i++)
-        {
-            if (templateExists(templatePaths[i], template))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Determine whether a given template exists on the supplied
-     * template path. This service ATM only supports file based
-     * templates so it simply checks for file existence.
-     *
-     * @param path The absolute (file system) template path
-     * @param template The name of the requested Template
-     * @return True if the template is available.
-     */
-    private boolean templateExists(String path, String template)
-    {
-        return new File(path, template).exists();
-    }
-
-    /**
-     * Searchs for a template in the default.template path[s] and
-     * returns the template name with a relative path which is
-     * required by <a href="http://java.sun.com/products/servlet/2.3/javadoc/javax/servlet/ServletContext.html#getRequestDispatcher(java.lang.String)">
-     * javax.servlet.RequestDispatcher</a>
-     *
-     * @param template
-     * @return String
-     */
-    public String getRelativeTemplateName(String template)
-    {
-        template = warnAbsolute(template);
-
-        // Find which template path the template is in
-        // We have a 1:1 match between relative and absolute
-        // pathes so we can use the index for translation.
-        for (int i = 0; i < templatePaths.length; i++)
-        {
-            if (templateExists(templatePaths[i], template))
-            {
-                return relativeTemplatePaths[i] + "/" + template;
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Warn if a template name or path starts with "/".
-     *
-     * @param template The template to test
-     * @return The template name with a leading / stripped off
-     */
-    private String warnAbsolute(String template)
-    {
-        if (template.startsWith("/"))
-        {
-            log.warn("Template " + template
-                + " has a leading /, which is wrong!");
-            return template.substring(1);
-        }
-        return template;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/jsp/package.html b/src/java/org/apache/turbine/services/jsp/package.html
deleted file mode 100644
index 4f1a5af..0000000
--- a/src/java/org/apache/turbine/services/jsp/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-JSP Service is used to provide Turbine with a Java Server page (JSP) based view. 
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java b/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
deleted file mode 100644
index 03db074..0000000
--- a/src/java/org/apache/turbine/services/jsp/util/JspNavigation.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.turbine.services.jsp.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.modules.NavigationLoader;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-
-/**
- * Returns output of a Navigation module. An instance of this is placed in the
- * request by the JspLayout. This allows template authors to
- * set the navigation template they'd like to place in their templates.<br>
- * Here's how it's used in a JSP template:<br>
- * <code>
- * <%useBean id="navigation" class="JspNavigation" scope="request"/%>
- * ...
- * <%= navigation.setTemplate("admin_navigation.jsp") %>
- * </code>
- * @author <a href="john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JspNavigation
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(JspNavigation.class);
-
-    /* The RunData object */
-    private RunData data;
-
-    /**
-     * Constructor
-     *
-     * @param data
-     */
-    public JspNavigation(RunData data)
-    {
-        this.data = data;
-    }
-
-    /**
-     * builds the output of the navigation template
-     * @param template the name of the navigation template
-     */
-    public void setTemplate(String template)
-    {
-        data.getTemplateInfo().setNavigationTemplate(template);
-        String module = null;
-        try
-        {
-            module = TurbineTemplate.getNavigationName(template);
-            NavigationLoader.getInstance().exec(data, module);
-        }
-        catch (Exception e)
-        {
-            String message = "Error processing navigation template:" +
-                    template + " using module: " + module;
-            log.error(message, e);
-            try
-            {
-                data.getOut().print("Error processing navigation template: "
-                        + template + " using module: " + module);
-            }
-            catch (java.io.IOException ioe)
-            {
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java b/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
deleted file mode 100644
index 4faec41..0000000
--- a/src/java/org/apache/turbine/services/jsp/util/JspScreenPlaceholder.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.turbine.services.jsp.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-
-/**
- * Returns output of a Screen module. An instance of this is placed in the
- * request by the JspLayout. This allows template authors to
- * place the screen template within the layout.<br>
- * Here's how it's used in a JSP template:<br>
- * <code>
- * <%useBean id="screen_placeholder" class="JspScreenPlaceholder" scope="request"/%>
- * ...
- * <%= screen_placeholder %>
- *</code>
- *
- * @author <a href="john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class JspScreenPlaceholder
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(JspNavigation.class);
-
-    /* The RunData object */
-    private RunData data;
-
-    /**
-     * Constructor
-     *
-     * @param data A Rundata Object
-     */
-    public JspScreenPlaceholder(RunData data)
-    {
-        this.data = data;
-    }
-
-    /**
-     * builds the output of the navigation template
-     */
-    public void exec()
-    {
-        String template = null;
-        String module = null;
-        try
-        {
-            template = data.getTemplateInfo().getScreenTemplate();
-            module = TurbineTemplate.getScreenName(template);
-            ScreenLoader.getInstance().exec(data, module);
-        }
-        catch (Exception e)
-        {
-            String message = "Error processing navigation template:" +
-                    template + " using module: " + module;
-            log.error(message, e);
-            try
-            {
-                data.getOut().print("Error processing navigation template: "
-                        + template + " using module: " + module);
-            }
-            catch (java.io.IOException ioe)
-            {
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/localization/LocaleTokenizer.java b/src/java/org/apache/turbine/services/localization/LocaleTokenizer.java
deleted file mode 100644
index 48e2fd0..0000000
--- a/src/java/org/apache/turbine/services/localization/LocaleTokenizer.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package org.apache.turbine.services.localization;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Locale;
-import java.util.NoSuchElementException;
-import java.util.StringTokenizer;
-
-/**
- * Parses the HTTP <code>Accept-Language</code> header as per section
- * 14.4 of RFC 2068 (HTTP 1.1 header field definitions).
- * 
- * @deprecated Use the Fulcrum Localization component instead.
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @version $Id$
- */
-public class LocaleTokenizer
-        implements Iterator
-{
-    /**
-     * Separates elements of the <code>Accept-Language</code> HTTP
-     * header.
-     */
-    private static final String LOCALE_SEPARATOR = ",";
-
-    /**
-     * Separates locale from quality within elements.
-     */
-    private static final char QUALITY_SEPARATOR = ';';
-
-    /**
-     * The default quality value for an <code>AcceptLanguage</code>
-     * object.
-     */
-    private static final Float DEFAULT_QUALITY = new Float(1.0f);
-
-    /**
-     * The parsed locales.
-     */
-    private ArrayList locales = new ArrayList(3);
-
-    /**
-     * Parses the <code>Accept-Language</code> header.
-     *
-     * @param header The <code>Accept-Language</code> header
-     * (i.e. <code>en, es;q=0.8, zh-TW;q=0.1</code>).
-     */
-    public LocaleTokenizer(String header)
-    {
-        StringTokenizer tok = new StringTokenizer(header, LOCALE_SEPARATOR);
-        while (tok.hasMoreTokens())
-        {
-            AcceptLanguage acceptLang = new AcceptLanguage();
-            String element = tok.nextToken().trim();
-            int index;
-
-            // Record and cut off any quality value that comes after a
-            // semi-colon.
-            if ((index = element.indexOf(QUALITY_SEPARATOR)) != -1)
-            {
-                String q = element.substring(index);
-                element = element.substring(0, index);
-                if ((index = q.indexOf('=')) != -1)
-                {
-                    try
-                    {
-                        acceptLang.quality =
-                                Float.valueOf(q.substring(index + 1));
-                    }
-                    catch (NumberFormatException useDefault)
-                    {
-                    }
-                }
-            }
-
-            element = element.trim();
-
-            // Create a Locale from the language.  A dash may separate the
-            // language from the country.
-            if ((index = element.indexOf('-')) == -1)
-            {
-                // No dash means no country.
-                acceptLang.locale = new Locale(element, "");
-            }
-            else
-            {
-                acceptLang.locale = new Locale(element.substring(0, index),
-                        element.substring(index + 1));
-            }
-
-            locales.add(acceptLang);
-        }
-
-        // Sort by quality in descending order.
-        Collections.sort(locales, Collections.reverseOrder());
-    }
-
-    /**
-     * @return Whether there are more locales.
-     */
-    public boolean hasNext()
-    {
-        return !locales.isEmpty();
-    }
-
-    /**
-     * Creates a <code>Locale</code> from the next element of the
-     * <code>Accept-Language</code> header.
-     *
-     * @return The next highest-rated <code>Locale</code>.
-     * @throws NoSuchElementException No more locales.
-     */
-    public Object next()
-    {
-        if (locales.isEmpty())
-        {
-            throw new NoSuchElementException();
-        }
-        return ((AcceptLanguage) locales.remove(0)).locale;
-    }
-
-    /**
-     * Not implemented.
-     */
-    public final void remove()
-    {
-        throw new UnsupportedOperationException(getClass().getName() +
-                " does not support remove()");
-    }
-
-    /**
-     * Struct representing an element of the HTTP
-     * <code>Accept-Language</code> header.
-     */
-    private class AcceptLanguage implements Comparable
-    {
-        /**
-         * The language and country.
-         */
-        Locale locale;
-
-        /**
-         * The quality of our locale (as values approach
-         * <code>1.0</code>, they indicate increased user preference).
-         */
-        Float quality = DEFAULT_QUALITY;
-
-        public final int compareTo(Object acceptLang)
-        {
-            return quality.compareTo(((AcceptLanguage) acceptLang).quality);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/localization/Localization.java b/src/java/org/apache/turbine/services/localization/Localization.java
deleted file mode 100644
index 2830aca..0000000
--- a/src/java/org/apache/turbine/services/localization/Localization.java
+++ /dev/null
@@ -1,298 +0,0 @@
-
-package org.apache.turbine.services.localization;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.RunData;
-
-/**
- * Wrapper around the TurbineLocalization Service that makes it easy
- * to grab something from the service and make the code cleaner.
- *
- * <p>
- *
- * Instead of typing:
- *
- * <br>
- *
- * ((LocalizationService)TurbineServices.getInstance()<br>
- *           .getService(LocalizationService.SERVICE_NAME))<br>
- *     .getBundle(data)<br>
- *     .getString(str)<br>
- *
- * Now you only need to type:
- *
- * <br>
- *
- * Localization.getString(str)
- *
- * @deprecated Use the Fulcrum Localization component instead.
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- */
-public class Localization
-{
-    /**
-     * Fetches the localized text from the specified bundle, ignoring
-     * any default bundles.
-     *
-     * @see LocalizationService#getString(String, Locale, String)
-     */
-    public static String getString(String bundleName, Locale locale,
-                                   String key)
-    {
-        return getService().getString(bundleName, locale, key);
-    }
-
-    /**
-     * Pulls a string out of the LocalizationService with the default
-     * locale values of what is defined in the
-     * TurbineResources.properties file for the
-     * locale.default.language and locale.default.country property
-     * values.  If those cannot be found, then the JVM defaults are
-     * used.
-     *
-     * @param key Name of string.
-     * @return A localized String.
-     */
-    public static String getString(String key)
-    {
-        return getService().getString(null, null, key);
-    }
-
-    /**
-     * @param key Name of the text to retrieve.
-     * @param locale Locale to get text for.
-     * @return Localized text.
-     */
-    public static String getString(String key, Locale locale)
-    {
-        return getService().getString(null, locale, key);
-    }
-
-    /**
-     * Pulls a string out of the LocalizationService and attempts to
-     * determine the Locale by the Accept-Language header.  If that
-     * header is not present, it will fall back to using the locale
-     * values of what is defined in the TurbineResources.properties
-     * file for the locale.default.language and locale.default.country
-     * property values.  If those cannot be found, then the JVM
-     * defaults are used.
-     *
-     * @param req HttpServletRequest information.
-     * @param key Name of string.
-     * @return A localized String.
-     */
-    public static String getString(String key, HttpServletRequest req)
-    {
-        return getService().getString(null, getLocale(req), key);
-    }
-
-    /**
-     * Convenience method that pulls a localized string off the
-     * LocalizationService using the default ResourceBundle name
-     * defined in the TurbineResources.properties file and the
-     * specified language name in ISO format.
-     *
-     * @param key Name of string.
-     * @param lang Desired language for the localized string.
-     * @return A localized string.
-     */
-    public static String getString(String key, String lang)
-    {
-        return getString(getDefaultBundleName(), new Locale(lang, ""), key);
-    }
-
-    /**
-     * Convenience method to get a ResourceBundle based on name.
-     *
-     * @param bundleName Name of bundle.
-     * @return A localized ResourceBundle.
-     */
-    public static ResourceBundle getBundle(String bundleName)
-    {
-        return getService().getBundle(bundleName);
-    }
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * HTTP Accept-Language header.
-     *
-     * @param bundleName Name of bundle.
-     * @param languageHeader A String with the language header.
-     * @return A localized ResourceBundle.
-     */
-    public static ResourceBundle getBundle(String bundleName,
-                                           String languageHeader)
-    {
-        return getService().getBundle(bundleName, languageHeader);
-    }
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * HTTP Accept-Language header in HttpServletRequest.
-     *
-     * @param req HttpServletRequest.
-     * @return A localized ResourceBundle.
-     */
-    public static ResourceBundle getBundle(HttpServletRequest req)
-    {
-        return getService().getBundle(req);
-    }
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * HTTP Accept-Language header in HttpServletRequest.
-     *
-     * @param bundleName Name of bundle.
-     * @param req HttpServletRequest.
-     * @return A localized ResourceBundle.
-     */
-    public static ResourceBundle getBundle(String bundleName,
-                                           HttpServletRequest req)
-    {
-        return getService().getBundle(bundleName, req);
-    }
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * Locale.
-     *
-     * @param bundleName Name of bundle.
-     * @param locale A Locale.
-     * @return A localized ResourceBundle.
-     */
-    public static ResourceBundle getBundle(String bundleName, Locale locale)
-    {
-        return getService().getBundle(bundleName, locale);
-    }
-
-    /**
-     * This method sets the name of the default bundle.
-     *
-     * @param defaultBundle Name of default bundle.
-     */
-    public static void setBundle(String defaultBundle)
-    {
-        getService().setBundle(defaultBundle);
-    }
-
-    /**
-     * Attempts to pull the <code>Accept-Language</code> header out of
-     * the HttpServletRequest object and then parse it.  If the header
-     * is not present, it will return a null Locale.
-     *
-     * @param req HttpServletRequest.
-     * @return A Locale.
-     */
-    public static Locale getLocale(HttpServletRequest req)
-    {
-        return getService().getLocale(req);
-    }
-
-    /**
-     * This method parses the <code>Accept-Language</code> header and
-     * attempts to create a Locale out of it.
-     *
-     * @param languageHeader A String with the language header.
-     * @return A Locale.
-     */
-    public static Locale getLocale(String languageHeader)
-    {
-        return getService().getLocale(languageHeader);
-    }
-
-    /**
-     * @see org.apache.turbine.services.localization.LocalizationService#getDefaultBundle()
-     */
-    public static String getDefaultBundleName()
-    {
-        return getService().getDefaultBundleName();
-    }
-
-    /**
-     * Gets the <code>LocalizationService</code> implementation.
-     *
-     * @return the LocalizationService implementation.
-     */
-    protected static final LocalizationService getService()
-    {
-        return (LocalizationService) TurbineServices.getInstance()
-                .getService(LocalizationService.SERVICE_NAME);
-    }
-
-    /**
-     * @deprecated Call getString(data.getRequest()) instead.
-     */
-    public static String getString(RunData data, String key)
-    {
-        return getBundle(data.getRequest()).getString(key);
-    }
-
-    /**
-     * @deprecated Call getBundle(bundleName, data.getRequest()) instead.
-     */
-    public static ResourceBundle getBundle(String bundleName, RunData data)
-    {
-        return getBundle(bundleName, data.getRequest());
-    }
-}
diff --git a/src/java/org/apache/turbine/services/localization/LocalizationService.java b/src/java/org/apache/turbine/services/localization/LocalizationService.java
deleted file mode 100644
index 682a481..0000000
--- a/src/java/org/apache/turbine/services/localization/LocalizationService.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package org.apache.turbine.services.localization;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Locale;
-import java.util.ResourceBundle;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.turbine.services.Service;
-
-/**
- * <p>Provides localization functionality using the interface provided
- * by <code>ResourceBundle</code>, plus leverages a "search path"
- * style traversal of the <code>ResourceBundle</code> objects named by
- * the <code>locale.default.bundles</code> to discover a value for a
- * given key.</p>
- *
- * <p>It is suggested that one handle
- * <a href="http://www.math.fu-berlin.de/~rene/www/java/tutorial/i18n/message/messageFormat.html">dealing with concatenated messages</a>
- * using <code>MessageFormat</code> and properties files.</p>
- *
- * @deprecated Use the Fulcrum Localization component instead.
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:leonardr@collab.net">Leonard Richardson</a>
- * @version $Id$
- */
-public interface LocalizationService
-        extends Service
-{
-    /**
-     * The name of this service.
-     */
-    String SERVICE_NAME = "LocalizationService";
-
-    /**
-     * A constant for the HTTP <code>Accept-Language</code> header.
-     */
-    String ACCEPT_LANGUAGE = "Accept-Language";
-
-    /**
-     * Retrieves the default language (as specified in the config
-     * file).
-     */
-    String getDefaultLanguage();
-
-    /**
-     * Retrieves the default country (as specified in the config
-     * file).
-     */
-    String getDefaultCountry();
-
-    /**
-     * Retrieves the name of the default bundle (as specified in the
-     * config file), or the first in the list if there are more than
-     * one.
-     */
-    String getDefaultBundleName();
-
-    /**
-     * Retrieves the list of names of bundles to search by default for
-     * <code>ResourceBundle</code> keys (as specified in the config
-     * file).
-     *
-     * @return The list of configured bundle names.
-     */
-    String[] getBundleNames();
-
-    /**
-     * Convenience method to get a default ResourceBundle.
-     *
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle();
-
-    /**
-     * Returns a ResourceBundle given the bundle name and the default
-     * locale information supplied by the configuration.
-     *
-     * @param bundleName Name of bundle.
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle(String bundleName);
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * HTTP Accept-Language header.
-     *
-     * @param bundleName Name of bundle.
-     * @param languageHeader A String with the language header.
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle(String bundleName, String languageHeader);
-
-    /**
-     * Convenience method to get a ResourceBundle based on HTTP
-     * Accept-Language header in HttpServletRequest.
-     *
-     * @param req The HTTP request to parse the
-     * <code>Accept-Language</code> of.
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle(HttpServletRequest req);
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * HTTP Accept-Language header in HttpServletRequest.
-     *
-     * @param bundleName Name of bundle.
-     * @param req The HTTP request to parse the
-     * <code>Accept-Language</code> of.
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle(String bundleName, HttpServletRequest req);
-
-    /**
-     * Convenience method to get a ResourceBundle based on name and
-     * Locale.
-     *
-     * @param bundleName Name of bundle.
-     * @param locale A Locale.
-     * @return A localized ResourceBundle.
-     */
-    ResourceBundle getBundle(String bundleName, Locale locale);
-
-    /**
-     * Attempts to pull the <code>Accept-Language</code> header out of
-     * the <code>HttpServletRequest</code> object and then parse it.
-     * If the header is not present, it will return a
-     * <code>null</code> <code>Locale</code>.
-     *
-     * @param req The HTTP request to parse the
-     * <code>Accept-Language</code> of.
-     * @return The parsed locale.
-     */
-    Locale getLocale(HttpServletRequest req);
-
-    /**
-     * This method parses the <code>Accept-Language</code> header and
-     * attempts to create a <code>Locale</code> out of it.
-     *
-     * @param languageHeader The <code>Accept-Language</code> HTTP
-     * header.
-     * @return The parsed locale.
-     */
-    Locale getLocale(String languageHeader);
-
-    /**
-     * This method sets the name of the defaultBundle.
-     *
-     * @param defaultBundle Name of default bundle.
-     */
-    void setBundle(String defaultBundle);
-
-    /**
-     * Tries very hard to return a value, looking first in the
-     * specified bundle, then searching list of default bundles
-     * (giving precedence to earlier bundles over later bundles).
-     *
-     * @param bundleName Name of the bundle to look in first.
-     * @param locale Locale to get text for.
-     * @param key Name of the text to retrieve.
-     * @return Localized text.
-     */
-    String getString(String bundleName, Locale locale, String key);
-
-}
diff --git a/src/java/org/apache/turbine/services/localization/LocalizationTool.java b/src/java/org/apache/turbine/services/localization/LocalizationTool.java
deleted file mode 100644
index f9b1011..0000000
--- a/src/java/org/apache/turbine/services/localization/LocalizationTool.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.apache.turbine.services.localization;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import java.util.Locale;
-import java.util.MissingResourceException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.localization.LocalizationService;
-import org.apache.turbine.services.InstantiationException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-/**
- * A pull tool which provides lookups for localized text by delegating
- * to the configured Fulcrum <code>LocalizationService</code>.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:jon@collab.net">Jon Stevens</a>
- */
-public class LocalizationTool implements ApplicationTool
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(LocalizationTool.class);
-    /** Fulcrum Localization component */
-    private LocalizationService localizationService;
-    /**
-     * The language and country information parsed from the request's
-     * <code>Accept-Language</code> header.  Reset on each request.
-     */
-    protected Locale locale;
-    
-    /**
-     * Lazy load the LocalizationService.
-     * @return a fulcrum LocalizationService
-     */
-    public LocalizationService getLocalizationService()
-    {
-        if (localizationService == null)
-        {
-            AvalonComponentService ecm =
-                (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME);
-                try {
-            localizationService = (LocalizationService)ecm.lookup(LocalizationService.ROLE);
-                }
-                catch (Exception e) {
-                    throw new InstantiationException("Problem looking up Localization Service:"+e.getMessage());
-                }
-        }
-        return localizationService;
-    }
-    /**
-     * Creates a new instance.  Used by <code>PullService</code>.
-     */
-    public LocalizationTool()
-    {
-        refresh();
-    }
-    /**
-     * <p>Performs text lookups for localization.</p>
-     *
-     * <p>Assuming there is a instance of this class with a HTTP
-     * request set in your template's context named <code>l10n</code>,
-     * the VTL <code>$l10n.HELLO</code> would render to
-     * <code>hello</code> for English requests and <code>hola</code>
-     * in Spanish (depending on the value of the HTTP request's
-     * <code>Accept-Language</code> header).</p>
-     *
-     * @param key The identifier for the localized text to retrieve.
-     * @return The localized text.
-     */
-    public String get(String key)
-    {
-        try
-        {
-            return getLocalizationService().getString(getBundleName(null), getLocale(), key);
-        }
-        catch (MissingResourceException noKey)
-        {
-            log.error(noKey);
-            return null;
-        }
-    }
-    /**
-     * Gets the current locale.
-     *
-     * @return The locale currently in use.
-     */
-    public Locale getLocale()
-    {
-        return locale;
-    }
-    /**
-     * The return value of this method is used to set the name of the
-     * bundle used by this tool.  Useful as a hook for using a
-     * different bundle than specifed in your
-     * <code>LocalizationService</code> configuration.
-     *
-     * @param data The inputs passed from {@link #init(Object)}.
-     * (ignored by this implementation).
-     */
-    protected String getBundleName(Object data)
-    {
-        return getLocalizationService().getDefaultBundleName();
-    }
-    // ApplicationTool implmentation
-    /**
-     * Sets the request to get the <code>Accept-Language</code> header
-     * from (reset on each request).
-     */
-    public final void init(Object data)
-    {
-        if (data instanceof RunData)
-        {
-            // Pull necessary information out of RunData while we have
-            // a reference to it.
-            locale = getLocalizationService().getLocale(((RunData) data).getRequest());
-        }
-    }
-    /**
-     * No-op.
-     */
-    public void refresh()
-    {
-        locale = null;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/localization/TurbineLocalizationService.java b/src/java/org/apache/turbine/services/localization/TurbineLocalizationService.java
deleted file mode 100644
index 030fbb0..0000000
--- a/src/java/org/apache/turbine/services/localization/TurbineLocalizationService.java
+++ /dev/null
@@ -1,619 +0,0 @@
-package org.apache.turbine.services.localization;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.MissingResourceException;
-import java.util.ResourceBundle;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.RunData;
-
-/**
- * <p>This class is the single point of access to all localization
- * resources.  It caches different ResourceBundles for different
- * Locales.</p>
- *
- * <p>Usage example:</p>
- *
- * <blockquote><code><pre>
- * LocalizationService ls = (LocalizationService) TurbineServices
- *     .getInstance().getService(LocalizationService.SERVICE_NAME);
- * </pre></code></blockquote>
- *
- * <p>Then call one of four methods to retrieve a ResourceBundle:
- *
- * <ul>
- * <li>getBundle("MyBundleName")</li>
- * <li>getBundle("MyBundleName", httpAcceptLanguageHeader)</li>
- * <li>etBundle("MyBundleName", HttpServletRequest)</li>
- * <li>getBundle("MyBundleName", Locale)</li>
- * <li>etc.</li>
- * </ul></p>
- * 
- * @deprecated Use the Fulcrum Localization component instead.
- * @author <a href="mailto:jm@mediaphil.de">Jonas Maurus</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:novalidemail@foo.com">Frank Y. Kim</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:leonardr@collab.net">Leonard Richardson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineLocalizationService
-        extends TurbineBaseService
-        implements LocalizationService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineLocalizationService.class);
-
-    /**
-     * The value to pass to <code>MessageFormat</code> if a
-     * <code>null</code> reference is passed to <code>format()</code>.
-     */
-    private static final Object[] NO_ARGS = new Object[0];
-
-    /**
-     * Bundle name keys a Map of the ResourceBundles in this
-     * service (which is in turn keyed by Locale).
-     * Key=bundle name
-     * Value=Hashtable containing ResourceBundles keyed by Locale.
-     */
-    private Map bundles = null;
-
-    /**
-     * The list of default bundles to search.
-     */
-    private String[] bundleNames = null;
-
-    /**
-     * The name of the default locale to use (includes language and
-     * country).
-     */
-    private Locale defaultLocale = null;
-
-    /** The name of the default language to use. */
-    private String defaultLanguage = null;
-
-    /** The name of the default country to use. */
-    private String defaultCountry = null;
-
-    /**
-     * Constructor.
-     */
-    public TurbineLocalizationService()
-    {
-        bundles = new HashMap();
-    }
-
-    /**
-     * Called the first time the Service is used.
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = Turbine.getConfiguration();
-
-        initBundleNames(null);
-
-        Locale jvmDefault = Locale.getDefault();
-
-        defaultLanguage = conf.getString("locale.default.language",
-                jvmDefault.getLanguage()).trim();
-        defaultCountry = conf.getString("locale.default.country",
-                jvmDefault.getCountry()).trim();
-
-        defaultLocale = new Locale(defaultLanguage, defaultCountry);
-        setInit(true);
-    }
-
-    /**
-     * Initialize list of default bundle names.
-     *
-     * @param ignored Ignored.
-     */
-    protected void initBundleNames(String[] ignored)
-    {
-        Configuration conf = Turbine.getConfiguration();
-        bundleNames = conf.getStringArray("locale.default.bundles");
-        String name = conf.getString("locale.default.bundle");
-
-        if (name != null && name.length() > 0)
-        {
-            // Using old-style single bundle name property.
-            if (bundleNames == null || bundleNames.length <= 0)
-            {
-                bundleNames = new String[] {name};
-            }
-            else
-            {
-                // Prepend "default" bundle name.
-                String[] array = new String[bundleNames.length + 1];
-                array[0] = name;
-                System.arraycopy(bundleNames, 0, array, 1, bundleNames.length);
-                bundleNames = array;
-            }
-        }
-        if (bundleNames == null)
-        {
-            bundleNames = new String[0];
-        }
-    }
-
-    /**
-     * Retrieves the default language (specified in the config file).
-     */
-    public String getDefaultLanguage()
-    {
-        return defaultLanguage;
-    }
-
-    /**
-     * Retrieves the default country (specified in the config file).
-     */
-    public String getDefaultCountry()
-    {
-        return defaultCountry;
-    }
-
-    /**
-     * Retrieves the name of the default bundle (as specified in the
-     * config file).
-     * @see org.apache.turbine.services.localization.LocalizationService#getDefaultBundleName()
-     */
-    public String getDefaultBundleName()
-    {
-        return (bundleNames.length > 0 ? bundleNames[0] : "");
-    }
-
-    /**
-     * @see org.apache.turbine.services.localization.LocalizationService#getBundleNames()
-     */
-    public String[] getBundleNames()
-    {
-        return (String []) bundleNames.clone();
-    }
-
-    /**
-     * This method returns a ResourceBundle given the bundle name
-     * "DEFAULT" and the default Locale information supplied in
-     * TurbineProperties.
-     *
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle()
-    {
-        return getBundle(getDefaultBundleName(), (Locale) null);
-    }
-
-    /**
-     * This method returns a ResourceBundle given the bundle name and
-     * the default Locale information supplied in TurbineProperties.
-     *
-     * @param bundleName Name of bundle.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(String bundleName)
-    {
-        return getBundle(bundleName, (Locale) null);
-    }
-
-    /**
-     * This method returns a ResourceBundle given the bundle name and
-     * the Locale information supplied in the HTTP "Accept-Language"
-     * header.
-     *
-     * @param bundleName Name of bundle.
-     * @param languageHeader A String with the language header.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(String bundleName, String languageHeader)
-    {
-        return getBundle(bundleName, getLocale(languageHeader));
-    }
-
-    /**
-     * This method returns a ResourceBundle given the Locale
-     * information supplied in the HTTP "Accept-Language" header which
-     * is stored in HttpServletRequest.
-     *
-     * @param req HttpServletRequest.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(HttpServletRequest req)
-    {
-        return getBundle(getDefaultBundleName(), getLocale(req));
-    }
-
-    /**
-     * This method returns a ResourceBundle given the bundle name and
-     * the Locale information supplied in the HTTP "Accept-Language"
-     * header which is stored in HttpServletRequest.
-     *
-     * @param bundleName Name of the bundle to use if the request's
-     * locale cannot be resolved.
-     * @param req HttpServletRequest.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(String bundleName, HttpServletRequest req)
-    {
-        return getBundle(bundleName, getLocale(req));
-    }
-
-    /**
-     * This method returns a ResourceBundle given the Locale
-     * information supplied in the HTTP "Accept-Language" header which
-     * is stored in RunData.
-     *
-     * @param data Turbine information.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(RunData data)
-    {
-        return getBundle(getDefaultBundleName(), getLocale(data.getRequest()));
-    }
-
-    /**
-     * This method returns a ResourceBundle given the bundle name and
-     * the Locale information supplied in the HTTP "Accept-Language"
-     * header which is stored in RunData.
-     *
-     * @param bundleName Name of bundle.
-     * @param data Turbine information.
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(String bundleName, RunData data)
-    {
-        return getBundle(bundleName, getLocale(data.getRequest()));
-    }
-
-    /**
-     * This method returns a ResourceBundle for the given bundle name
-     * and the given Locale.
-     *
-     * @param bundleName Name of bundle (or <code>null</code> for the
-     * default bundle).
-     * @param locale The locale (or <code>null</code> for the locale
-     * indicated by the default language and country).
-     * @return A localized ResourceBundle.
-     */
-    public ResourceBundle getBundle(String bundleName, Locale locale)
-    {
-        // Assure usable inputs.
-        bundleName = (StringUtils.isEmpty(bundleName) ? getDefaultBundleName() : bundleName.trim());
-        if (locale == null)
-        {
-            locale = getLocale((String) null);
-        }
-
-        // Find/retrieve/cache bundle.
-        ResourceBundle rb = null;
-        Map bundlesByLocale = (Map) bundles.get(bundleName);
-        if (bundlesByLocale != null)
-        {
-            // Cache of bundles by locale for the named bundle exists.
-            // Check the cache for a bundle corresponding to locale.
-            rb = (ResourceBundle) bundlesByLocale.get(locale);
-
-            if (rb == null)
-            {
-                // Not yet cached.
-                rb = cacheBundle(bundleName, locale);
-            }
-        }
-        else
-        {
-            rb = cacheBundle(bundleName, locale);
-        }
-        return rb;
-    }
-
-    /**
-     * Caches the named bundle for fast lookups.  This operation is
-     * relatively expesive in terms of memory use, but is optimized
-     * for run-time speed in the usual case.
-     *
-     * @exception MissingResourceException Bundle not found.
-     */
-    private synchronized ResourceBundle cacheBundle(String bundleName,
-                                                    Locale locale)
-        throws MissingResourceException
-    {
-        Map bundlesByLocale = (HashMap) bundles.get(bundleName);
-        ResourceBundle rb = (bundlesByLocale == null ? null :
-                             (ResourceBundle) bundlesByLocale.get(locale));
-
-        if (rb == null)
-        {
-            bundlesByLocale = (bundlesByLocale == null ? new HashMap(3) :
-                               new HashMap(bundlesByLocale));
-            try
-            {
-                rb = ResourceBundle.getBundle(bundleName, locale);
-            }
-            catch (MissingResourceException e)
-            {
-                rb = findBundleByLocale(bundleName, locale, bundlesByLocale);
-                if (rb == null)
-                {
-                    throw (MissingResourceException) e.fillInStackTrace();
-                }
-            }
-
-            if (rb != null)
-            {
-                // Cache bundle.
-                bundlesByLocale.put(rb.getLocale(), rb);
-
-                Map bundlesByName = new HashMap(bundles);
-                bundlesByName.put(bundleName, bundlesByLocale);
-                this.bundles = bundlesByName;
-            }
-        }
-        return rb;
-    }
-
-    /**
-     * <p>Retrieves the bundle most closely matching first against the
-     * supplied inputs, then against the defaults.</p>
-     *
-     * <p>Use case: some clients send a HTTP Accept-Language header
-     * with a value of only the language to use
-     * (i.e. "Accept-Language: en"), and neglect to include a country.
-     * When there is no bundle for the requested language, this method
-     * can be called to try the default country (checking internally
-     * to assure the requested criteria matches the default to avoid
-     * disconnects between language and country).</p>
-     *
-     * <p>Since we're really just guessing at possible bundles to use,
-     * we don't ever throw <code>MissingResourceException</code>.</p>
-     */
-    private ResourceBundle findBundleByLocale(String bundleName, Locale locale,
-                                              Map bundlesByLocale)
-    {
-        ResourceBundle rb = null;
-        if ( !StringUtils.isNotEmpty(locale.getCountry()) &&
-             defaultLanguage.equals(locale.getLanguage()) )
-        {
-            /*
-              log.debug("Requested language '" + locale.getLanguage() +
-              "' matches default: Attempting to guess bundle " +
-              "using default country '" + defaultCountry + '\'');
-            */
-            Locale withDefaultCountry = new Locale(locale.getLanguage(),
-                                                   defaultCountry);
-            rb = (ResourceBundle) bundlesByLocale.get(withDefaultCountry);
-            if (rb == null)
-            {
-                rb = getBundleIgnoreException(bundleName, withDefaultCountry);
-            }
-        }
-        else if ( !StringUtils.isNotEmpty(locale.getLanguage()) &&
-                  defaultCountry.equals(locale.getCountry()) )
-        {
-            Locale withDefaultLanguage = new Locale(defaultLanguage,
-                                                    locale.getCountry());
-            rb = (ResourceBundle) bundlesByLocale.get(withDefaultLanguage);
-            if (rb == null)
-            {
-                rb = getBundleIgnoreException(bundleName, withDefaultLanguage);
-            }
-        }
-
-        if (rb == null && !defaultLocale.equals(locale))
-        {
-            rb = getBundleIgnoreException(bundleName, defaultLocale);
-        }
-
-        return rb;
-    }
-
-    /**
-     * Retrieves the bundle using the
-     * <code>ResourceBundle.getBundle(String, Locale)</code> method,
-     * returning <code>null</code> instead of throwing
-     * <code>MissingResourceException</code>.
-     */
-    private final ResourceBundle getBundleIgnoreException(String bundleName,
-                                                          Locale locale)
-    {
-        try
-        {
-            return ResourceBundle.getBundle(bundleName, locale);
-        }
-        catch (MissingResourceException ignored)
-        {
-            return null;
-        }
-    }
-
-    /**
-     * This method sets the name of the first bundle in the search
-     * list (the "default" bundle).
-     *
-     * @param defaultBundle Name of default bundle.
-     */
-    public void setBundle(String defaultBundle)
-    {
-        if (bundleNames.length > 0)
-        {
-            bundleNames[0] = defaultBundle;
-        }
-        else
-        {
-            synchronized (this)
-            {
-                if (bundleNames.length <= 0)
-                {
-                    bundleNames = new String[] {defaultBundle};
-                }
-            }
-        }
-    }
-
-    /**
-     * @see org.apache.turbine.services.localization.LocalizationService#getLocale(HttpServletRequest)
-     */
-    public final Locale getLocale(HttpServletRequest req)
-    {
-        return getLocale(req.getHeader(ACCEPT_LANGUAGE));
-    }
-
-    /**
-     * @see org.apache.turbine.services.localization.LocalizationService#getLocale(String)
-     */
-    public Locale getLocale(String header)
-    {
-        if (!StringUtils.isEmpty(header))
-        {
-            LocaleTokenizer tok = new LocaleTokenizer(header);
-            if (tok.hasNext())
-            {
-                return (Locale) tok.next();
-            }
-        }
-
-        // Couldn't parse locale.
-        return defaultLocale;
-    }
-
-    /**
-     * @exception MissingResourceException Specified key cannot be matched.
-     * @see org.apache.turbine.services.localization.LocalizationService#getString(String, Locale, String)
-     */
-    public String getString(String bundleName, Locale locale, String key)
-    {
-        String value = null;
-
-        if (locale == null)
-        {
-            locale = getLocale((String) null);
-        }
-
-        // Look for text in requested bundle.
-        ResourceBundle rb = getBundle(bundleName, locale);
-        value = getStringOrNull(rb, key);
-
-        // Look for text in list of default bundles.
-        if (value == null && bundleNames.length > 0)
-        {
-            String name;
-            for (int i = 0; i < bundleNames.length; i++)
-            {
-                name = bundleNames[i];
-                //System.out.println("getString(): name=" + name +
-                //                   ", locale=" + locale + ", i=" + i);
-                if (!name.equals(bundleName))
-                {
-                    rb = getBundle(name, locale);
-                    value = getStringOrNull(rb, key);
-                    if (value != null)
-                    {
-                        locale = rb.getLocale();
-                        break;
-                    }
-                }
-            }
-        }
-
-        if (value == null)
-        {
-            String loc = locale.toString();
-            String mesg = LocalizationService.SERVICE_NAME +
-                " noticed missing resource: " +
-                "bundleName=" + bundleName + ", locale=" + loc +
-                ", key=" + key;
-            log.debug(mesg);
-            // Text not found in requested or default bundles.
-            throw new MissingResourceException(mesg, bundleName, key);
-        }
-
-        return value;
-    }
-
-    /**
-     * Gets localized text from a bundle if it's there.  Otherwise,
-     * returns <code>null</code> (ignoring a possible
-     * <code>MissingResourceException</code>).
-     */
-    protected final String getStringOrNull(ResourceBundle rb, String key)
-    {
-        if (rb != null)
-        {
-            try
-            {
-                return rb.getString(key);
-            }
-            catch (MissingResourceException ignored)
-            {
-            }
-        }
-        return null;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/localization/package.html b/src/java/org/apache/turbine/services/localization/package.html
deleted file mode 100644
index 6aa7e20..0000000
--- a/src/java/org/apache/turbine/services/localization/package.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-This service provides access and tools for multilingual applications in Turbine.
-<br/>
-This service has been deprecated in favor of the Fulcrum Localization component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-localization">Fulcrum Localization</a>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/mimetype/MimeTypeService.java b/src/java/org/apache/turbine/services/mimetype/MimeTypeService.java
deleted file mode 100644
index 0d0a1b9..0000000
--- a/src/java/org/apache/turbine/services/mimetype/MimeTypeService.java
+++ /dev/null
@@ -1,215 +0,0 @@
-package org.apache.turbine.services.mimetype;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.util.Locale;
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.services.mimetype.util.MimeType;
-
-/**
- * The MimeType Service maintains mappings between MIME types and
- * the corresponding file name extensions, and between locales and
- * character encodings. The mappings are typically defined in
- * properties or files located in user's home directory, Java home
- * directory or the current class jar depending on the implementation.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface MimeTypeService extends Service
-{
-    /**
-     * The name of the service.
-     */
-    String SERVICE_NAME = "MimeTypeService";
-
-    /**
-     * Sets a MIME content type mapping to extensions to the map.
-     * The extension is specified by a MIME type name followed
-     * by a list of file name extensions separated by a whitespace.
-     *
-     * @param spec a MIME type extension specification to add.
-     */
-    void setContentType(String spec);
-
-    /**
-     * Gets the MIME content type for a file as a string.
-     *
-     * @param file the file.
-     * @return the MIME type string.
-     */
-    String getContentType(File file);
-
-    /**
-     * Gets the MIME content type for a named file as a string.
-     *
-     * @param name the name of the file.
-     * @return the MIME type string.
-     */
-    String getContentType(String name);
-
-    /**
-     * Gets the MIME content type for a file name extension as a string.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type string.
-     */
-    String getContentType(String ext,
-                          String def);
-
-    /**
-     * Gets the MIME content type for a file.
-     *
-     * @param file the file.
-     * @return the MIME type.
-     */
-    MimeType getMimeContentType(File file);
-
-    /**
-     * Gets the MIME content type for a named file.
-     *
-     * @param name the name of the file.
-     * @return the MIME type.
-     */
-    MimeType getMimeContentType(String name);
-
-    /**
-     * Gets the MIME content type for a file name extension.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type.
-     */
-    MimeType getMimeContentType(String ext,
-                                String def);
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param type the MIME type as a string.
-     * @return the file name extension or null.
-     */
-    String getDefaultExtension(String type);
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param mime the MIME type.
-     * @return the file name extension or null.
-     */
-    String getDefaultExtension(MimeType mime);
-
-    /**
-     * Sets a locale-charset mapping.
-     *
-     * @param key the key for the charset.
-     * @param charset the corresponding charset.
-     */
-    void setCharSet(String key,
-                    String charset);
-
-    /**
-     * Gets the charset for a locale. First a locale specific charset
-     * is searched for, then a country specific one and lastly a language
-     * specific one. If none is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @return the charset.
-     */
-    String getCharSet(Locale locale);
-
-    /**
-     * Gets the charset for a locale with a variant. The search
-     * is performed in the following order:
-     * "lang"_"country"_"variant"="charset",
-     * _"counry"_"variant"="charset",
-     * "lang"__"variant"="charset",
-     * __"variant"="charset",
-     * "lang"_"country"="charset",
-     * _"country"="charset",
-     * "lang"="charset".
-     * If nothing of the above is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @param variant a variant field.
-     * @return the charset.
-     */
-    String getCharSet(Locale locale,
-                      String variant);
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @return the found charset or the default one.
-     */
-    String getCharSet(String key);
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @param def the default charset if none is found.
-     * @return the found charset or the given default.
-     */
-    String getCharSet(String key,
-                      String def);
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypeService.java b/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypeService.java
deleted file mode 100644
index 221a586..0000000
--- a/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypeService.java
+++ /dev/null
@@ -1,359 +0,0 @@
-package org.apache.turbine.services.mimetype;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.IOException;
-
-import java.util.Locale;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.mimetype.util.CharSetMap;
-import org.apache.turbine.services.mimetype.util.MimeType;
-import org.apache.turbine.services.mimetype.util.MimeTypeMap;
-import org.apache.turbine.services.servlet.TurbineServlet;
-
-/**
- * The MimeType Service maintains mappings between MIME types and
- * the corresponding file name extensions, and between locales and
- * character encodings.
- *
- * <p>The MIME type mappings can be defined in MIME type files
- * located in user's home directory, Java home directory or
- * the current class jar. The default mapping file is defined
- * with the mime.type.file property. In addition, the service maintains
- * a set of most common mappings.
- *
- * <p>The charset mappings can be defined in property files
- * located in user's home directory, Java home directory or
- * the current class jar. The default mapping file is defined
- * with the charset.file property. In addition, the service maintains
- * a set of most common mappings.
- * 
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class TurbineMimeTypeService
-        extends TurbineBaseService
-        implements MimeTypeService
-{
-    /**
-     * The MIME type file property.
-     */
-    public static final String MIME_TYPES = "mime.types";
-
-    /**
-     * The charset file property.
-     */
-    public static final String CHARSETS = "charsets";
-
-    /**
-     * The MIME type map used by the service.
-     */
-    private MimeTypeMap mimeTypeMap;
-
-    /**
-     * The charset map used by the service.
-     */
-    private CharSetMap charSetMap;
-
-    /**
-     * Constructs a new service.
-     */
-    public TurbineMimeTypeService()
-    {
-    }
-
-    /**
-     * Initializes the service.
-     *
-     * @throws InitializationException if initialization fails.
-     */
-    public void init()
-            throws InitializationException
-    {
-        String path = null;
-        Configuration conf = getConfiguration();
-        if (conf != null)
-        {
-            path = conf.getString(MIME_TYPES);
-            if (path != null)
-            {
-                path = TurbineServlet.getRealPath(path);
-            }
-        }
-        if (path != null)
-        {
-            try
-            {
-                mimeTypeMap = new MimeTypeMap(path);
-            }
-            catch (IOException x)
-            {
-                throw new InitializationException(path, x);
-            }
-        }
-        else
-        {
-            mimeTypeMap = new MimeTypeMap();
-        }
-
-        if (conf != null)
-        {
-            path = conf.getString(CHARSETS);
-            if (path != null)
-            {
-                path = TurbineServlet.getRealPath(path);
-            }
-        }
-        if (path != null)
-        {
-            try
-            {
-                charSetMap = new CharSetMap(path);
-            }
-            catch (IOException x)
-            {
-                throw new InitializationException(path, x);
-            }
-        }
-        else
-        {
-            charSetMap = new CharSetMap();
-        }
-        setInit(true);
-    }
-
-    /**
-     * Sets a MIME content type mapping to extensions to the map.
-     * The extension is specified by a MIME type name followed
-     * by a list of file name extensions separated by a whitespace.
-     *
-     * @param spec a MIME type extension specification to add.
-     */
-    public void setContentType(String spec)
-    {
-        mimeTypeMap.setContentType(spec);
-    }
-
-    /**
-     * Gets the MIME content type for a file as a string.
-     *
-     * @param file the file.
-     * @return the MIME type string.
-     */
-    public String getContentType(File file)
-    {
-        return mimeTypeMap.getContentType(file);
-    }
-
-    /**
-     * Gets the MIME content type for a named file as a string.
-     *
-     * @param name the name of the file.
-     * @return the MIME type string.
-     */
-    public String getContentType(String name)
-    {
-        return mimeTypeMap.getContentType(name);
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension as a string.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type string.
-     */
-    public String getContentType(String ext,
-                                 String def)
-    {
-        return mimeTypeMap.getContentType(ext, def);
-    }
-
-    /**
-     * Gets the MIME content type for a file.
-     *
-     * @param file the file.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(File file)
-    {
-        return mimeTypeMap.getMimeContentType(file);
-    }
-
-    /**
-     * Gets the MIME content type for a named file.
-     *
-     * @param name the name of the file.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(String name)
-    {
-        return mimeTypeMap.getMimeContentType(name);
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(String ext,
-                                       String def)
-    {
-        return mimeTypeMap.getMimeContentType(ext, def);
-    }
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param type the MIME type as a string.
-     * @return the file name extension or null.
-     */
-    public String getDefaultExtension(String type)
-    {
-        return mimeTypeMap.getDefaultExtension(type);
-    }
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param mime the MIME type.
-     * @return the file name extension or null.
-     */
-    public String getDefaultExtension(MimeType mime)
-    {
-        return mimeTypeMap.getDefaultExtension(mime);
-    }
-
-    /**
-     * Sets a locale-charset mapping.
-     *
-     * @param key the key for the charset.
-     * @param charset the corresponding charset.
-     */
-    public void setCharSet(String key,
-                           String charset)
-    {
-        charSetMap.setCharSet(key, charset);
-    }
-
-    /**
-     * Gets the charset for a locale. First a locale specific charset
-     * is searched for, then a country specific one and lastly a language
-     * specific one. If none is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @return the charset.
-     */
-    public String getCharSet(Locale locale)
-    {
-        return charSetMap.getCharSet(locale);
-    }
-
-    /**
-     * Gets the charset for a locale with a variant. The search
-     * is performed in the following order:
-     * "lang"_"country"_"variant"="charset",
-     * _"counry"_"variant"="charset",
-     * "lang"__"variant"="charset",
-     * __"variant"="charset",
-     * "lang"_"country"="charset",
-     * _"country"="charset",
-     * "lang"="charset".
-     * If nothing of the above is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @param variant a variant field.
-     * @return the charset.
-     */
-    public String getCharSet(Locale locale,
-                             String variant)
-    {
-        return charSetMap.getCharSet(locale, variant);
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @return the found charset or the default one.
-     */
-    public String getCharSet(String key)
-    {
-        return charSetMap.getCharSet(key);
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @param def the default charset if none is found.
-     * @return the found charset or the given default.
-     */
-    public String getCharSet(String key,
-                             String def)
-    {
-        return charSetMap.getCharSet(key, def);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypes.java b/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypes.java
deleted file mode 100644
index 7372774..0000000
--- a/src/java/org/apache/turbine/services/mimetype/TurbineMimeTypes.java
+++ /dev/null
@@ -1,223 +0,0 @@
-package org.apache.turbine.services.mimetype;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.util.Locale;
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.mimetype.util.MimeType;
-
-/**
- * This is a static accessor to MIME types and charsets.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public abstract class TurbineMimeTypes
-{
-    /**
-     * Gets the MIME content type for a file as a string.
-     *
-     * @param file the file.
-     * @return the MIME type string.
-     */
-    public static String getContentType(File file)
-    {
-        return getService().getContentType(file);
-    }
-
-    /**
-     * Gets the MIME content type for a named file as a string.
-     *
-     * @param name the name of the file.
-     * @return the MIME type string.
-     */
-    public static String getContentType(String name)
-    {
-        return getService().getContentType(name);
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension as a string.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type string.
-     */
-    public static String getContentType(String ext,
-                                        String def)
-    {
-        return getService().getContentType(ext, def);
-    }
-
-    /**
-     * Gets the MIME content type for a file.
-     *
-     * @param file the file.
-     * @return the MIME type.
-     */
-    public static MimeType getMimeContentType(File file)
-    {
-        return getService().getMimeContentType(file);
-    }
-
-    /**
-     * Gets the MIME content type for a named file.
-     *
-     * @param name the name of the file.
-     * @return the MIME type.
-     */
-    public static MimeType getMimeContentType(String name)
-    {
-        return getService().getMimeContentType(name);
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type.
-     */
-    public static MimeType getMimeContentType(String ext,
-                                              String def)
-    {
-        return getService().getMimeContentType(ext, def);
-    }
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param mime the MIME type.
-     * @return the file name extension or null.
-     */
-    public static String getDefaultExtension(MimeType mime)
-    {
-        return getService().getDefaultExtension(mime);
-    }
-
-    /**
-     * Gets the charset for a locale. First a locale specific charset
-     * is searched for, then a country specific one and lastly a language
-     * specific one. If none is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @return the charset.
-     */
-    public static String getCharSet(Locale locale)
-    {
-        return getService().getCharSet(locale);
-    }
-
-    /**
-     * Gets the charset for a locale with a variant. The search
-     * is performed in the following order:
-     * "lang"_"country"_"variant"="charset",
-     * _"counry"_"variant"="charset",
-     * "lang"__"variant"="charset",
-     * __"variant"="charset",
-     * "lang"_"country"="charset",
-     * _"country"="charset",
-     * "lang"="charset".
-     * If nothing of the above is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @param variant a variant field.
-     * @return the charset.
-     */
-    public static String getCharSet(Locale locale,
-                                    String variant)
-    {
-        return getService().getCharSet(locale, variant);
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @return the found charset or the default one.
-     */
-    public static String getCharSet(String key)
-    {
-        return getService().getCharSet(key);
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @param def the default charset if none is found.
-     * @return the found charset or the given default.
-     */
-    public static String getCharSet(String key,
-                                    String def)
-    {
-        return getService().getCharSet(key, def);
-    }
-
-    /**
-     * Gets the MIME type service implementation.
-     *
-     * @return the MIME type service implementation.
-     */
-    protected static MimeTypeService getService()
-    {
-        return (MimeTypeService) TurbineServices.
-                getInstance().getService(MimeTypeService.SERVICE_NAME);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/package.html b/src/java/org/apache/turbine/services/mimetype/package.html
deleted file mode 100644
index e4163e2..0000000
--- a/src/java/org/apache/turbine/services/mimetype/package.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Provides mapping between MIME types and their corresponding file extensions.
-<br/>
-This service has been deprecated in favor of the Fulcrum Mimetype component available from
-<a href="http://jakarta.apache.org/turbine/fulcrum/fulcrum-mimetype">Fulcrum Mimetype</a>
-<br/>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/mimetype/util/CharSetMap.java b/src/java/org/apache/turbine/services/mimetype/util/CharSetMap.java
deleted file mode 100644
index b0bc353..0000000
--- a/src/java/org/apache/turbine/services/mimetype/util/CharSetMap.java
+++ /dev/null
@@ -1,579 +0,0 @@
-package org.apache.turbine.services.mimetype.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import java.util.HashMap;
-import java.util.Hashtable;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-
-/**
- * This class maintains a set of mappers defining mappings
- * between locales and the corresponding charsets. The mappings
- * are defined as properties between locale and charset names.
- * The definitions can be listed in property files located in user's
- * home directory, Java home directory or the current class jar.
- * In addition, this class maintains static default mappings
- * and constructors support application specific mappings.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class CharSetMap
-{
-    /**
-     * The default charset when nothing else is applicable.
-     */
-    public static final String DEFAULT_CHARSET = "ISO-8859-1";
-
-    /**
-     * The name for charset mapper resources.
-     */
-    public static final String CHARSET_RESOURCE = "charset.properties";
-
-    /**
-     * Priorities of available mappers.
-     */
-    private static final int MAP_CACHE = 0;
-    private static final int MAP_PROG = 1;
-    private static final int MAP_HOME = 2;
-    private static final int MAP_SYS = 3;
-    private static final int MAP_JAR = 4;
-    private static final int MAP_COM = 5;
-
-    /**
-     * A common charset mapper for languages.
-     */
-    private static HashMap commonMapper = new HashMap();
-
-    static
-    {
-        commonMapper.put("ar", "ISO-8859-6");
-        commonMapper.put("be", "ISO-8859-5");
-        commonMapper.put("bg", "ISO-8859-5");
-        commonMapper.put("ca", "ISO-8859-1");
-        commonMapper.put("cs", "ISO-8859-2");
-        commonMapper.put("da", "ISO-8859-1");
-        commonMapper.put("de", "ISO-8859-1");
-        commonMapper.put("el", "ISO-8859-7");
-        commonMapper.put("en", "ISO-8859-1");
-        commonMapper.put("es", "ISO-8859-1");
-        commonMapper.put("et", "ISO-8859-1");
-        commonMapper.put("fi", "ISO-8859-1");
-        commonMapper.put("fr", "ISO-8859-1");
-        commonMapper.put("hr", "ISO-8859-2");
-        commonMapper.put("hu", "ISO-8859-2");
-        commonMapper.put("is", "ISO-8859-1");
-        commonMapper.put("it", "ISO-8859-1");
-        commonMapper.put("iw", "ISO-8859-8");
-        commonMapper.put("ja", "Shift_JIS");
-        commonMapper.put("ko", "EUC-KR");
-        commonMapper.put("lt", "ISO-8859-2");
-        commonMapper.put("lv", "ISO-8859-2");
-        commonMapper.put("mk", "ISO-8859-5");
-        commonMapper.put("nl", "ISO-8859-1");
-        commonMapper.put("no", "ISO-8859-1");
-        commonMapper.put("pl", "ISO-8859-2");
-        commonMapper.put("pt", "ISO-8859-1");
-        commonMapper.put("ro", "ISO-8859-2");
-        commonMapper.put("ru", "ISO-8859-5");
-        commonMapper.put("sh", "ISO-8859-5");
-        commonMapper.put("sk", "ISO-8859-2");
-        commonMapper.put("sl", "ISO-8859-2");
-        commonMapper.put("sq", "ISO-8859-2");
-        commonMapper.put("sr", "ISO-8859-5");
-        commonMapper.put("sv", "ISO-8859-1");
-        commonMapper.put("tr", "ISO-8859-9");
-        commonMapper.put("uk", "ISO-8859-5");
-        commonMapper.put("zh", "GB2312");
-        commonMapper.put("zh_TW", "Big5");
-    }
-
-    /**
-     * An array of available charset mappers.
-     */
-    private Map mappers[] = new Map[6];
-
-    /**
-     * Loads mappings from a stream.
-     *
-     * @param input an input stream.
-     * @return the mappings.
-     * @throws IOException for an incorrect stream.
-     */
-    protected static Map loadStream(InputStream input)
-            throws IOException
-    {
-        Properties props = new Properties();
-        props.load(input);
-        return new HashMap(props);
-    }
-
-    /**
-     * Loads mappings from a file.
-     *
-     * @param file a file.
-     * @return the mappings.
-     * @throws IOException for an incorrect file.
-     */
-    protected static Map loadFile(File file)
-            throws IOException
-    {
-        return loadStream(new FileInputStream(file));
-    }
-
-    /**
-     * Loads mappings from a file path.
-     *
-     * @param path a file path.
-     * @return the mappings.
-     * @throws IOException for an incorrect file.
-     */
-    protected static Map loadPath(String path)
-            throws IOException
-    {
-        return loadFile(new File(path));
-    }
-
-    /**
-     * Loads mappings from a resource.
-     *
-     * @param name a resource name.
-     * @return the mappings.
-     */
-    protected static Map loadResource(String name)
-    {
-        InputStream input = CharSetMap.class.getResourceAsStream(name);
-        if (input != null)
-        {
-            try
-            {
-                return loadStream(input);
-            }
-            catch (IOException x)
-            {
-                return null;
-            }
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Constructs a new charset map with default mappers.
-     */
-    public CharSetMap()
-    {
-        String path;
-        try
-        {
-            // Check whether the user directory contains mappings.
-            path = System.getProperty("user.home");
-            if (path != null)
-            {
-                path = path + File.separator + CHARSET_RESOURCE;
-                mappers[MAP_HOME] = loadPath(path);
-            }
-        }
-        catch (Exception x)
-        {
-        }
-
-        try
-        {
-            // Check whether the system directory contains mappings.
-            path = System.getProperty("java.home") +
-                    File.separator + "lib" + File.separator + CHARSET_RESOURCE;
-            mappers[MAP_SYS] = loadPath(path);
-        }
-        catch (Exception x)
-        {
-        }
-
-        // Check whether the current class jar contains mappings.
-        mappers[MAP_JAR] = loadResource("/META-INF/" + CHARSET_RESOURCE);
-
-        // Set the common mapper to have the lowest priority.
-        mappers[MAP_COM] = commonMapper;
-
-        // Set the cache mapper to have the highest priority.
-        mappers[MAP_CACHE] = new Hashtable();
-    }
-
-    /**
-     * Contructs a charset map from properties.
-     *
-     * @param props charset mapping propeties.
-     */
-    public CharSetMap(Properties props)
-    {
-        this();
-        mappers[MAP_PROG] = new HashMap(props);
-    }
-
-    /**
-     * Contructs a charset map read from a stream.
-     *
-     * @param input an input stream.
-     * @throws IOException for an incorrect stream.
-     */
-    public CharSetMap(InputStream input)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = loadStream(input);
-    }
-
-    /**
-     * Contructs a charset map read from a property file.
-     *
-     * @param file a property file.
-     * @throws IOException for an incorrect property file.
-     */
-    public CharSetMap(File file)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = loadFile(file);
-    }
-
-    /**
-     * Contructs a charset map read from a property file path.
-     *
-     * @param path a property file path.
-     * @throws IOException for an incorrect property file.
-     */
-    public CharSetMap(String path)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = loadPath(path);
-    }
-
-    /**
-     * Sets a locale-charset mapping.
-     *
-     * @param key the key for the charset.
-     * @param charset the corresponding charset.
-     */
-    public synchronized void setCharSet(String key,
-                                        String charset)
-    {
-        HashMap mapper = (HashMap) mappers[MAP_PROG];
-        mapper = mapper != null ?
-                (HashMap) mapper.clone() : new HashMap();
-        mapper.put(key, charset);
-        mappers[MAP_PROG] = mapper;
-        mappers[MAP_CACHE].clear();
-    }
-
-    /**
-     * Gets the charset for a locale. First a locale specific charset
-     * is searched for, then a country specific one and lastly a language
-     * specific one. If none is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @return the charset.
-     */
-    public String getCharSet(Locale locale)
-    {
-        // Check the cache first.
-        String key = locale.toString();
-        if (key.length() == 0)
-        {
-            key = "__" + locale.getVariant();
-            if (key.length() == 2)
-            {
-                return DEFAULT_CHARSET;
-            }
-        }
-        String charset = searchCharSet(key);
-        if (charset.length() == 0)
-        {
-            // Not found, perform a full search and update the cache.
-            String[] items = new String[3];
-            items[2] = locale.getVariant();
-            items[1] = locale.getCountry();
-            items[0] = locale.getLanguage();
-            charset = searchCharSet(items);
-            if (charset.length() == 0)
-            {
-                charset = DEFAULT_CHARSET;
-            }
-            mappers[MAP_CACHE].put(key, charset);
-        }
-        return charset;
-    }
-
-    /**
-     * Gets the charset for a locale with a variant. The search
-     * is performed in the following order:
-     * "lang"_"country"_"variant"="charset",
-     * _"counry"_"variant"="charset",
-     * "lang"__"variant"="charset",
-     * __"variant"="charset",
-     * "lang"_"country"="charset",
-     * _"country"="charset",
-     * "lang"="charset".
-     * If nothing of the above is found, the default charset is returned.
-     *
-     * @param locale the locale.
-     * @param variant a variant field.
-     * @return the charset.
-     */
-    public String getCharSet(Locale locale,
-                             String variant)
-    {
-        // Check the cache first.
-        if ((variant != null) &&
-                (variant.length() > 0))
-        {
-            String key = locale.toString();
-            if (key.length() == 0)
-            {
-                key = "__" + locale.getVariant();
-                if (key.length() > 2)
-                {
-                    key += '_' + variant;
-                }
-                else
-                {
-                    key += variant;
-                }
-            }
-            else if (locale.getCountry().length() == 0)
-            {
-                key += "__" + variant;
-            }
-            else
-            {
-                key += '_' + variant;
-            }
-            String charset = searchCharSet(key);
-            if (charset.length() == 0)
-            {
-                // Not found, perform a full search and update the cache.
-                String[] items = new String[4];
-                items[3] = variant;
-                items[2] = locale.getVariant();
-                items[1] = locale.getCountry();
-                items[0] = locale.getLanguage();
-                charset = searchCharSet(items);
-                if (charset.length() == 0)
-                {
-                    charset = DEFAULT_CHARSET;
-                }
-                mappers[MAP_CACHE].put(key, charset);
-            }
-            return charset;
-        }
-        else
-        {
-            return getCharSet(locale);
-        }
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @return the found charset or the default one.
-     */
-    public String getCharSet(String key)
-    {
-        String charset = searchCharSet(key);
-        return charset.length() > 0 ? charset : DEFAULT_CHARSET;
-    }
-
-    /**
-     * Gets the charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @param def the default charset if none is found.
-     * @return the found charset or the given default.
-     */
-    public String getCharSet(String key,
-                             String def)
-    {
-        String charset = searchCharSet(key);
-        return charset.length() > 0 ? charset : def;
-    }
-
-    /**
-     * Searches for a charset for a specified locale.
-     *
-     * @param items an array of locale items.
-     * @return the found charset or an empty string.
-     */
-    private String searchCharSet(String[] items)
-    {
-        String charset;
-        StringBuffer sb = new StringBuffer();
-        for (int i = items.length; i > 0; i--)
-        {
-            charset = searchCharSet(items, sb, i);
-            if (charset.length() > 0)
-            {
-                return charset;
-            }
-            sb.setLength(0);
-        }
-        return "";
-    }
-
-    /**
-     * Searches recursively for a charset for a specified locale.
-     *
-     * @param items an array of locale items.
-     * @param base a buffer of base items.
-     * @param count the number of items to go through.
-     * @return the found charset or an empty string.
-     */
-    private String searchCharSet(String[] items,
-                                 StringBuffer base,
-                                 int count)
-    {
-        if ((--count >= 0) &&
-                (items[count] != null) &&
-                (items[count].length() > 0))
-        {
-            String charset;
-            base.insert(0, items[count]);
-            int length = base.length();
-            for (int i = count; i > 0; i--)
-            {
-                if ((i == count) ||
-                        (i <= 1))
-                {
-                    base.insert(0, '_');
-                    length++;
-                }
-                charset = searchCharSet(items, base, i);
-                if (charset.length() > 0)
-                {
-                    return charset;
-                }
-                base.delete(0, base.length() - length);
-            }
-            return searchCharSet(base.toString());
-        }
-        else
-        {
-            return "";
-        }
-    }
-
-    /**
-     * Searches for a charset for a specified key.
-     *
-     * @param key the key for the charset.
-     * @return the found charset or an empty string.
-     */
-    private String searchCharSet(String key)
-    {
-        if ((key != null) &&
-                (key.length() > 0))
-        {
-            // Go through mappers.
-            Map mapper;
-            String charset;
-            for (int i = 0; i < mappers.length; i++)
-            {
-                mapper = mappers[i];
-                if (mapper != null)
-                {
-                    charset = (String) mapper.get(key);
-                    if (charset != null)
-                    {
-                        // Update the cache.
-                        if (i > MAP_CACHE)
-                        {
-                            mappers[MAP_CACHE].put(key, charset);
-                        }
-                        return charset;
-                    }
-                }
-            }
-
-            // Not found, add an empty string to the cache.
-            mappers[MAP_CACHE].put(key, "");
-        }
-        return "";
-    }
-
-    /**
-     * Sets a common locale-charset mapping.
-     *
-     * @param key the key for the charset.
-     * @param charset the corresponding charset.
-     */
-    protected synchronized void setCommonCharSet(String key,
-                                                 String charset)
-    {
-        HashMap mapper = (HashMap) ((HashMap) mappers[MAP_COM]).clone();
-        mapper.put(key, charset);
-        mappers[MAP_COM] = mapper;
-        mappers[MAP_CACHE].clear();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/util/MimeType.java b/src/java/org/apache/turbine/services/mimetype/util/MimeType.java
deleted file mode 100644
index 942e9da..0000000
--- a/src/java/org/apache/turbine/services/mimetype/util/MimeType.java
+++ /dev/null
@@ -1,564 +0,0 @@
-package org.apache.turbine.services.mimetype.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-
-/**
- * This class is used to represent parsed MIME types.
- * The representation is parsed from a string based
- * representation of the MIME type, as defined in the RFC1345.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.s
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class MimeType
-        implements Cloneable
-{
-    /**
-     * A list of well known MIME types.
-     */
-    public static MimeType TEXT_HTML;
-    public static MimeType TEXT_WML;
-    public static MimeType TEXT_HDML;
-    public static MimeType TEXT_CHTML;
-    public static MimeType TEXT_PLAIN;
-    public static MimeType MULTIPART;
-    public static MimeType MULTIPART_FORM_DATA;
-    public static MimeType APPLICATION_POSTSCRIPT;
-    public static MimeType APPLICATION_OCTET_STREAM;
-    public static MimeType APPLICATION_X_JAVA_AGENT;
-    public static MimeType APPLICATION_X_WWW_FORM_URLENCODED;
-    public static MimeType MESSAGE_HTTP;
-    public static MimeType TEXT_CSS;
-    public static MimeType TEXT;
-    public static MimeType IMAGE_GIF;
-    public static MimeType IMAGE_JPEG;
-    public static MimeType IMAGE_WBMP;
-
-    static
-    {
-        TEXT_HTML =
-                new MimeType("text/html");
-        TEXT_WML =
-                new MimeType("text/vnd.wap.wml");
-        TEXT_HDML =
-                new MimeType("text/x-hdml");
-        TEXT_CHTML =
-                new MimeType("text/x-chtml");
-        TEXT_PLAIN =
-                new MimeType("text/plain");
-        MULTIPART =
-                new MimeType("multipart/*");
-        MULTIPART_FORM_DATA =
-                new MimeType("multipart/form-data");
-        APPLICATION_POSTSCRIPT =
-                new MimeType("application/postscript");
-        APPLICATION_OCTET_STREAM =
-                new MimeType("application/octet-stream");
-        APPLICATION_X_JAVA_AGENT =
-                new MimeType("application/x-java-agent");
-        APPLICATION_X_WWW_FORM_URLENCODED =
-                new MimeType("application/x-www-form-urlencoded");
-        MESSAGE_HTTP =
-                new MimeType("message/http");
-        TEXT_CSS =
-                new MimeType("text/css");
-        TEXT =
-                new MimeType("text/*");
-        IMAGE_GIF =
-                new MimeType("image/gif");
-        IMAGE_JPEG =
-                new MimeType("image/jpeg");
-        IMAGE_WBMP =
-                new MimeType("image/vnd.wap.wbmp");
-    }
-
-    /**
-     * MIME type matching constants.
-     */
-    public static final int NO_MATCH = 0;
-    public static final int MATCH_TYPE = 1;
-    public static final int MATCH_SUBTYPE = 2;
-    public static final int MATCH_SPECIFIC_SUBTYPE = 3;
-
-    /**
-     * A string representation of the main type.
-     */
-    private String mimeType;
-
-    /**
-     * A string representation of the subtype.
-     */
-    private String mimeSubtype;
-
-    /**
-     * Parameter names.
-     */
-    private String parameterNames[];
-
-    /**
-     * Parameter values.
-     */
-    private String parameterValues[];
-
-    /**
-     * A string representation of the MIME type.
-     */
-    private String mimeTypeString;
-
-    /**
-     * Constructs a new MIME type by parsing a specification string.
-     *
-     * @param spec a string representing a MIME type.
-     */
-    public MimeType(String spec)
-    {
-        this(spec, true);
-    }
-
-    /**
-     * Constructs a new MIME type by parsing a specification string.
-     *
-     * @param spec a string representing a MIME type.
-     * @param parsep a flag for parsing parameters also.
-     * @throws IllegalArgumentException for parsing errors.
-     */
-    public MimeType(String spec,
-                    boolean parsep)
-    {
-        int start = 0;
-        char look = '\0';
-        int length = spec.length();
-
-        // Skip leading/trailing blanks.
-        while ((start < length) &&
-                Character.isWhitespace(spec.charAt(start)))
-        {
-            start++;
-        }
-        while ((length > start) &&
-                Character.isWhitespace(spec.charAt(length - 1)))
-        {
-            length--;
-        }
-
-        // Get the type.
-        StringBuffer sb = new StringBuffer();
-        while ((start < length) &&
-                ((look = spec.charAt(start)) != '/'))
-        {
-            sb.append((char) look);
-            start++;
-        }
-        if (look != '/')
-        {
-            throw new IllegalArgumentException(
-                    "Syntax error in MIME type " + spec);
-        }
-        mimeType = sb.toString();
-
-        // Get the subtype.
-        start++;
-        sb.setLength(0);
-        while ((start < length) &&
-                ((look = spec.charAt(start)) != ';') &&
-                !Character.isWhitespace(look))
-        {
-            sb.append((char) look);
-            start++;
-        }
-        mimeSubtype = sb.toString();
-
-        if (parsep)
-        {
-            // Get parameters, if any.
-            while ((start < length) &&
-                    Character.isWhitespace(spec.charAt(start)))
-            {
-                start++;
-            }
-            if (start < length)
-            {
-                if (spec.charAt(start) != ';')
-                {
-                    throw new IllegalArgumentException(
-                            "Syntax error in MIME type parameters " + spec);
-                }
-                start++;
-                ArrayList na = new ArrayList(4);
-                ArrayList va = new ArrayList(4);
-                while (start < length)
-                {
-                    // Get the name.
-                    while ((start < length) &&
-                            Character.isWhitespace(spec.charAt(start)))
-                    {
-                        start++;
-                    }
-                    sb.setLength(0);
-                    while ((start < length) &&
-                            ((look = spec.charAt(start)) != '=') &&
-                            !Character.isWhitespace(look))
-                    {
-                        sb.append(Character.toLowerCase((char) look));
-                        start++;
-                    }
-                    String name = sb.toString();
-
-                    // Get the value.
-                    while ((start < length) &&
-                            Character.isWhitespace(spec.charAt(start)))
-                    {
-                        start++;
-                    }
-                    if (spec.charAt(start) != '=')
-                    {
-                        throw new IllegalArgumentException(
-                                "Syntax error in MIME type parameters " + spec);
-                    }
-                    start++;
-                    while ((start < length) &&
-                            Character.isWhitespace(spec.charAt(start)))
-                    {
-                        start++;
-                    }
-                    sb.setLength(0);
-                    char delim = ';';
-                    if (spec.charAt(start) == '"')
-                    {
-                        start++;
-                        delim = '"';
-                    }
-                    while ((start < length) &&
-                            ((look = spec.charAt(start)) != delim) &&
-                            ((delim == '"') ||
-                            !Character.isWhitespace(look)))
-                    {
-                        sb.append((char) look);
-                        start++;
-                    }
-                    while ((start < length) &&
-                            (spec.charAt(start) != ';'))
-                    {
-                        start++;
-                    }
-                    start++;
-                    String value = sb.toString();
-
-                    na.add(name);
-                    va.add(value);
-                }
-                parameterNames = (String[]) na.toArray(new String[na.size()]);
-                parameterValues = (String[]) va.toArray(new String[va.size()]);
-            }
-        }
-    }
-
-    /**
-     * Contructs a new MIME type from specified types.
-     *
-     * @param type a type.
-     * @param subtype a subtype.
-     * @throws NullPointerException if type or subtype are nulls.
-     */
-    public MimeType(String type,
-                    String subtype)
-    {
-        this(type, subtype, null, null);
-    }
-
-    /**
-     * Contructs a new MIME type from specified parameters.
-     *
-     * @param type a type.
-     * @param subtype a subtype.
-     * @param names parameters names.
-     * @param values parameter values.
-     * @throws NullPointerException if type or subtype are nulls.
-     */
-    public MimeType(String type,
-                    String subtype,
-                    String names[],
-                    String values[])
-    {
-        if ((type == null) ||
-                (subtype == null))
-        {
-            throw new NullPointerException("MIME type or subtype missing");
-        }
-        mimeType = type.trim();
-        mimeSubtype = subtype.trim();
-        parameterNames = names;
-        parameterValues = values;
-    }
-
-    /**
-     * Compares the specified MIME type to this one
-     * and returns a matching level:
-     * NO_MATCH=types do not match,
-     * MATCH_TYPE=types match,
-     * MATCH_SPECIFIC_TYPE=types match exactly,
-     * MATCH_SUBTYPE=types match, subtypes match too,
-     * MATCH_SPECIFIC_SUBTYPE=types match, subtypes match exactly.
-     *
-     * @param other the MimeType to compare.
-     * @return the matching level.
-     */
-    public int match(MimeType other)
-    {
-        if (mimeType.equals("*") ||
-                other.mimeType.equals("*"))
-        {
-            return MATCH_TYPE;
-        }
-        else if (!mimeType.equalsIgnoreCase(other.mimeType))
-        {
-            return NO_MATCH;
-        }
-        else if (mimeSubtype.equals("*") ||
-                other.mimeSubtype.equals("*"))
-        {
-            return MATCH_SUBTYPE;
-        }
-        else if (!mimeSubtype.equalsIgnoreCase(other.mimeSubtype))
-        {
-            return NO_MATCH;
-        }
-        else
-        {
-            return MATCH_SPECIFIC_SUBTYPE;
-        }
-    }
-
-    /**
-     * Gets the main type of the MIME type.
-     *
-     * @return the main type as a string.
-     */
-    public String getType()
-    {
-        return mimeType;
-    }
-
-    /**
-     * Gets the subtype of the MIME type.
-     *
-     * @return the subtype as a string.
-     */
-    public String getSubtype()
-    {
-        return mimeSubtype;
-    }
-
-    /**
-     * Gets the type and the subtype of the MIME type.
-     *
-     * @return the types as a string.
-     */
-    public String getTypes()
-    {
-        return mimeType + '/' + mimeSubtype;
-    }
-
-    /**
-     * Checks whether the MIME type contains the specified parameter.
-     *
-     * @param param the name opf the parameter.
-     * @return true if the parameter found, otherwise false.
-     */
-    public boolean hasParameter(String param)
-    {
-        String[] na = parameterNames;
-        if (na != null)
-        {
-            for (int i = 0; i < na.length; i++)
-            {
-                if (na[i].equalsIgnoreCase(param))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Gets the value of a MIME type parameter.
-     * The first parameter with the specifed name will be returned.
-     *
-     * @param param the name of the parameter.
-     * @return the value of the parameter, or null.
-     */
-    public String getParameter(String param)
-    {
-        String[] na = parameterNames;
-        if (na != null)
-        {
-            String[] va = parameterValues;
-            for (int i = 0; i < na.length; i++)
-            {
-                if (na[i].equalsIgnoreCase(param))
-                {
-                    return va[i];
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Sets the value of a MIME type parameter replacing the old one.
-     *
-     * @param param the name of the parameter.
-     * @param value the value of the parameter.
-     */
-    public synchronized void setParameter(String param,
-                                          String value)
-    {
-        if (parameterNames != null)
-        {
-            for (int i = 0; i < parameterNames.length; i++)
-            {
-                if (parameterNames[i].equalsIgnoreCase(param))
-                {
-                    parameterValues[i] = value;
-                    mimeTypeString = null;
-                    return;
-                }
-            }
-        }
-        addParameter(param, value);
-    }
-
-    /**
-     * Adds a parameter to the MIME type.
-     *
-     * @param param the name of the parameter.
-     * @param value the value of the parameter.
-     */
-    public void addParameter(String param,
-                             String value)
-    {
-        addParameters(new String[]{param}, new String[]{value});
-    }
-
-    /**
-     * Adds parameters to the MIME type.
-     *
-     * @param params an array of parameter names.
-     * @param values an array of parameter values.
-     * @throw IllegalArgumentException for incorrect parameters.
-     */
-    public synchronized void addParameters(String[] params,
-                                           String[] values)
-    {
-        if ((params == null) ||
-                (values == null) ||
-                (params.length != values.length))
-            throw new IllegalArgumentException("Incorrect MIME type parameters");
-
-        if (parameterNames != null)
-        {
-            String[] na = new String[parameterNames.length + params.length];
-            String[] va = new String[parameterValues.length + values.length];
-            System.arraycopy(parameterNames, 0, na, 0, parameterNames.length);
-            System.arraycopy(params, 0, na, parameterNames.length, params.length);
-            System.arraycopy(parameterValues, 0, va, 0, parameterValues.length);
-            System.arraycopy(values, 0, va, parameterValues.length, values.length);
-            parameterNames = na;
-            parameterValues = va;
-        }
-        else
-        {
-            parameterNames = params;
-            parameterValues = values;
-        }
-        mimeTypeString = null;
-    }
-
-    /**
-     * Converts the MIME type into a string.
-     *
-     * @return the string representation of the MIME type.
-     */
-    public String toString()
-    {
-        if (mimeTypeString == null)
-        {
-            StringBuffer sb = new StringBuffer(mimeType);
-            sb.append('/');
-            sb.append(mimeSubtype);
-            String[] na = parameterNames;
-            if (na != null)
-            {
-                String[] va = parameterValues;
-                for (int i = 0; i < va.length; i++)
-                {
-                    sb.append(';');
-                    sb.append(na[i]);
-                    if (va[i] != null)
-                    {
-                        sb.append('=');
-                        sb.append(va[i]);
-                    }
-                }
-            }
-            mimeTypeString = sb.toString();
-        }
-        return mimeTypeString;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMap.java b/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMap.java
deleted file mode 100644
index d10b0d7..0000000
--- a/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMap.java
+++ /dev/null
@@ -1,451 +0,0 @@
-package org.apache.turbine.services.mimetype.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * This class maintains a set of mappers defining mappings
- * between MIME types and the corresponding file name extensions.
- * The mappings are defined as lines formed by a MIME type name
- * followed by a list of extensions separated by a whitespace.
- * The definitions can be listed in MIME type files located in user's
- * home directory, Java home directory or the current class jar.
- * In addition, this class maintains static default mappings
- * and constructors support application specific mappings.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class MimeTypeMap
-{
-    /**
-     * The default MIME type when nothing else is applicable.
-     */
-    public static final MimeType DEFAULT_MIMETYPE =
-            MimeType.APPLICATION_OCTET_STREAM;
-
-    /**
-     * The default MIME type as a string.
-     */
-    public static final String DEFAULT_TYPE = DEFAULT_MIMETYPE.toString();
-
-    /**
-     * The name for MIME type mapper resources.
-     */
-    public static final String MIMETYPE_RESOURCE = "mime.types";
-
-    /**
-     * Common MIME type extensions.
-     */
-    public static final String EXT_HTML = "html";
-    public static final String EXT_HTM = "htm";
-    public static final String EXT_WML = "wml";
-    public static final String EXT_HDML = "hdml";
-    public static final String EXT_HDM = "hdm";
-    public static final String EXT_CHTML = "chtml";
-    public static final String EXT_TEXT = "txt";
-    public static final String EXT_GIF = "gif";
-    public static final String EXT_JPEG = "jpeg";
-    public static final String EXT_JPG = "jpg";
-    public static final String EXT_WBMP = "wbmp";
-
-    /**
-     * Priorities of available mappers.
-     */
-    private static final int MAP_PROG = 0;
-    private static final int MAP_HOME = 1;
-    private static final int MAP_SYS = 2;
-    private static final int MAP_JAR = 3;
-    private static final int MAP_COM = 4;
-
-    /**
-     * A common MIME type mapper.
-     */
-    private static MimeTypeMapper commonMapper = new MimeTypeMapper();
-
-    static
-    {
-        commonMapper.setContentType(
-                MimeType.TEXT_HTML.toString() + " " + EXT_HTML + " " + EXT_HTM);
-        commonMapper.setContentType(
-                MimeType.TEXT_WML.toString() + " " + EXT_WML);
-        commonMapper.setContentType(
-                MimeType.TEXT_HDML.toString() + " " + EXT_HDML + " " + EXT_HDM);
-        commonMapper.setContentType(
-                MimeType.TEXT_CHTML.toString() + " " + EXT_CHTML);
-        commonMapper.setContentType(
-                MimeType.TEXT_PLAIN.toString() + " " + EXT_TEXT);
-        commonMapper.setContentType(
-                MimeType.IMAGE_GIF.toString() + " " + EXT_GIF);
-        commonMapper.setContentType(
-                MimeType.IMAGE_JPEG.toString() + " " + EXT_JPEG + " " + EXT_JPG);
-        commonMapper.setContentType(
-                MimeType.IMAGE_WBMP.toString() + " " + EXT_WBMP);
-    }
-
-    /**
-     * An array of available MIME type mappers.
-     */
-    private MimeTypeMapper mappers[] = new MimeTypeMapper[5];
-
-    /**
-     * Loads mappings from a file path.
-     *
-     * @param path a file path.
-     * @return the mappings.
-     * @throws IOException for an incorrect file.
-     */
-    protected static MimeTypeMapper loadPath(String path)
-            throws IOException
-    {
-        return new MimeTypeMapper(path);
-    }
-
-    /**
-     * Loads mappings from a resource.
-     *
-     * @param name a resource name.
-     * @return the mappings.
-     */
-    protected static MimeTypeMapper loadResource(String name)
-    {
-        InputStream input = MimeTypeMap.class.getResourceAsStream(name);
-        if (input != null)
-        {
-            try
-            {
-                return new MimeTypeMapper(input);
-            }
-            catch (IOException x)
-            {
-                return null;
-            }
-        }
-        else
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Constructs a new MIME type map with default mappers.
-     */
-    public MimeTypeMap()
-    {
-        String path;
-        try
-        {
-            // Check whether the user directory contains mappings.
-            path = System.getProperty("user.home");
-            if (path != null)
-            {
-                path = path + File.separator + MIMETYPE_RESOURCE;
-                mappers[MAP_HOME] = loadPath(path);
-            }
-        }
-        catch (Exception x)
-        {
-        }
-
-        try
-        {
-            // Check whether the system directory contains mappings.
-            path = System.getProperty("java.home") +
-                    File.separator + "lib" + File.separator + MIMETYPE_RESOURCE;
-            mappers[MAP_SYS] = loadPath(path);
-        }
-        catch (Exception x)
-        {
-        }
-
-        // Check whether the current class jar contains mappings.
-        mappers[MAP_JAR] = loadResource("/META-INF/" + MIMETYPE_RESOURCE);
-
-        // Set the common mapper to have the lowest priority.
-        mappers[MAP_COM] = commonMapper;
-    }
-
-    /**
-     * Contructs a MIME type map read from a stream.
-     *
-     * @param input an input stream.
-     * @throws IOException for an incorrect stream.
-     */
-    public MimeTypeMap(InputStream input)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = new MimeTypeMapper(input);
-    }
-
-    /**
-     * Contructs a MIME type map read from a file.
-     *
-     * @param path an input file.
-     * @throws IOException for an incorrect input file.
-     */
-    public MimeTypeMap(File file)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = new MimeTypeMapper(file);
-    }
-
-    /**
-     * Contructs a MIME type map read from a file path.
-     *
-     * @param path an input file path.
-     * @throws IOException for an incorrect input file.
-     */
-    public MimeTypeMap(String path)
-            throws IOException
-    {
-        this();
-        mappers[MAP_PROG] = new MimeTypeMapper(path);
-    }
-
-    /**
-     * Sets a MIME content type mapping to extensions.
-     *
-     * @param spec a MIME type extension specification to set.
-     */
-    public synchronized void setContentType(String spec)
-    {
-        if (mappers[MAP_PROG] == null)
-        {
-            mappers[MAP_PROG] = new MimeTypeMapper();
-        }
-        mappers[MAP_PROG].setContentType(spec);
-    }
-
-    /**
-     * Gets the MIME content type for a file as a string.
-     *
-     * @param file the file.
-     * @return the MIME type string.
-     */
-    public String getContentType(File file)
-    {
-        return getContentType(file.getName());
-    }
-
-    /**
-     * Gets the MIME content type for a named file as a string.
-     *
-     * @param name the name of the file.
-     * @return the MIME type string.
-     */
-    public String getContentType(String name)
-    {
-        int i = name.lastIndexOf('.');
-        if (i >= 0)
-        {
-            String ext = name.substring(i + 1);
-            return ext.length() > 0 ?
-                    getContentType(ext, DEFAULT_TYPE) : DEFAULT_TYPE;
-        }
-        else
-        {
-            return DEFAULT_TYPE;
-        }
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension as a string.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type string.
-     */
-    public String getContentType(String ext,
-                                 String def)
-    {
-        int i = ext.lastIndexOf('.');
-        if (i >= 0)
-        {
-            ext = ext.substring(i + 1);
-        }
-
-        String mime;
-        MimeTypeMapper mapper;
-        for (i = 0; i < mappers.length; i++)
-        {
-            mapper = mappers[i];
-            if (mapper != null)
-            {
-                mime = mapper.getContentType(ext);
-                if (mime != null)
-                {
-                    return mime;
-                }
-            }
-        }
-        return def;
-    }
-
-    /**
-     * Gets the MIME content type for a file.
-     *
-     * @param file the file.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(File file)
-    {
-        try
-        {
-            return new MimeType(getContentType(file));
-        }
-        catch (Exception x)
-        {
-            return DEFAULT_MIMETYPE;
-        }
-    }
-
-    /**
-     * Gets the MIME content type for a named file.
-     *
-     * @param name the name of the file.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(String name)
-    {
-        try
-        {
-            return new MimeType(getContentType(name));
-        }
-        catch (Exception x)
-        {
-            return DEFAULT_MIMETYPE;
-        }
-    }
-
-    /**
-     * Gets the MIME content type for a file name extension.
-     *
-     * @param ext the file name extension.
-     * @param def the default type if none is found.
-     * @return the MIME type.
-     */
-    public MimeType getMimeContentType(String ext,
-                                       String def)
-    {
-        try
-        {
-            return new MimeType(getContentType(ext, def));
-        }
-        catch (Exception x)
-        {
-            return DEFAULT_MIMETYPE;
-        }
-    }
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param type the MIME type as a string.
-     * @return the file name extension or null.
-     */
-    public String getDefaultExtension(String type)
-    {
-        String ext;
-        MimeTypeMapper mapper;
-        int i = type.indexOf(';');
-        if (i >= 0)
-        {
-            type = type.substring(0, i);
-        }
-        type = type.trim();
-        for (i = mappers.length - 1; i >= 0; i--)
-        {
-            mapper = mappers[i];
-            if (mapper != null)
-            {
-                ext = mapper.getExtension(type);
-                if (ext != null)
-                {
-                    return ext;
-                }
-            }
-        }
-        return null;
-    }
-
-    /**
-     * Gets the default file name extension for a MIME type.
-     * Note that the mappers are called in the reverse order.
-     *
-     * @param mime the MIME type.
-     * @return the file name extension or null.
-     */
-    public String getDefaultExtension(MimeType mime)
-    {
-        return getDefaultExtension(mime.getTypes());
-    }
-
-    /**
-     * Sets a common MIME content type mapping to extensions.
-     *
-     * @param spec a MIME type extension specification to set.
-     */
-    protected synchronized void setCommonContentType(String spec)
-    {
-        mappers[MAP_COM].setContentType(spec);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMapper.java b/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMapper.java
deleted file mode 100644
index fd09653..0000000
--- a/src/java/org/apache/turbine/services/mimetype/util/MimeTypeMapper.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.apache.turbine.services.mimetype.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-/**
- * This class defines mappings between MIME types and the corresponding
- * file name extensions. The mappings are defined as lines formed
- * by a MIME type name followed by a list of extensions separated
- * by a whitespace.
- *
- * @deprecated Use the Fulcrum Mimetype component instead.
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class MimeTypeMapper
-{
-    /**
-     * Mappings between MIME types and file name extensions.
-     */
-    private HashMap mimeTypeExtensions = new HashMap();
-    protected HashMap extensionMimeTypes = new HashMap();
-
-    /**
-     * Constructs an empty MIME type mapper.
-     */
-    public MimeTypeMapper()
-    {
-    }
-
-    /**
-     * Constructs a mapper reading from a stream.
-     *
-     * @param input an input stream.
-     * @throws IOException for an incorrect stream.
-     */
-    public MimeTypeMapper(InputStream input)
-            throws IOException
-    {
-        parse(new BufferedReader(
-                new InputStreamReader(input, CharSetMap.DEFAULT_CHARSET)));
-    }
-
-    /**
-     * Constructs a mapper reading from a file.
-     *
-     * @param file an input file.
-     * @throws IOException for an incorrect file.
-     */
-    public MimeTypeMapper(File file)
-            throws IOException
-    {
-        FileReader freader = new FileReader(file);
-        try
-        {
-            parse(new BufferedReader(freader));
-        }
-        finally
-        {
-            try
-            {
-                freader.close();
-            }
-            catch (IOException x)
-            {
-            }
-        }
-    }
-
-    /**
-     * Constructs a mapper reading from a file path.
-     *
-     * @param path an input file path.
-     * @throws IOException for an incorrect file.
-     */
-    public MimeTypeMapper(String path)
-            throws IOException
-    {
-        this(new File(path));
-    }
-
-    /**
-     * Sets a MIME content type mapping to extensions.
-     *
-     * @param spec a MIME type extension specification to parse.
-     */
-    public void setContentType(String spec)
-    {
-        try
-        {
-            parse(new BufferedReader(new StringReader(spec)));
-        }
-        catch (IOException x)
-        {
-        }
-    }
-
-    /**
-     * Gets a MIME content type corresponding to a specified file name extension.
-     *
-     * @param ext a file name extension.
-     * @return the corresponding MIME type as a string or null.
-     */
-    public String getContentType(String ext)
-    {
-        return (String) mimeTypeExtensions.get(ext);
-    }
-
-    /**
-     * Gets a file name extension corresponding to a specified MIME content type.
-     *
-     * @param mime a MIME type as a string.
-     * @return the corresponding file name extension or null.
-     */
-    public String getExtension(String type)
-    {
-        return (String) extensionMimeTypes.get(type);
-    }
-
-    /**
-     * Parses MIME type extensions.
-     *
-     * @param reader a reader to parse.
-     * @throws IOException for an incorrect reader.
-     */
-    protected synchronized void parse(BufferedReader reader)
-            throws IOException
-    {
-        int l,count = 0;
-        String next;
-        String str = null;
-        HashMap mimeTypes = (HashMap) extensionMimeTypes.clone();
-        HashMap extensions = (HashMap) mimeTypeExtensions.clone();
-        while ((next = reader.readLine()) != null)
-        {
-            str = str == null ? next : str + next;
-            if ((l = str.length()) == 0)
-            {
-                str = null;
-                continue;
-            }
-            // Check for continuation line.
-            if (str.charAt(l - 1) != '\\')
-            {
-                count += parseMimeTypeExtension(str, mimeTypes, extensions);
-                str = null;
-            }
-            else
-            {
-                str = str.substring(0, l - 1);
-            }
-        }
-        if (str != null)
-        {
-            count += parseMimeTypeExtension(str, mimeTypes, extensions);
-        }
-        if (count > 0)
-        {
-            extensionMimeTypes = mimeTypes;
-            mimeTypeExtensions = extensions;
-        }
-    }
-
-    /**
-     * Parses a MIME type extension.
-     *
-     * @param spec an extension specification to parse.
-     * @param mimeTypes a map of MIME types.
-     * @param extensions a map of extensions.
-     * @return the number of file name extensions parsed.
-     */
-    protected int parseMimeTypeExtension(String spec,
-                                         Map mimeTypes,
-                                         Map extensions)
-    {
-        int count = 0;
-        spec = spec.trim();
-        if ((spec.length() > 0) &&
-                (spec.charAt(0) != '#'))
-        {
-            StringTokenizer tokens = new StringTokenizer(spec);
-            String type = tokens.nextToken();
-            String ext;
-            while (tokens.hasMoreTokens())
-            {
-                ext = tokens.nextToken();
-                if (ext.length() == 0)
-                {
-                    continue;
-                }
-                extensions.put(ext, type);
-                if (count++ == 0)
-                {
-                    mimeTypes.put(type, ext);
-                }
-            }
-        }
-        return count;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/naming/NamingService.java b/src/java/org/apache/turbine/services/naming/NamingService.java
deleted file mode 100644
index bca4872..0000000
--- a/src/java/org/apache/turbine/services/naming/NamingService.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.apache.turbine.services.naming;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.naming.Context;
-
-import org.apache.turbine.services.Service;
-
-/**
- * Implementations of the NamingService interface provide JNDI naming
- * contexts.
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @version $Id$
- */
-public interface NamingService
-        extends Service
-{
-    String SERVICE_NAME = "NamingService";
-
-    /**
-     * Return the Context with the specified name.
-     *
-     * @param name The name of the context.
-     * @return The context with the specified name, or null if no context
-     * exists with that name.
-     */
-    Context getContext(String name);
-}
diff --git a/src/java/org/apache/turbine/services/naming/TurbineNamingService.java b/src/java/org/apache/turbine/services/naming/TurbineNamingService.java
deleted file mode 100644
index 3ae6e37..0000000
--- a/src/java/org/apache/turbine/services/naming/TurbineNamingService.java
+++ /dev/null
@@ -1,207 +0,0 @@
-package org.apache.turbine.services.naming;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.naming.Context;
-import javax.naming.InitialContext;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.RunData;
-
-/**
- * This class is the default implementation of NamingService, which
- * provides JNDI naming contexts.
- *
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:colin.chalmers@maxware.nl">Colin Chalmers</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TurbineNamingService
-        extends TurbineBaseService
-        implements NamingService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineNamingService.class);
-
-    /**
-     * A global Map of Property objects which are initialised using
-     * parameters from the ResourcesFile
-     */
-    private static Map contextPropsList = null;
-
-    /** All initial contexts known to this service */
-    private Map initialContexts = new HashMap();
-
-    /**
-     * Called the first time the Service is used.<br>
-     *
-     */
-    public void init()
-            throws InitializationException
-    {
-        // Context properties are specified in lines in the properties
-        // file that begin with "context.contextname.", allowing
-        // multiple named contexts to be used.  Everything after the
-        // "contextname."  is the name of the property that will be
-        // used by the InitialContext class to create a new context
-        // instance.
-
-        Configuration conf = Turbine.getConfiguration();
-        try
-        {
-            contextPropsList = new HashMap();
-
-            for (Iterator contextKeys = conf.subset("context").getKeys();
-                 contextKeys.hasNext();)
-            {
-                String key = (String) contextKeys.next();
-                int end = key.indexOf(".");
-
-                if (end == -1)
-                {
-                    continue;
-                }
-
-                String contextName = key.substring(0, end);
-                Properties contextProps = null;
-
-                if (contextPropsList.containsKey(contextName))
-                {
-                    contextProps = (Properties)
-                            contextPropsList.get(contextName);
-                }
-                else
-                {
-                    contextProps = new Properties();
-                }
-
-                contextProps.put(key.substring(end + 1),
-                        conf.getString(key));
-
-                contextPropsList.put(contextName, contextProps);
-            }
-
-            for (Iterator contextPropsKeys = contextPropsList.keySet().iterator();
-                 contextPropsKeys.hasNext();)
-            {
-                String key = (String) contextPropsKeys.next();
-                Properties contextProps = (Properties) contextPropsList.get(key);
-                InitialContext context = new InitialContext(contextProps);
-                initialContexts.put(key, context);
-            }
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            log.error("Failed to initialize JDNI contexts!", e);
-
-            throw new InitializationException(
-                    "Failed to initialize JDNI contexts!");
-        }
-    }
-
-
-    /**
-     * Return the Context with the specified name.  The Context is
-     * constructed using the properties for the context with the
-     * specified name; ie. those properties that start with
-     * "services.servicename.properties.name.".
-     *
-     * @param contextName The name of the context.
-     * @return The context with the specified name, or null if no
-     * context exists with that name.
-     */
-    public Context getContext(String contextName)
-    {
-        // Get just the properties for the context with the specified
-        // name.
-        Properties contextProps = null;
-
-        if (contextPropsList.containsKey(contextName))
-        {
-            contextProps = (Properties) contextPropsList.get(contextName);
-        }
-        else
-        {
-            contextProps = new Properties();
-        }
-
-        // Construct a new context with the properties.
-        try
-        {
-            return new InitialContext(contextProps);
-        }
-        catch (Exception e)
-        {
-            return null;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/naming/package.html b/src/java/org/apache/turbine/services/naming/package.html
deleted file mode 100644
index d09b59f..0000000
--- a/src/java/org/apache/turbine/services/naming/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Naming Service provides access to JNDI naming contexts.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/package.html b/src/java/org/apache/turbine/services/package.html
deleted file mode 100644
index a6bb060..0000000
--- a/src/java/org/apache/turbine/services/package.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Contains the Service framework for Turbine.
-<p>
-Services are singletons that have pluggable implementation
-and can participate in Turbine startup and shutdown.
-<p>
-<table><tr><td width="100%">
-
-<h3>What is a service?</h3>
-<ul>
-<li> Is a singleton -  there is only one instance of it in the system 
-     i.e. memory or connections are allocated once only, and the internal
-     state is common to all requesting clients.
-<li> Has pluggable implementation - you can use your own implementation
-     if you need, just change  an entry in TurbineResources.properties,
-     and there you go.
-<li> Can access ServletConfig at system startup time to process
-     relative paths and the like.
-<li> Can access RunData on the first Turbine doGet execution to
-     get URL we're running under and the like.
-<li> Can initialize itself (allocate memory, make connctions)
-     just before the client requests it for the first time. Services that
-     are never used by the application will not allocate resources.
-<li> Can execute some action upon system shutdown e.g. close the 
-     opened connections.
-</ul>		  
-<h3>The life cycle of a Service</h3>
-<p>
-A Service (or any other Initable, if we had any) is not supposed 
-to do much in it's constructor. Especialy it should not allocate
-any costly resources like large memory structures, DB or network
-connections and the like. It may well happen that the Service
-is sitting in the config file, but the application does not 
-need it, so allocating all resources at system startup might
-be a loss.
-<p>
-Early initialization is similar to the constructor. It is used
-to pass some information that the Service will need in it's
-future operation. 
-UniqueId Service uses the HttpRequest object from the first Turbine
-invocation to determine URL this instance is runnign under, to 
-generate instance ID.
-Early initialization method should process the configuration, store
-some values, but NOT allocate resources. There is still a chance
-that the Service will not be used.
-If the Service is ready to work (i.e. does not need any more objects
-being sent to it), and does not to allocate any resources during
-late initialization, the internal state can be changed so that
-getInit() returns true.
-<p>
-Late initialization happens when the Service is requested by the
-application for the first time. It should allocate any resources
-needed and chnge the state so that getInit() returns true.
-If getInit() returns false after init() is executed, the Service 
-has malfunctioned.
-<p>
-After late initialization, the Service is ready to perform actions
-on behalf of the application.
-<p>
-When the Service is no longer needed (this usually happens when 
-system is shutting down), the shutdown() method is called.
-shutdown() should deallocate all resources. If any error conditions
-occur they are ignored.
-<h3>Initialization of services outside of the Turbine servlet</h3>
-<p>
-In the case where specific Turbine services are desired outside the
-context of the <code>Turbine</code> servlet, a Turbine JAR file can be
-used in conjunction with a <i>properly configured</i>
-<code>TurbineResources.properties</code> file to initialize a specific
-set of services to use in your application.  The following sample
-code performs such initialization:
-<p>
-<blockquote><code><pre>
-String webAppRoot = "/var/httpd/webapps";
-String trProps = "/var/httpd/TurbineResources.properties";
-try
-{
-    TurbineConfig cfg = new TurbineConfig(webAppRoot, trProps);
-    cfg.init();
-}
-catch (Exception e)
-{
-    // If Turine fails to initialize, no logging service will be available.
-    String msg = "Failed to initialize Turbine: " + e.getMessage();
-    // Write directly to stderr to preserve the full stack trace.
-    System.err.println(msg);
-    e.printStackTrace();
-    throw new Error(msg);
-}
-</pre></code></blockquote>
-</td></tr></table>
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/pool/PoolService.java b/src/java/org/apache/turbine/services/pool/PoolService.java
deleted file mode 100644
index 5331c0f..0000000
--- a/src/java/org/apache/turbine/services/pool/PoolService.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package org.apache.turbine.services.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The Pool Service extends the Factory Service by adding support
- * for pooling instantiated objects. When a new instance is
- * requested, the service first checks its pool if one is available.
- * If the the pool is empty, a new object will be instantiated
- * from the specified class. If only class name is given, the request
- * to create an intance will be forwarded to the Factory Service.
- *
- * <p>For objects implementing the Recyclable interface, a recycle
- * method will be called, when they are taken from the pool, and
- * a dispose method, when they are returned to the pool.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface PoolService
-        extends Service
-{
-    /** The key under which this service is stored in TurbineServices. */
-    String SERVICE_NAME = "PoolService";
-    
-    /** The default pool capacity. */
-    int DEFAULT_POOL_CAPACITY = 128;
-    
-    /** The name of the pool capacity property */
-    String POOL_CAPACITY_KEY = "pool.capacity";
-    
-    /** Are we running in debug mode? */
-    String POOL_DEBUG_KEY = "pool.debug";
-
-    /** Default Value for debug mode */
-    boolean POOL_DEBUG_DEFAULT = false;
-
-    /**
-     * Gets an instance of a named class.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            ClassLoader loader)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            Object[] params,
-            String[] signature)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a named class using a specified class loader.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * <p>Class loaders are supported only if the isLoaderSupported
-     * method returns true. Otherwise the loader parameter is ignored.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if instantiation fails.
-     */
-    Object getInstance(String className,
-            ClassLoader loader,
-            Object[] params,
-            String[] signature)
-            throws TurbineException;
-
-    /**
-     * Tests if specified class loaders are supported for a named class.
-     *
-     * @param className the name of the class.
-     * @return true if class loaders are supported, false otherwise.
-     * @throws TurbineException if test fails.
-     * @deprecated Use TurbineFactory.isLoaderSupported(className)
-     */
-    boolean isLoaderSupported(String className)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    Object getInstance(Class clazz)
-            throws TurbineException;
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    Object getInstance(Class clazz,
-            Object params[],
-            String signature[])
-            throws TurbineException;
-
-    /**
-     * Puts a used object back to the pool. Objects implementing
-     * the Recyclable interface can provide a recycle method to
-     * be called when they are reused and a dispose method to be
-     * called when they are returned to the pool.
-     *
-     * @param instance the object instance to recycle.
-     * @return true if the instance was accepted.
-     */
-    boolean putInstance(Object instance);
-
-    /**
-     * Gets the capacity of the pool for a named class.
-     *
-     * @param className the name of the class.
-     */
-    int getCapacity(String className);
-
-    /**
-     * Sets the capacity of the pool for a named class.
-     * Note that the pool will be cleared after the change.
-     *
-     * @param className the name of the class.
-     * @param capacity the new capacity.
-     */
-    void setCapacity(String className,
-                     int capacity);
-
-    /**
-     * Gets the current size of the pool for a named class.
-     *
-     * @param className the name of the class.
-     */
-    int getSize(String className);
-
-    /**
-     * Clears instances of a named class from the pool.
-     *
-     * @param className the name of the class.
-     */
-    void clearPool(String className);
-
-    /**
-     * Clears all instances from the pool.
-     */
-    void clearPool();
-
-}
diff --git a/src/java/org/apache/turbine/services/pool/TurbinePool.java b/src/java/org/apache/turbine/services/pool/TurbinePool.java
deleted file mode 100644
index 8a7a57f..0000000
--- a/src/java/org/apache/turbine/services/pool/TurbinePool.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.apache.turbine.services.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a static accessor to common pooling tasks.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public abstract class TurbinePool
-{
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(String className)
-            throws TurbineException
-    {
-        return getService().getInstance(className);
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * The specified class loader will be passed to the Factory Service.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(String className,
-                                     ClassLoader loader)
-            throws TurbineException
-    {
-        return getService().getInstance(className, loader);
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(String className,
-                                     Object[] params,
-                                     String[] signature)
-            throws TurbineException
-    {
-        return getService().getInstance(className, params, signature);
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     * The specified class loader will be passed to the Factory Service.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(String className,
-                                     ClassLoader loader,
-                                     Object[] params,
-                                     String[] signature)
-            throws TurbineException
-    {
-        return getService().getInstance(className, loader, params, signature);
-    }
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(Class clazz)
-            throws TurbineException
-    {
-        return getService().getInstance(clazz);
-    }
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public static Object getInstance(Class clazz,
-                                     Object params[],
-                                     String signature[])
-            throws TurbineException
-    {
-        return getService().getInstance(clazz, params, signature);
-    }
-
-    /**
-     * Puts a used object back to the pool. Objects implementing
-     * the Recyclable interface can provide a recycle method to
-     * be called when they are reused and a dispose method to be
-     * called when they are returned to the pool.
-     *
-     * @param instance the object instance to recycle.
-     * @return true if the instance was accepted.
-     */
-    public static boolean putInstance(Object instance)
-    {
-        return getService().putInstance(instance);
-    }
-
-    /**
-     * Gets the pool service implementation.
-     *
-     * @return the pool service implementation.
-     */
-    public static PoolService getService()
-    {
-        return (PoolService) TurbineServices.
-                getInstance().getService(PoolService.SERVICE_NAME);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pool/TurbinePoolService.java b/src/java/org/apache/turbine/services/pool/TurbinePoolService.java
deleted file mode 100644
index b6609ed..0000000
--- a/src/java/org/apache/turbine/services/pool/TurbinePoolService.java
+++ /dev/null
@@ -1,670 +0,0 @@
-package org.apache.turbine.services.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.lang.reflect.Method;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.factory.FactoryService;
-import org.apache.turbine.services.factory.TurbineFactory;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.pool.ArrayCtorRecyclable;
-import org.apache.turbine.util.pool.BoundedBuffer;
-import org.apache.turbine.util.pool.Recyclable;
-
-/**
- * The Pool Service extends the Factory Service by adding support
- * for pooling instantiated objects. When a new instance is
- * requested, the service first checks its pool if one is available.
- * If the the pool is empty, a new instance will be requested
- * from the FactoryService.
- *
- * <p>For objects implementing the Recyclable interface, a recycle
- * method will be called, when they taken from the pool, and
- * a dispose method, when they are returned to the pool.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbinePoolService
-        extends TurbineBaseService
-        implements PoolService
-{
-    /** Are we currently debugging the pool recycling? */
-    private boolean debugPool = false;
-
-    /** Internal Reference to the Factory */
-    private FactoryService factoryService;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbinePoolService.class);
-
-    /**
-     * An inner class for class specific pools.
-     */
-    private class PoolBuffer
-    {
-        /**
-         * An inner class for cached recycle methods.
-         */
-        private class Recycler
-        {
-            /** The recycle method. */
-            private final Method recycle;
-
-            /** The signature. */
-            private final String[] signature;
-
-            /**
-             * Constructs a new recycler.
-             *
-             * @param rec the recycle method.
-             * @param sign the signature.
-             */
-            public Recycler(Method rec, String[] sign)
-            {
-                recycle = rec;
-                signature = ((sign != null) && (sign.length > 0))
-                        ? sign : null;
-            }
-
-            /**
-             * Matches the given signature against
-             * that of the recycle method of this recycler.
-             *
-             * @param sign the signature.
-             * @return the matching recycle method or null.
-             */
-            public Method match(String[] sign)
-            {
-                if ((sign != null) && (sign.length > 0))
-                {
-                    if ((signature != null)
-                            && (sign.length == signature.length))
-                    {
-                        for (int i = 0; i < signature.length; i++)
-                        {
-                            if (!signature[i].equals(sign[i]))
-                            {
-                                return null;
-                            }
-                        }
-                        return recycle;
-                    }
-                    else
-                    {
-                        return null;
-                    }
-                }
-                else if (signature == null)
-                {
-                    return recycle;
-                }
-                else
-                {
-                    return null;
-                }
-            }
-        }
-
-        /** A buffer for class instances. */
-        private BoundedBuffer pool;
-
-        /** A flag to determine if a more efficient recycler is implemented. */
-        private boolean arrayCtorRecyclable;
-
-        /** A cache for recycling methods. */
-        private ArrayList recyclers;
-
-        /**
-         * Constructs a new pool buffer with a specific capacity.
-         *
-         * @param capacity a capacity.
-         */
-        public PoolBuffer(int capacity)
-        {
-            pool = new BoundedBuffer(capacity);
-        }
-
-        /**
-         * Tells pool that it contains objects which can be
-         * initialized using an Object array.
-         *
-         * @param isArrayCtor a <code>boolean</code> value
-         */
-        public void setArrayCtorRecyclable(boolean isArrayCtor)
-        {
-            arrayCtorRecyclable = isArrayCtor;
-        }
-
-        /**
-         * Polls for an instance from the pool.
-         *
-         * @return an instance or null.
-         */
-        public Object poll(Object[] params, String[] signature)
-                throws TurbineException
-        {
-            // If we're debugging the recycling code, we want different
-            // objects to be used when pulling from the pool. Ensure that
-            // each pool fills up at least to half its capacity.
-            if (debugPool && (pool.size() < (pool.capacity() / 2)))
-            {
-                log.debug("Size: " + pool.size() 
-                        + ", capacity: " + pool.capacity());
-                return null;
-            }
-
-            Object instance = pool.poll();
-            if (instance != null)
-            {
-                if (arrayCtorRecyclable)
-                {
-                    ((ArrayCtorRecyclable) instance).recycle(params);
-                }
-                else if (instance instanceof Recyclable)
-                {
-                    try
-                    {
-                        if ((signature != null) && (signature.length > 0))
-                        {
-                            /* Get the recycle method from the cache. */
-                            Method recycle = getRecycle(signature);
-                            if (recycle == null)
-                            {
-                                synchronized (this)
-                                {
-                                    /* Make a synchronized recheck. */
-                                    recycle = getRecycle(signature);
-                                    if (recycle == null)
-                                    {
-                                        Class clazz = instance.getClass();
-                                        recycle = clazz.getMethod("recycle",
-                                                factoryService.getSignature(
-                                                        clazz, params, signature));
-                                        ArrayList cache = recyclers != null
-                                                ? (ArrayList) recyclers.clone()
-                                                : new ArrayList();
-                                        cache.add(
-                                                new Recycler(recycle, signature));
-                                        recyclers = cache;
-                                    }
-                                }
-                            }
-                            recycle.invoke(instance, params);
-                        }
-                        else
-                        {
-                            ((Recyclable) instance).recycle();
-                        }
-                    }
-                    catch (Exception x)
-                    {
-                        throw new TurbineException(
-                                "Recycling failed for " + instance.getClass().getName(), x);
-                    }
-                }
-            }
-            return instance;
-        }
-
-        /**
-         * Offers an instance to the pool.
-         *
-         * @param instance an instance.
-         */
-        public boolean offer(Object instance)
-        {
-            if (instance instanceof Recyclable)
-            {
-                try
-                {
-                    ((Recyclable) instance).dispose();
-                }
-                catch (Exception x)
-                {
-                    return false;
-                }
-            }
-            return pool.offer(instance);
-        }
-
-        /**
-         * Returns the capacity of the pool.
-         *
-         * @return the capacity.
-         */
-        public int capacity()
-        {
-            return pool.capacity();
-        }
-
-        /**
-         * Returns the size of the pool.
-         *
-         * @return the size.
-         */
-        public int size()
-        {
-            return pool.size();
-        }
-
-        /**
-         * Returns a cached recycle method
-         * corresponding to the given signature.
-         *
-         * @param signature the signature.
-         * @return the recycle method or null.
-         */
-        private Method getRecycle(String[] signature)
-        {
-            ArrayList cache = recyclers;
-            if (cache != null)
-            {
-                Method recycle;
-                for (Iterator i = cache.iterator(); i.hasNext();)
-                {
-                    recycle = ((Recycler) i.next()).match(signature);
-                    if (recycle != null)
-                    {
-                        return recycle;
-                    }
-                }
-            }
-            return null;
-        }
-    }
-
-    /**
-     * The default capacity of pools.
-     */
-    private int poolCapacity = DEFAULT_POOL_CAPACITY;
-
-    /**
-     * The pool repository, one pool for each class.
-     */
-    private HashMap poolRepository = new HashMap();
-
-    /**
-     * Constructs a Pool Service.
-     */
-    public TurbinePoolService()
-    {
-    }
-
-    /**
-     * Initializes the service by setting the pool capacity.
-     *
-     * @param config initialization configuration.
-     * @throws InitializationException if initialization fails.
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        int capacity = conf.getInt(POOL_CAPACITY_KEY,
-                DEFAULT_POOL_CAPACITY);
-
-        if (capacity <= 0)
-        {
-            throw new IllegalArgumentException("Capacity must be >0");
-        }
-        poolCapacity = capacity;
-
-        debugPool = conf.getBoolean(POOL_DEBUG_KEY,
-                POOL_DEBUG_DEFAULT);
-        
-        if (debugPool)
-        {
-            log.info("Activated Pool Debugging!");
-        }
-
-        factoryService = TurbineFactory.getService();
-        
-        if (factoryService == null)
-        {
-            throw new InitializationException("Factory Service is not configured"
-                    + " but required for the Pool Service!");
-        }
-        
-        setInit(true);
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     *
-     * @param className the name of the class.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(String className)
-            throws TurbineException
-    {
-        Object instance = pollInstance(className, null, null);
-        return (instance == null)
-                ? factoryService.getInstance(className)
-                : instance;
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * The specified class loader will be passed to the Factory Service.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(String className,
-                              ClassLoader loader)
-            throws TurbineException
-    {
-        Object instance = pollInstance(className, null, null);
-        return (instance == null)
-                ? factoryService.getInstance(className, loader)
-                : instance;
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(String className,
-                              Object[] params,
-                              String[] signature)
-            throws TurbineException
-    {
-        Object instance = pollInstance(className, params, signature);
-        return (instance == null)
-                ? factoryService.getInstance(className, params, signature)
-                : instance;
-    }
-
-    /**
-     * Gets an instance of a named class either from the pool
-     * or by calling the Factory Service if the pool is empty.
-     * Parameters for its constructor are given as an array of objects,
-     * primitive types must be wrapped with a corresponding class.
-     * The specified class loader will be passed to the Factory Service.
-     *
-     * @param className the name of the class.
-     * @param loader the class loader.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(String className,
-                              ClassLoader loader,
-                              Object[] params,
-                              String[] signature)
-            throws TurbineException
-    {
-        Object instance = pollInstance(className, params, signature);
-        return (instance == null)
-                ? factoryService.getInstance(className, loader, params, signature)
-                : instance;
-    }
-
-    /**
-     * Tests if specified class loaders are supported for a named class.
-     *
-     * @param className the name of the class.
-     * @return true if class loaders are supported, false otherwise.
-     * @throws TurbineException if test fails.
-     * @deprecated Use TurbineFactory.isLoaderSupported(className);
-     */
-    public boolean isLoaderSupported(String className)
-            throws TurbineException
-    {
-        return factoryService.isLoaderSupported(className);
-    }
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(Class clazz)
-            throws TurbineException
-    {
-        Object instance = pollInstance(clazz.getName(), null, null);
-        return (instance == null)
-                ? factoryService.getInstance(clazz.getName()) 
-                : instance;
-    }
-
-    /**
-     * Gets an instance of a specified class either from the pool
-     * or by instatiating from the class if the pool is empty.
-     *
-     * @param clazz the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the instance.
-     * @throws TurbineException if recycling fails.
-     */
-    public Object getInstance(Class clazz,
-                              Object params[],
-                              String signature[])
-            throws TurbineException
-    {
-        Object instance = pollInstance(clazz.getName(), params, signature);
-        return (instance == null)
-                ? factoryService.getInstance(clazz.getName(), params, signature)
-                : instance;
-    }
-
-    /**
-     * Puts a used object back to the pool. Objects implementing
-     * the Recyclable interface can provide a recycle method to
-     * be called when they are reused and a dispose method to be
-     * called when they are returned to the pool.
-     *
-     * @param instance the object instance to recycle.
-     * @return true if the instance was accepted.
-     */
-    public boolean putInstance(Object instance)
-    {
-        if (instance != null)
-        {
-            HashMap repository = poolRepository;
-            String className = instance.getClass().getName();
-            PoolBuffer pool = (PoolBuffer) repository.get(className);
-            if (pool == null)
-            {
-                pool = new PoolBuffer(getCapacity(className));
-                repository = (HashMap) repository.clone();
-                repository.put(className, pool);
-                poolRepository = repository;
-
-                if (instance instanceof ArrayCtorRecyclable)
-                {
-                    pool.setArrayCtorRecyclable(true);
-                }
-            }
-            return pool.offer(instance);
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Gets the capacity of the pool for a named class.
-     *
-     * @param className the name of the class.
-     */
-    public int getCapacity(String className)
-    {
-        PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
-        if (pool == null)
-        {
-            /* Check class specific capacity. */
-            int capacity;
-
-            Configuration conf = getConfiguration();
-            capacity = conf.getInt(
-                    POOL_CAPACITY_KEY + '.' + className,
-                    poolCapacity);
-            capacity = (capacity <= 0) ? poolCapacity : capacity;
-            return capacity;
-        }
-        else
-        {
-            return pool.capacity();
-        }
-    }
-
-    /**
-     * Sets the capacity of the pool for a named class.
-     * Note that the pool will be cleared after the change.
-     *
-     * @param className the name of the class.
-     * @param capacity the new capacity.
-     */
-    public void setCapacity(String className,
-                            int capacity)
-    {
-        HashMap repository = poolRepository;
-        repository = (repository != null)
-                ? (HashMap) repository.clone() : new HashMap();
-        
-        capacity = (capacity <= 0) ? poolCapacity : capacity;
-
-        repository.put(className, new PoolBuffer(capacity));
-        poolRepository = repository;
-    }
-
-    /**
-     * Gets the current size of the pool for a named class.
-     *
-     * @param className the name of the class.
-     */
-    public int getSize(String className)
-    {
-        PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
-        return (pool != null) ? pool.size() : 0;
-    }
-
-    /**
-     * Clears instances of a named class from the pool.
-     *
-     * @param className the name of the class.
-     */
-    public void clearPool(String className)
-    {
-        HashMap repository = poolRepository;
-        if (repository.get(className) != null)
-        {
-            repository = (HashMap) repository.clone();
-            repository.remove(className);
-            poolRepository = repository;
-        }
-    }
-
-    /**
-     * Clears all instances from the pool.
-     */
-    public void clearPool()
-    {
-        poolRepository = new HashMap();
-    }
-
-    /**
-     * Polls and recycles an object of the named class from the pool.
-     *
-     * @param className the name of the class.
-     * @param params an array containing the parameters of the constructor.
-     * @param signature an array containing the signature of the constructor.
-     * @return the object or null.
-     * @throws TurbineException if recycling fails.
-     */
-    private Object pollInstance(String className,
-                                Object[] params,
-                                String[] signature)
-            throws TurbineException
-    {
-        PoolBuffer pool = (PoolBuffer) poolRepository.get(className);
-        return (pool != null) ? pool.poll(params, signature) : null;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pool/package.html b/src/java/org/apache/turbine/services/pool/package.html
deleted file mode 100644
index 2f35e57..0000000
--- a/src/java/org/apache/turbine/services/pool/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The pool service can keep a stock of objects and recycle them.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/pull/ApplicationTool.java b/src/java/org/apache/turbine/services/pull/ApplicationTool.java
deleted file mode 100644
index 3790311..0000000
--- a/src/java/org/apache/turbine/services/pull/ApplicationTool.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.apache.turbine.services.pull;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Tools that go into the Toolbox should implement this interface.
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @version $Id$
- */
-public interface ApplicationTool
-{
-    /**
-     * Initialize the application tool. The data parameter holds a different
-     * type depending on how the tool is being instantiated:
-     * <ul>
-     * <li>For global tools data will be null</li>
-     * <li>For request tools data will be of type RunData</li>
-     * <li>For session and authorized tools data will be of type User</li>
-     * </ul>
-     * <p>
-     * It is possible that session scope tools will be initialized with a null
-     * <code>User</code> object.  This happens when the first request on a
-     * session happens to the be login action.
-     * <p>
-     * If your session tool depends on having a <code>User</code> object, you
-     * should look at implementing the {@link RunDataApplicationTool} interface
-     * instead.
-     *
-     * @param data initialization data
-     */
-    void init(Object data);
-
-    /**
-     * Refresh the application tool. This is
-     * necessary for development work where you
-     * probably want the tool to refresh itself
-     * if it is using configuration information
-     * that is typically cached after initialization
-     */
-    void refresh();
-}
diff --git a/src/java/org/apache/turbine/services/pull/PipelineDataApplicationTool.java b/src/java/org/apache/turbine/services/pull/PipelineDataApplicationTool.java
deleted file mode 100644
index a69c2af..0000000
--- a/src/java/org/apache/turbine/services/pull/PipelineDataApplicationTool.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Created on 16-Jul-2004
- *
- */
-package org.apache.turbine.services.pull;
-
-import org.apache.turbine.pipeline.PipelineData;
-
-
-/**
- * Interface for tools to be init'd and refreshed using a PipelineData
- * object 
- * Code largely taken from ApplicationTool. 
- * 
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public interface PipelineDataApplicationTool {
-
-    /**
-     * Initialize the application tool. The data parameter holds a different
-     * type depending on how the tool is being instantiated:
-     * <ul>
-     * <li>For global tools data will be null</li>
-     * <li>For request tools data will be of type PipelineData</li>
-     * <li>For session and authorized tools data will be of type User</li>
-     * </ul>
-     * <p>
-     * It is possible that session scope tools will be initialized with a null
-     * <code>User</code> object.  This happens when the first request on a
-     * session happens to the be login action.  The next request on the session
-     * will cause the session tool to be refreshed if
-     * <code>tools.per.request.refresh</code> is set to <code>true</code>
-     * in <code>TurbineResources.properties</code>.  You will then be able to
-     * get a <code>User</code> object from the instance of
-     * <code>RunData</object>.
-     *
-     * @param data initialization data
-     */
-    public void init(Object data);
-
-    /**
-     * Refresh the application tool. This is
-     * necessary for development work where you
-     * probably want the tool to refresh itself
-     * if it is using configuration information
-     * that is typically cached after initialization
-     *
-     * @param data The current PipelineData Object
-     */
-    public void refresh(PipelineData data);
-
-    
-}
diff --git a/src/java/org/apache/turbine/services/pull/PullService.java b/src/java/org/apache/turbine/services/pull/PullService.java
deleted file mode 100644
index 5f4c3c7..0000000
--- a/src/java/org/apache/turbine/services/pull/PullService.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package org.apache.turbine.services.pull;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * The Pull Service manages the creation of application
- * tools that are available to all templates in a
- * Turbine application. By using the Pull Service you
- * can avoid having to make Screens to populate a
- * context for use in a particular template. The Pull
- * Service creates a set of tools, as specified in
- * the TR.props file.
- *
- * These tools can have global scope, request scope,
- * authorized or session scope (i.e. stored in user temp hashmap)
- * or persistent scope (i.e. stored in user perm hashmap)
- *
- * The standard way of referencing these global
- * tools is through the toolbox handle. This handle
- * is typically $toolbox, but can be specified in the
- * TR.props file.
- *
- * So, for example, if you had a UI Manager tool
- * which created a set of UI attributes from a
- * properties file, and one of the properties
- * was 'bgcolor', then you could access this
- * UI attribute with $ui.bgcolor. The identifier
- * that is given to the tool, in this case 'ui', can
- * be specified as well.
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public interface PullService
-        extends Service
-{
-    /** The key under which this service is stored in TurbineServices. */
-    String SERVICE_NAME = "PullService";
-
-    /** Property Key for the global tools */
-    String GLOBAL_TOOL = "tool.global";
-
-    /** Property Key for the request tools */
-    String REQUEST_TOOL = "tool.request";
-
-    /** Property Key for the session tools */
-    String SESSION_TOOL = "tool.session";
-
-    /** Property Key for the authorized tools */
-    String AUTHORIZED_TOOL = "tool.authorized";
-
-    /** Property Key for the persistent tools */
-    String PERSISTENT_TOOL = "tool.persistent";
-
-    /** Property tag for application tool resources directory */
-    String TOOL_RESOURCES_DIR_KEY = "tools.resources.dir";
-
-    /**
-     * Default value for the application tool resources. This is relative
-     * to the webapp root
-     */
-    String TOOL_RESOURCES_DIR_DEFAULT = "resources";
-
-    /**
-     * Property tag for per request tool refreshing (for obvious reasons
-     * has no effect for per-request tools)
-     */
-    String TOOLS_PER_REQUEST_REFRESH_KEY = "tools.per.request.refresh";
-
-    /** Default value for per request tool refreshing */
-    boolean TOOLS_PER_REQUEST_REFRESH_DEFAULT = false;
-
-    /** prefix for key used in the session to store session scope pull tools */
-    String SESSION_TOOLS_ATTRIBUTE_PREFIX = "turbine.sessiontools.";
-
-    /**
-     * Get the context containing global tools that will be
-     * use as part of the Turbine Pull Model.
-     *
-     * @return A Context object which contains the
-     *         Global Tool instances.
-     */
-    Context getGlobalContext();
-
-    /**
-     * Populate the given context with all request, session, authorized
-     * and persistent scope tools (it is assumed that the context
-     * already wraps the global context, and thus already contains
-     * the global tools).
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData object for request specific data
-     */
-     void populateContext(Context context, PipelineData pipelineData);
-
-     /**
-      * Populate the given context with all request, session, authorized
-      * and persistent scope tools (it is assumed that the context
-      * already wraps the global context, and thus already contains
-      * the global tools).
-      *
-      * @param context a Velocity Context to populate
-      * @param data a RunData object for request specific data
-      */
-      void populateContext(Context context, RunData data);
-
-    /**
-     * Return the absolute path of the resources directory
-     * used by application tools.
-     *
-     * @return A directory path in the file system or null.
-     */
-    String getAbsolutePathToResourcesDirectory();
-
-    /**
-     * Return the resources directory. This is relative
-     * to the webapp context.
-     *
-     * @return A directory path to the resources directory relative to the webapp root or null.
-     */
-    String getResourcesDirectory();
-
-    /**
-     * Refresh the global tools .
-     * @deprecated No longer needed as Pull and Velocity Service are now more separate.
-     */
-    void refreshGlobalTools();
-
-    /**
-     * Shoud we refresh the tools
-     * on each request. For development purposes.
-     *
-     * @return true if we should refresh the tools on every request.
-     * @deprecated No longer needed as Pull and Velocity Service are now more separate.
-     */
-    boolean refreshToolsPerRequest();
-
-    /**
-     * Release tool instances from the given context to the
-     * object pool
-     *
-     * @param context a Velocity Context to release tools from
-     */
-    void releaseTools(Context context);
-}
diff --git a/src/java/org/apache/turbine/services/pull/RunDataApplicationTool.java b/src/java/org/apache/turbine/services/pull/RunDataApplicationTool.java
deleted file mode 100644
index 25fad14..0000000
--- a/src/java/org/apache/turbine/services/pull/RunDataApplicationTool.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.turbine.services.pull;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.RunData;
-
-/**
- * Tools in the Toolbox that need a Rundata Object on every refresh should
- * implement this interface.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface RunDataApplicationTool
-{
-    /**
-     * Initialize the application tool. The data parameter holds a different
-     * type depending on how the tool is being instantiated:
-     * <ul>
-     * <li>For global tools data will be null</li>
-     * <li>For request tools data will be of type RunData</li>
-     * <li>For session and authorized tools data will be of type User</li>
-     * </ul>
-     * <p>
-     * It is possible that session scope tools will be initialized with a null
-     * <code>User</code> object.  This happens when the first request on a
-     * session happens to the be login action.  The next request on the session
-     * will cause the session tool to be refreshed if
-     * <code>tools.per.request.refresh</code> is set to <code>true</code>
-     * in <code>TurbineResources.properties</code>.  You will then be able to
-     * get a <code>User</code> object from the instance of
-     * <code>RunData</object>.
-     *
-     * @param data initialization data
-     */
-    public void init(Object data);
-
-    /**
-     * Refresh the application tool. This is
-     * necessary for development work where you
-     * probably want the tool to refresh itself
-     * if it is using configuration information
-     * that is typically cached after initialization
-     *
-     * @param data The current RunData Object
-     */
-    public void refresh(RunData data);
-
-}
diff --git a/src/java/org/apache/turbine/services/pull/TurbinePull.java b/src/java/org/apache/turbine/services/pull/TurbinePull.java
deleted file mode 100644
index 590f97b..0000000
--- a/src/java/org/apache/turbine/services/pull/TurbinePull.java
+++ /dev/null
@@ -1,230 +0,0 @@
-package org.apache.turbine.services.pull;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-
-/**
- * This is a Facade class for PullService.
- *
- * This class provides static methods that call related methods of the
- * implementation of the PullService used by the System, according to
- * the settings in TurbineResources.
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class TurbinePull
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a PullService implementation instance
-     */
-    public static PullService getService()
-    {
-        return (PullService) TurbineServices
-                .getInstance().getService(PullService.SERVICE_NAME);
-    }
-
-    /**
-     * Get the context containing global tools that will be
-     * use as part of the Turbine Pull Model.
-     *
-     * @return A Context object which contains the 
-     *         Global Tool instances.
-     */
-    public static final Context getGlobalContext()
-    {
-        return getService().getGlobalContext();
-    }
-
-    /**
-     * Checks whether this service has been registered.  This is
-     * required by the TurbineVelocityService so it can determine
-     * whether to attempt to place the ToolBox in the context.
-     * <p>
-     * So users can use Turbine with templates in the traditional
-     * manner. If the Pull Service is not listed in
-     * <code>TurbineResources.props</code>, or no tools are specified
-     * the TurbineVelocityService will behave in its traditional
-     * manner.
-     */
-    public static final boolean isRegistered()
-    {
-        return TurbineServices.getInstance()
-                .isRegistered(PullService.SERVICE_NAME);
-    }
-
-    /**
-     * Return the absolute path of the resources directory
-     * used by application tools.
-     *
-     * @return A directory path in the file system or null.
-     */
-    public static final String getAbsolutePathToResourcesDirectory()
-    {
-        return getService().getAbsolutePathToResourcesDirectory();
-    }
-
-    /**
-     * Return the resources directory. This is relative
-     * to the webapp context.
-     *
-     * @return A directory path to the resources directory relative to the webapp root or null.
-     */
-    public static final String getResourcesDirectory()
-    {
-        return getService().getResourcesDirectory();
-    }
-
-    /**
-     * Populate the given context with all request, session
-     * and persistent scope tools (it is assumed that the context
-     * already wraps the global context, and thus already contains
-     * the global tools).
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData object for request specific data
-     */
-    public static void populateContext(Context context, PipelineData pipelineData)
-    {
-        getService().populateContext(context, pipelineData);
-    }
-    
-    /**
-     * Populate the given context with all request, session
-     * and persistent scope tools (it is assumed that the context
-     * already wraps the global context, and thus already contains
-     * the global tools).
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData object for request specific data
-     */
-    public static void populateContext(Context context, RunData data)
-    {
-        getService().populateContext(context, data);
-    }
-
-    /**
-     * Refresh the global tools. This is necessary
-     * for development work where tools depend
-     * on configuration information. The configuration
-     * information is typically cached after initialization
-     * but during development you might want the tool
-     * to refresh itself on each request.
-     * <p>
-     * If there are objects that don't implement
-     * the ApplicationTool interface, then they won't
-     * be refreshed.
-     * @deprecated No longer needed as Pull and Velocity Service are now more separate.
-     */
-    public static final void refreshGlobalTools()
-    {
-        getService().refreshGlobalTools();
-    }
-
-    /**
-     * Shoud we refresh the tools
-     * on each request. For development purposes.
-     *
-     * @return true if we should refresh the tools on every request.
-     * @deprecated No longer needed as Pull and Velocity Service are now more separate.
-     */
-    public static final boolean refreshToolsPerRequest()
-    {
-        return getService().refreshToolsPerRequest();
-    }
-
-    /**
-     * Release tool instances from the given context to the
-     * object pool
-     *
-     * @param context a Velocity Context to release tools from
-     */
-    public static void releaseTools(Context context)
-    {
-        getService().releaseTools(context);
-    }
-
-    /**
-     * Helper method that allows you to easily get a tool
-     * from a Context. Essentially, it just does the cast
-     * to an Application tool for you.
-     *
-     * @param context a Velocity Context to get tools from
-     * @param name the name of the tool to get
-     * @return ApplicationTool null if no tool could be found
-     */
-    public static ApplicationTool getTool(Context context,
-                                          String name)
-    {
-        try
-        {
-            return (ApplicationTool) context.get(name);
-        }
-        catch (Exception e)
-        {
-        }
-        return null;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pull/TurbinePullService.java b/src/java/org/apache/turbine/services/pull/TurbinePullService.java
deleted file mode 100644
index c3e7718..0000000
--- a/src/java/org/apache/turbine/services/pull/TurbinePullService.java
+++ /dev/null
@@ -1,1094 +0,0 @@
-package org.apache.turbine.services.pull;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.pool.PoolService;
-import org.apache.turbine.services.pool.TurbinePool;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.velocity.VelocityService;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This is the concrete implementation of the Turbine
- * Pull Service.
- * <p>
- * These are tools that are placed in the context by the service
- * These tools will be made available to all your
- * templates. You list the tools in the following way:
- * <p>
- * <pre>
- * tool.&lt;scope&gt;.&lt;id&gt; = &lt;classname&gt;
- *
- * &lt;scope&gt;      is the tool scope: global, request, session,
- *              authorized or persistent (see below for more details)
- * &lt;id&gt;         is the name of the tool in the context
- *
- * You can configure the tools in this way:
- * tool.&lt;id&gt;.&lt;parameter&gt; = &lt;value&gt;
- *
- * So if you find "global", "request", "session" or "persistent" as second
- * part, it is a configuration to put a tool into the toolbox, else it is a
- * tool specific configuration.
- *
- * For example:
- *
- * tool.global.ui    = org.apache.turbine.util.pull.UIManager
- * tool.global.mm    = org.apache.turbine.util.pull.MessageManager
- * tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
- * tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
- *
- * Then:
- *
- * tool.ui.skin = default
- *
- * configures the value of "skin" for the "ui" tool.
- *
- * Tools are accessible in all templates by the <id> given
- * to the tool. So for the above listings the UIManager would
- * be available as $ui, the MessageManager as $mm, the TemplateLink
- * as $link and the TemplatePageAttributes as $page.
- *
- * You should avoid using tool names called "global", "request",
- * "session" or "persistent" because of clashes with the possible Scopes.
- *
- * Scopes:
- *
- *  global:     tool is instantiated once and that instance is available
- *              to all templates for all requests. Tool must be threadsafe.
- *
- *  request:    tool is instantiated once for each request (although the
- *              PoolService is used to recycle instances). Tool need not
- *              be threadsafe.
- *
- *  session:    tool is instantiated once for each user session, and is
- *              stored in the session.  These tools do not need to be
- *              threadsafe.
- *
- *  authorized: tool is instantiated once for each user session once the
- *              user logs in. After this, it is a normal session tool.
- *
- *  persistent: tool is instantitated once for each user session once
- *              the user logs in and is is stored in the user's permanent
- *              hashtable.
- *              This means for a logged in user the tool will be persisted
- *              in the user's objectdata. Tool should be Serializable.  These
- *              tools do not need to be threadsafe.
- *              <b>persistent scope tools are deprecated in 2.3</b>
- *
- * Defaults: none
- * </pre>
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TurbinePullService
-        extends TurbineBaseService
-        implements PullService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbinePullService.class);
-
-    /** Reference to the pool service */
-    private PoolService pool = null;
-
-    /** Reference to the templating (nee Velocity) service */
-    private VelocityService velocity = null;
-
-    /**
-     * This is the container for the global web application
-     * tools that are used in conjunction with the
-     * Turbine Pull Model. All the global tools will be placed
-     * in this Context and be made accessible inside
-     * templates via the tool name specified in the TR.props
-     * file.
-     */
-    private Context globalContext;
-
-    /**
-     * This inner class is used in the lists below to store the
-     * tool name and class for each of request, session and persistent
-     * tools
-     */
-    private static class ToolData
-    {
-        String toolName;
-        String toolClassName;
-        Class toolClass;
-
-        public ToolData(String toolName, String toolClassName, Class toolClass)
-        {
-            this.toolName = toolName;
-            this.toolClassName = toolClassName;
-            this.toolClass = toolClass;
-        }
-    }
-
-    /** Internal list of global tools */
-    private List globalTools;
-
-    /** Internal list of request tools */
-    private List requestTools;
-
-    /** Internal list of session tools */
-    private List sessionTools;
-
-    /** Internal list of authorized tools */
-    private List authorizedTools;
-
-    /** Internal list of persistent tools */
-    private List persistentTools;
-
-    /** Directory where application tool resources are stored.*/
-    private String resourcesDirectory;
-
-    /** Should we refresh the application tools on a per request basis? */
-    private boolean refreshToolsPerRequest = false;
-
-    /**
-     * Called the first time the Service is used.
-     */
-    public void init()
-        throws InitializationException
-    {
-        try
-        {
-            pool = TurbinePool.getService();
-
-            if (pool == null)
-            {
-                throw new InitializationException("Pull Service requires"
-                    + " configured Pool Service!");
-            }
-
-            initPullService();
-            // Make sure to setInit(true) because Tools may
-            // make calls back to the TurbinePull static methods
-            // which causes an init loop.
-            setInit(true);
-
-            // Do _NOT_ move this before the setInit(true)
-            velocity = TurbineVelocity.getService();
-
-            if (velocity != null)
-            {
-                initPullTools();
-            }
-            else
-            {
-                log.info("Velocity Service not configured, skipping pull tools!");
-            }
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                "TurbinePullService failed to initialize", e);
-        }
-    }
-
-    /**
-     * Initialize the pull service
-     *
-     * @exception Exception A problem happened when starting up
-     */
-    private void initPullService()
-        throws Exception
-    {
-        // This is the per-service configuration, prefixed with services.PullService
-        Configuration conf = getConfiguration();
-
-        // Get the resources directory that is specificed
-        // in the TR.props or default to "resources", relative to the webapp.
-        resourcesDirectory = conf.getString(
-            TOOL_RESOURCES_DIR_KEY,
-            TOOL_RESOURCES_DIR_DEFAULT);
-
-        // Should we refresh the tool box on a per
-        // request basis.
-        refreshToolsPerRequest =
-            conf.getBoolean(
-                TOOLS_PER_REQUEST_REFRESH_KEY,
-                TOOLS_PER_REQUEST_REFRESH_DEFAULT);
-
-        // Log the fact that the application tool box will
-        // be refreshed on a per request basis.
-        if (refreshToolsPerRequest)
-        {
-            log.info("Pull Model tools will "
-                + "be refreshed on a per request basis.");
-        }
-    }
-
-    /**
-     * Initialize the pull tools. At this point, the
-     * service must be marked as initialized, because the
-     * tools may call the methods of this service via the
-     * static facade class TurbinePull.
-     *
-     * @exception Exception A problem happened when starting up
-     */
-    private void initPullTools()
-        throws Exception
-    {
-        // And for reasons I never really fully understood,
-        // the tools directive is toplevel without the service
-        // prefix. This is brain-damaged but for legacy reasons we
-        // keep this. So this is the global turbine configuration:
-        Configuration conf = Turbine.getConfiguration();
-
-        // Grab each list of tools that are to be used (for global scope,
-        // request scope, authorized scope, session scope and persistent
-        // scope tools). They are specified respectively in the TR.props
-        // like this:
-        //
-        // tool.global.ui = org.apache.turbine.util.pull.UIManager
-        // tool.global.mm = org.apache.turbine.util.pull.MessageManager
-        //
-        // tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-        //
-        // tool.session.basket = org.sample.util.ShoppingBasket;
-        //
-        // tool.persistent.ui = org.apache.turbine.services.pull.util.PersistentUIManager
-
-        log.debug("Global Tools:");
-        globalTools     = getTools(conf.subset(GLOBAL_TOOL));
-        log.debug("Request Tools:");
-        requestTools    = getTools(conf.subset(REQUEST_TOOL));
-        log.debug("Session Tools:");
-        sessionTools    = getTools(conf.subset(SESSION_TOOL));
-        log.debug("Authorized Tools:");
-        authorizedTools = getTools(conf.subset(AUTHORIZED_TOOL));
-        log.debug("Persistent Tools:");
-        persistentTools = getTools(conf.subset(PERSISTENT_TOOL));
-
-        // Create and populate the global context right now
-
-        // This is unholy, because it entwines the VelocityService and 
-        // the Pull Service even further. However, there isn't much we can
-        // do for the 2.3 release. Expect this to go post-2.3
-        globalContext = velocity.getNewContext();
-
-        populateWithGlobalTools(globalContext);
-    }
-
-    /**
-     * Retrieve the tool names and classes for the tools definied
-     * in the configuration file with the prefix given.
-     *
-     * @param toolConfig The part of the configuration describing some tools
-     */
-    private List getTools(Configuration toolConfig)
-    {
-        List tools = new ArrayList();
-
-        // There might not be any tools for this prefix
-        // so return an empty list.
-        if (toolConfig == null)
-        {
-            return tools;
-        }
-
-        for (Iterator it = toolConfig.getKeys(); it.hasNext();)
-        {
-            String toolName = (String) it.next();
-            String toolClassName = toolConfig.getString(toolName);
-
-            try
-            {
-                // Create an instance of the tool class.
-                Class toolClass = Class.forName(toolClassName);
-
-                // Add the tool to the list being built.
-                tools.add(new ToolData(toolName, toolClassName, toolClass));
-
-                log.info("Tool " + toolClassName
-                    + " to add to the context as '$" + toolName + "'");
-            }
-            catch (Exception e)
-            {
-                log.error("Cannot instantiate tool class "
-                    + toolClassName + ": ", e);
-            }
-        }
-
-        return tools;
-    }
-
-    /**
-     * Return the Context which contains all global tools that
-     * are to be used in conjunction with the Turbine
-     * Pull Model. The tools are refreshed every time the
-     * global Context is pulled.
-     */
-    public Context getGlobalContext()
-    {
-        if (refreshToolsPerRequest)
-        {
-            refreshGlobalTools();
-        }
-        return globalContext;
-    }
-
-    /**
-     * Populate the given context with all request, session, authorized
-     * and persistent scope tools (it is assumed that the context
-     * already wraps the global context, and thus already contains
-     * the global tools).
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData object for request specific data
-     */
-    public void populateContext(Context context, RunData data)
-    {
-        populateWithRequestTools(context, data);
-
-        // session tools (whether session-only or persistent are
-        // very similar, so the same method is used - the
-        // boolean parameter indicates whether get/setPerm is to be used
-        // rather than get/setTemp)
-
-        //
-        // Session Tool start right at the session once the user has been set
-        // while persistent and authorized Tools are started when the user has
-        // logged in
-        //
-        User user = data.getUser();
-
-        // Note: Session tools are currently lost after the login action
-        // because the anonymous user is replaced the the real user object.
-        // We should either store the session pull tools in the session or
-        // make Turbine.loginAction() copy the session pull tools into the
-        // new user object.
-        populateWithSessionTools(sessionTools, context, data, user);
-
-        if (!TurbineSecurity.isAnonymousUser(user))
-        {
-            if (user.hasLoggedIn())
-            {
-                populateWithSessionTools(authorizedTools, context, data, user);
-                populateWithPermTools(persistentTools, context, data, user);
-            }
-        }
-    }
-
-    /**
-     * Populate the given context with all request, session, authorized
-     * and persistent scope tools (it is assumed that the context
-     * already wraps the global context, and thus already contains
-     * the global tools).
-     *
-     * @param context a Velocity Context to populate
-     * @param data a PipelineData object for request specific data
-     */
-    public void populateContext(Context context, PipelineData pipelineData)
-    {
-       // Map runDataMap = (Map) pipelineData.get(RunData.class);
-       // RunData data = (RunData)runDataMap.get(RunData.class);
-        RunData data = (RunData)pipelineData;
-
-        populateWithRequestTools(context, pipelineData);
-        // session tools (whether session-only or persistent are
-        // very similar, so the same method is used - the
-        // boolean parameter indicates whether get/setPerm is to be used
-        // rather than get/setTemp)
-
-        //
-        // Session Tool start right at the session once the user has been set
-        // while persistent and authorized Tools are started when the user has
-        // logged in
-        //
-        User user = data.getUser();
-
-        // Note: Session tools are currently lost after the login action
-        // because the anonymous user is replaced the the real user object.
-        // We should either store the session pull tools in the session or
-        // make Turbine.loginAction() copy the session pull tools into the
-        // new user object.
-        populateWithSessionTools(sessionTools, context, pipelineData, user);
-
-        if (!TurbineSecurity.isAnonymousUser(user))
-        {
-            if (user.hasLoggedIn())
-            {
-                populateWithSessionTools(authorizedTools, context, pipelineData, user);
-                populateWithPermTools(persistentTools, context, pipelineData, user);
-            }
-        }
-    }    
-    
-    /**
-     * Populate the given context with the global tools
-     *
-     * @param context a Velocity Context to populate
-     */
-    private void populateWithGlobalTools(Context context)
-    {
-        for (Iterator it = globalTools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                Object tool = toolData.toolClass.newInstance();
-
-                // global tools are init'd with a null data parameter
-                initTool(tool, null);
-
-                // put the tool in the context
-                context.put(toolData.toolName, tool);
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate global tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    /**
-     * Populate the given context with the request-scope tools
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData instance
-     */
-    private void populateWithRequestTools(Context context, RunData data)
-    {
-        // Iterate the tools
-        for (Iterator it = requestTools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // Fetch Object through the Pool.
-                Object tool = pool.getInstance(toolData.toolClass);
-
-                // request tools are init'd with a RunData object
-                initTool(tool, data);
-
-                // put the tool in the context
-                context.put(toolData.toolName, tool);
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate request tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    
-    /**
-     * Populate the given context with the request-scope tools
-     *
-     * @param context a Velocity Context to populate
-     * @param data a RunData instance
-     */
-    private void populateWithRequestTools(Context context, PipelineData pipelineData)
-    {
-        // Iterate the tools
-        for (Iterator it = requestTools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // Fetch Object through the Pool.
-                Object tool = pool.getInstance(toolData.toolClass);
-
-                initTool(tool, pipelineData);
-
-                // put the tool in the context
-                context.put(toolData.toolName, tool);
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate request tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    /**
-     * Populate the given context with the session-scoped tools.
-     *
-     * @param tools The list of tools with which to populate the
-     * session.
-     * @param context The context to populate.
-     * @param data The current RunData object
-     * @param user The <code>User</code> object whose storage to
-     * retrieve the tool from.
-     */
-    private void populateWithSessionTools(List tools, Context context,
-            PipelineData pipelineData, User user)
-    {
-        //Map runDataMap = (Map)pipelineData.get(RunData.class);
-        //RunData data = (RunData) runDataMap.get(RunData.class);
-        RunData runData = (RunData)pipelineData;
-        // Iterate the tools
-        for (Iterator it = tools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // ensure that tool is created only once for a user
-                // by synchronizing against the user object
-                synchronized (runData.getSession())
-                {
-                    // first try and fetch the tool from the user's
-                    // hashtable
-                    Object tool = runData.getSession().getAttribute(
-                            SESSION_TOOLS_ATTRIBUTE_PREFIX
-                            + toolData.toolClassName);
-
-                    if (tool == null)
-                    {
-                        // if not there, an instance must be fetched from
-                        // the pool
-                        tool = pool.getInstance(toolData.toolClass);
-
-                        // session tools are init'd with the User object
-                        initTool(tool, user);
-
-                        // store the newly created tool in the session
-                        runData.getSession().setAttribute(
-                                SESSION_TOOLS_ATTRIBUTE_PREFIX
-                                + tool.getClass().getName(), tool);
-                    }
-
-                    // *NOT* else
-                    if(tool != null)
-                    {
-                        // This is a semantics change. In the old
-                        // Turbine, Session tools were initialized and
-                        // then refreshed every time they were pulled
-                        // into the context if "refreshToolsPerRequest"
-                        // was wanted.
-                        //
-                        // RunDataApplicationTools now have a parameter
-                        // for refresh. If it is not refreshed immediately
-                        // after init(), the parameter value will be undefined
-                        // until the 2nd run. So we refresh all the session
-                        // tools on every run, even if we just init'ed it.
-                        //
-
-                        if (refreshToolsPerRequest)
-                        {
-                            refreshTool(tool, pipelineData);
-                        }
-
-                        // put the tool in the context
-                        log.debug("Adding " + tool + " to ctx as "
-                                + toolData.toolName);
-                        context.put(toolData.toolName, tool);
-                    }
-                    else
-                    {
-                        log.info("Tool " + toolData.toolName
-                                + " was null, skipping it.");
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate session tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    /**
-     * Populate the given context with the session-scoped tools.
-     *
-     * @param tools The list of tools with which to populate the
-     * session.
-     * @param context The context to populate.
-     * @param data The current RunData object
-     * @param user The <code>User</code> object whose storage to
-     * retrieve the tool from.
-     */
-    private void populateWithSessionTools(List tools, Context context,
-            RunData data, User user)
-    {
-        // Iterate the tools
-        for (Iterator it = tools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // ensure that tool is created only once for a user
-                // by synchronizing against the user object
-                synchronized (data.getSession())
-                {
-                    // first try and fetch the tool from the user's
-                    // hashtable
-                    Object tool = data.getSession().getAttribute(
-                            SESSION_TOOLS_ATTRIBUTE_PREFIX
-                            + toolData.toolClassName);
-
-                    if (tool == null)
-                    {
-                        // if not there, an instance must be fetched from
-                        // the pool
-                        tool = pool.getInstance(toolData.toolClass);
-
-                        // session tools are init'd with the User object
-                        initTool(tool, user);
-
-                        // store the newly created tool in the session
-                        data.getSession().setAttribute(
-                                SESSION_TOOLS_ATTRIBUTE_PREFIX
-                                + tool.getClass().getName(), tool);
-                    }
-
-                    // *NOT* else
-                    if(tool != null)
-                    {
-                        // This is a semantics change. In the old
-                        // Turbine, Session tools were initialized and
-                        // then refreshed every time they were pulled
-                        // into the context if "refreshToolsPerRequest"
-                        // was wanted.
-                        //
-                        // RunDataApplicationTools now have a parameter
-                        // for refresh. If it is not refreshed immediately
-                        // after init(), the parameter value will be undefined
-                        // until the 2nd run. So we refresh all the session
-                        // tools on every run, even if we just init'ed it.
-                        //
-
-                        if (refreshToolsPerRequest)
-                        {
-                            refreshTool(tool, data);
-                        }
-
-                        // put the tool in the context
-                        log.debug("Adding " + tool + " to ctx as "
-                                + toolData.toolName);
-                        context.put(toolData.toolName, tool);
-                    }
-                    else
-                    {
-                        log.info("Tool " + toolData.toolName
-                                + " was null, skipping it.");
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate session tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    
-    
-    /**
-     * Populate the given context with the perm-scoped tools.
-     *
-     * @param tools The list of tools with which to populate the
-     * session.
-     * @param context The context to populate.
-     * @param data The current RunData object
-     * @param user The <code>User</code> object whose storage to
-     * retrieve the tool from.
-     */
-    private void populateWithPermTools(List tools, Context context,
-            PipelineData pipelineData, User user)
-    {
-        // Iterate the tools
-        for (Iterator it = tools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // ensure that tool is created only once for a user
-                // by synchronizing against the user object
-                synchronized (user)
-                {
-                    // first try and fetch the tool from the user's
-                    // hashtable
-                    Object tool = user.getPerm(toolData.toolClassName);
-
-                    if (tool == null)
-                    {
-                        // if not there, an instance must be fetched from
-                        // the pool
-                        tool = pool.getInstance(toolData.toolClass);
-
-                        // session tools are init'd with the User object
-                        initTool(tool, user);
-
-                        // store the newly created tool in the user's hashtable
-                        user.setPerm(toolData.toolClassName, tool);
-                    }
-
-                    // *NOT* else
-                    if(tool != null)
-                    {
-                        // This is a semantics change. In the old
-                        // Turbine, Session tools were initialized and
-                        // then refreshed every time they were pulled
-                        // into the context if "refreshToolsPerRequest"
-                        // was wanted.
-                        //
-                        // RunDataApplicationTools now have a parameter
-                        // for refresh. If it is not refreshed immediately
-                        // after init(), the parameter value will be undefined
-                        // until the 2nd run. So we refresh all the session
-                        // tools on every run, even if we just init'ed it.
-                        //
-
-                        if (refreshToolsPerRequest)
-                        {
-                            refreshTool(tool, pipelineData);
-                        }
-
-                        // put the tool in the context
-                        log.debug("Adding " + tool + " to ctx as "
-                                + toolData.toolName);
-                        log.warn("Persistent scope tools are deprecated.");
-                        context.put(toolData.toolName, tool);
-                    }
-                    else
-                    {
-                        log.info("Tool " + toolData.toolName
-                                + " was null, skipping it.");
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate perm tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    /**
-     * Populate the given context with the perm-scoped tools.
-     *
-     * @param tools The list of tools with which to populate the
-     * session.
-     * @param context The context to populate.
-     * @param data The current RunData object
-     * @param user The <code>User</code> object whose storage to
-     * retrieve the tool from.
-     */
-    private void populateWithPermTools(List tools, Context context,
-            RunData data, User user)
-    {
-        // Iterate the tools
-        for (Iterator it = tools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            try
-            {
-                // ensure that tool is created only once for a user
-                // by synchronizing against the user object
-                synchronized (user)
-                {
-                    // first try and fetch the tool from the user's
-                    // hashtable
-                    Object tool = user.getPerm(toolData.toolClassName);
-
-                    if (tool == null)
-                    {
-                        // if not there, an instance must be fetched from
-                        // the pool
-                        tool = pool.getInstance(toolData.toolClass);
-
-                        // session tools are init'd with the User object
-                        initTool(tool, user);
-
-                        // store the newly created tool in the user's hashtable
-                        user.setPerm(toolData.toolClassName, tool);
-                    }
-
-                    // *NOT* else
-                    if(tool != null)
-                    {
-                        // This is a semantics change. In the old
-                        // Turbine, Session tools were initialized and
-                        // then refreshed every time they were pulled
-                        // into the context if "refreshToolsPerRequest"
-                        // was wanted.
-                        //
-                        // RunDataApplicationTools now have a parameter
-                        // for refresh. If it is not refreshed immediately
-                        // after init(), the parameter value will be undefined
-                        // until the 2nd run. So we refresh all the session
-                        // tools on every run, even if we just init'ed it.
-                        //
-
-                        if (refreshToolsPerRequest)
-                        {
-                            refreshTool(tool, data);
-                        }
-
-                        // put the tool in the context
-                        log.debug("Adding " + tool + " to ctx as "
-                                + toolData.toolName);
-                        log.warn("Persistent scope tools are deprecated.");
-                        context.put(toolData.toolName, tool);
-                    }
-                    else
-                    {
-                        log.info("Tool " + toolData.toolName
-                                + " was null, skipping it.");
-                    }
-                }
-            }
-            catch (Exception e)
-            {
-                log.error("Could not instantiate perm tool "
-                    + toolData.toolName + " from a "
-                    + toolData.toolClassName + " object", e);
-            }
-        }
-    }
-
-    
-    
-    /**
-     * Return the absolute path to the resources directory
-     * used by the application tools.
-     *
-     * @return the absolute path of the resources directory
-     */
-    public String getAbsolutePathToResourcesDirectory()
-    {
-        return Turbine.getRealPath(resourcesDirectory);
-    }
-
-    /**
-     * Return the resources directory. This is
-     * relative to the web context.
-     *
-     * @return the relative path of the resources directory
-     */
-    public String getResourcesDirectory()
-    {
-        return resourcesDirectory;
-    }
-
-    /**
-     * Refresh the global tools. We can
-     * only refresh those tools that adhere to
-     * ApplicationTool interface because we
-     * know those types of tools have a refresh
-     * method.
-     * @deprecated Will be made private after 2.3
-     */
-    public void refreshGlobalTools()
-    {
-        for (Iterator it = globalTools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            Object tool = globalContext.get(toolData.toolName);
-            refreshTool(tool, null);
-        }
-    }
-
-    /**
-     * Should we refresh the ToolBox on
-     * a per request basis.
-     * @deprecated No longer needed as Pull and Velocity Service are now more separate.
-     */
-    public boolean refreshToolsPerRequest()
-    {
-        return refreshToolsPerRequest;
-    }
-
-    /**
-     * Release the request-scope tool instances in the
-     * given Context back to the pool
-     *
-     * @param context the Velocity Context to release tools from
-     */
-    public void releaseTools(Context context)
-    {
-        // only the request tools can be released - other scoped
-        // tools will have continuing references to them
-        releaseTools(context, requestTools);
-    }
-
-    /**
-     * Release the given list of tools from the context back
-     * to the pool
-     *
-     * @param context the Context containing the tools
-     * @param tools a List of ToolData objects
-     */
-    private void releaseTools(Context context, List tools)
-    {
-        for (Iterator it = tools.iterator(); it.hasNext();)
-        {
-            ToolData toolData = (ToolData) it.next();
-            Object tool = context.remove(toolData.toolName);
-
-            if (tool != null)
-            {
-                pool.putInstance(tool);
-            }
-        }
-    }
-
-    /**
-     * Initialized a given Tool with the passed init Object
-     *
-     * @param tool A Tool Object
-     * @param param The Init Parameter
-     *
-     * @throws Exception If anything went wrong.
-     */
-    private void initTool(Object tool, Object param)
-        throws Exception
-    {
-        if (param instanceof PipelineData)
-        {
-            if (tool instanceof PipelineDataApplicationTool)
-            {
-                ((PipelineDataApplicationTool) tool).init((PipelineData)param);
-            }
-            else if (tool instanceof RunDataApplicationTool)
-            {
-                RunData data = getRunData((PipelineData)param);
-                ((RunDataApplicationTool) tool).init(data);
-            }
-            else if (tool instanceof ApplicationTool)
-            {
-                RunData data = getRunData((PipelineData)param);
-                ((ApplicationTool) tool).init(data);
-            }
-        } 
-        else
-        {
-            if (tool instanceof PipelineDataApplicationTool)
-            {
-                ((PipelineDataApplicationTool) tool).init(param);
-            }
-            else if (tool instanceof RunDataApplicationTool)
-            {
-                ((RunDataApplicationTool) tool).init(param);
-            }
-            else if (tool instanceof ApplicationTool)
-            {
-                ((ApplicationTool) tool).init(param);
-            }
-        }
-    }
-
-    /**
-     * Refresh a given Tool.
-     *
-     * @param tool A Tool Object
-     * @param data The current RunData Object
-     */
-    private void refreshTool(Object tool, Object dataObject)
-    {
-        RunData data = null;
-        PipelineData pipelineData = null;
-        if (dataObject instanceof PipelineData)
-        {
-            pipelineData = (PipelineData)dataObject;
-            data = getRunData(pipelineData);
-            if (tool instanceof PipelineDataApplicationTool)
-            {
-                ((PipelineDataApplicationTool) tool).refresh(pipelineData);
-            }
-        }
-        if (tool instanceof ApplicationTool)
-        {
-            ((ApplicationTool) tool).refresh();
-        }
-        else if (tool instanceof RunDataApplicationTool)
-        {
-            ((RunDataApplicationTool) tool).refresh(data);
-        }
-    }
-    
-    private RunData getRunData(PipelineData pipelineData)
-    {
-        if(!(pipelineData instanceof RunData)){
-            throw new RuntimeException("Can't cast to rundata from pipeline data.");
-        }
-        return (RunData)pipelineData;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pull/package.html b/src/java/org/apache/turbine/services/pull/package.html
deleted file mode 100644
index 169fdc9..0000000
--- a/src/java/org/apache/turbine/services/pull/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Provides application tools that are put into the context of a template view.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/pull/tools/ContentTool.java b/src/java/org/apache/turbine/services/pull/tools/ContentTool.java
deleted file mode 100644
index 78569bb..0000000
--- a/src/java/org/apache/turbine/services/pull/tools/ContentTool.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package org.apache.turbine.services.pull.tools;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.uri.DataURI;
-
-/**
- * Terribly simple tool to translate URIs into Turbine Links.
- * Equivalent to URIUtils.getAbsoluteLink() in a pull tool.
- * 
- * <p>
- * If you're missing any routines from the 'old' $content tool concerning
- * path_info or query data, you did use the wrong tool then. You should've used
- * the TemplateLink tool which should be available as "$link" in your context.
- * <p>
- *
- * This is an application pull tool for the template system. You should <b>not</b>
- * use it in a normal application!
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-
-public class ContentTool
-    implements ApplicationTool
-{
-    /** Prefix for Parameters for this tool */
-    public static final String CONTENT_TOOL_PREFIX = "tool.content";
-
-    /** 
-     * Should this tool add Container Encoding to the URIs returned?
-     * True might cause trouble e.g. if you run with Apache HTTP Daemon / Tomcat Combo.
-     *
-     * Default is false (like Turbine 2.2)
-     */
-    public static final String CONTENT_TOOL_ENCODING_KEY = "want.encoding";
-
-    /** Default Value for CONTENT_TOOL_ENCODING_KEY */
-    public static final boolean CONTENT_TOOL_ENCODING_DEFAULT = false;
-    
-    /** Should this tool return relative URIs or absolute? Default: Absolute. */
-    public static final String CONTENT_TOOL_RELATIVE_KEY = "want.relative";
-
-    /** Default Value for CONTENT_TOOL_RELATIVE_KEY */
-    public static final boolean CONTENT_TOOL_RELATIVE_DEFAULT = false;
-
-    /** Do we want the container to encode the response? */
-    boolean wantEncoding = false;
-    
-    /** Do we want a relative link? */
-    boolean wantRelative = false;
-    
-    /** Caches a DataURI object which provides the translation routines */
-    private DataURI dataURI = null;
-    
-    /**
-     * C'tor
-     */
-    public ContentTool()
-    {
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Application Tool Interface
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * This will initialise a ContentTool object that was
-     * constructed with the default constructor (ApplicationTool
-     * method).
-     *
-     * @param data assumed to be a RunData object
-     */
-    public void init(Object data)
-    {
-        // we just blithely cast to RunData as if another object
-        // or null is passed in we'll throw an appropriate runtime
-        // exception.
-        if (data instanceof PipelineData)
-        {
-            PipelineData pipelineData = (PipelineData) data;
-            RunData runData = (RunData)pipelineData;
-            dataURI = new DataURI(runData);
-        }
-        else
-        {
-            dataURI = new DataURI((RunData) data);
-
-        }
-
-        Configuration conf = 
-                Turbine.getConfiguration().subset(CONTENT_TOOL_PREFIX);
-
-        if (conf != null)
-        {
-            wantRelative = conf.getBoolean(CONTENT_TOOL_RELATIVE_KEY,
-                    CONTENT_TOOL_RELATIVE_DEFAULT);
-
-            wantEncoding = conf.getBoolean(CONTENT_TOOL_ENCODING_KEY,
-                    CONTENT_TOOL_ENCODING_DEFAULT);
-        }
-        
-        if (!wantEncoding)
-        {
-            dataURI.clearResponse();
-        }
-    }
-
-    /**
-     * Refresh method - does nothing
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /**
-     * Returns the Turbine URI of a given Path
-     *
-     * @param path The path to translate
-     *
-     * @return Turbine translated absolute path
-     */
-    public String getURI(String path)
-    {
-        dataURI.setScriptName(path);
-
-        return wantRelative ? 
-                dataURI.getRelativeLink() : dataURI.getAbsoluteLink();
-    }
-
-    /**
-     * Returns the Turbine URI of a given Path. The
-     * result is always an absolute path starting with
-     * the server scheme (http/https).
-     *
-     * @param path The path to translate
-     *
-     * @return Turbine translated absolute path
-     */
-    public String getAbsoluteURI(String path)
-    {
-        dataURI.setScriptName(path);
-
-        return dataURI.getAbsoluteLink();
-    }
-
-    /**
-     * Returns the Turbine URI of a given Path. The
-     * result is always relative to the context of
-     * the application.
-     *
-     * @param path The path to translate
-     *
-     * @return Turbine translated absolute path
-     */
-    public String getRelativeURI(String path)
-    {
-        dataURI.setScriptName(path);
-
-        return dataURI.getRelativeLink();
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/pull/tools/RelativeTemplateLink.java b/src/java/org/apache/turbine/services/pull/tools/RelativeTemplateLink.java
deleted file mode 100644
index a15dfb6..0000000
--- a/src/java/org/apache/turbine/services/pull/tools/RelativeTemplateLink.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.turbine.services.pull.tools;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.pull.ApplicationTool;
-
-/**
- * This is exactly the same thing as TemplateLink but it returns a 
- * relative link on toString(). Everything else is identical. This class is
- * here for legacy purposes if you used the old org.apache.turbine.util.template.RelativeLink
- * class and have lots of templates which you don't want to rewrite. 
- *
- * <p>
- * For new Code please use TemplateLink and get a relative Link with $link.RelativeLink and
- * the URI without resetting the query_data and path_info with $link.RelativeURI
- *
- * <p>
- *
- * This is an application pull tool for the template system. You should <b>not</b>
- * use it in a normal application!
- *
- * @deprecated Use {@link org.apache.turbine.services.pull.tools.TemplateLink} with the
- * {@link org.apache.turbine.services.pull.tools.TemplateLink#getRelativeLink} method.
- *
- * @author <a href="jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class RelativeTemplateLink
-    extends TemplateLink
-    implements ApplicationTool
-
-{
-    /**
-     * Default constructor
-     * <p>
-     * The init method must be called before use.
-     */
-    public RelativeTemplateLink()
-    {
-        super();
-    }
-    
-    /**
-     * Returns the URI. After rendering the URI, it clears the 
-     * pathInfo and QueryString portions of the TemplateURI. Equivalent
-     * to the getRelativeLink() method of this class.
-     *
-     * @return A String with the URI in the form
-     * /Turbine/template/index.wm/hello/world
-     */
-    public String toString()
-    {
-        return getRelativeLink();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pull/tools/TemplateLink.java b/src/java/org/apache/turbine/services/pull/tools/TemplateLink.java
deleted file mode 100644
index e128436..0000000
--- a/src/java/org/apache/turbine/services/pull/tools/TemplateLink.java
+++ /dev/null
@@ -1,650 +0,0 @@
-package org.apache.turbine.services.pull.tools;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.uri.TemplateURI;
-
-/**
- * This is a pull to to be used in Templates to convert links in
- * Templates into the correct references.
- *
- * The pull service might insert this tool into the Context.
- * in templates.  Here's an example of its Velocity use:
- *
- * <p><code>
- * $link.setPage("index.vm").addPathInfo("hello","world")
- * This would return: http://foo.com/Turbine/template/index.vm/hello/world
- * </code>
- *
- * <p>
- *
- * This is an application pull tool for the template system. You should <b>not</b>
- * use it in a normal application!
- *
- * @author <a href="mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-
-public class TemplateLink
-    implements ApplicationTool
-{
-    /** Prefix for Parameters for this tool */
-    public static final String TEMPLATE_LINK_PREFIX = "tool.link";
-
-    /** Should this tool return relative URIs or absolute? Default: Absolute. */
-    public static final String TEMPLATE_LINK_RELATIVE_KEY = "want.relative";
-
-    /** Default Value for TEMPLATE_LINK_RELATIVE_KEY */
-    public static final boolean TEMPLATE_LINK_RELATIVE_DEFAULT = false;
-
-
-    /** Do we want a relative link? */
-    boolean wantRelative = false;
-        
-    /** cache of the template name for getPage() */
-    private String template = null;
-
-    /** TemplateURI used as backend for this object */
-    private TemplateURI templateURI = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplateLink.class);
-
-    /**
-     * Default constructor
-     * <p>
-     * The init method must be called before use.
-     */
-    public TemplateLink()
-    {
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Application Tool Interface
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * This will initialise a TemplateLink object that was
-     * constructed with the default constructor (ApplicationTool
-     * method).
-     *
-     * @param data assumed to be a RunData object
-     */
-    public void init(Object data)
-    {
-        // we just blithely cast to RunData as if another object
-        // or null is passed in we'll throw an appropriate runtime
-        // exception.
-        if (data instanceof PipelineData)
-        {
-            PipelineData pipelineData = (PipelineData) data;
-            RunData runData = (RunData)pipelineData;
-            templateURI = new TemplateURI(runData);
-        }
-        else
-        {
-            templateURI = new TemplateURI((RunData) data);
-        }
-
-        Configuration conf = 
-                Turbine.getConfiguration().subset(TEMPLATE_LINK_PREFIX);
-
-        if (conf != null)
-        {
-            wantRelative = conf.getBoolean(TEMPLATE_LINK_RELATIVE_KEY,
-                    TEMPLATE_LINK_RELATIVE_DEFAULT);
-        }
-
-    }
-
-    /**
-     * Refresh method - does nothing
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /*
-     * ========================================================================
-     *
-     * getter/setter
-     *
-     * All setter return "this" so you can "chain" them together in the Context
-     *
-     * ========================================================================
-     */
-
-    /**
-     * This will turn off the execution of res.encodeURL()
-     * by making res == null. This is a hack for cases
-     * where you don't want to see the session information
-     *
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink setEncodeURLOff()
-    {
-        templateURI.clearResponse();
-        return this;
-    }
-
-    /**
-     * Sets the template variable used by the Template Service.
-     *
-     * @param template A String with the template name.
-     * @return A TemplateLink.
-     */
-    public TemplateLink setPage(String template)
-    {
-        log.debug("setPage(" + template + ")");
-        this.template = template;
-        templateURI.setTemplate(template);
-        return this;
-    }
-
-    /**
-     * Gets the template variable used by the Template Service.
-     * It is only available after setPage() has been called.
-     *
-     * @return The template name.
-     */
-    public String getPage()
-    {
-        return template;
-    }
-
-    /**
-     * Sets the action= value for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data.
-     *
-     * @param action A String with the action value.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink setAction(String action)
-    {
-        log.debug("setAction(" + action + ")");
-        templateURI.setAction(action);
-        return this;
-    }
-
-    /**
-     * Sets the action= and eventSubmit= values for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data.
-     *
-     * @param action A String with the action value.
-     * @param event A string with the event name.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink setActionEvent(String action, String event)
-    {
-        log.debug("setActionEvent(" + action + ", "+ event +")");
-        templateURI.setActionEvent(action, event);
-        return this;
-    }
-
-    /**
-     * Sets the screen= value for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data.
-     *
-     * @param screen A String with the screen value.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink setScreen(String screen)
-    {
-        log.debug("setScreen(" + screen + ")");
-        templateURI.setScreen(screen);
-        return this;
-    }
-
-    /**
-     * Sets a reference anchor (#ref).
-     *
-     * @param reference A String containing the reference.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink setReference(String reference)
-    {
-        templateURI.setReference(reference);
-        return this;
-    }
-
-    /**
-     * Returns the current reference anchor.
-     *
-     * @return A String containing the reference.
-     */
-    public String getReference()
-    {
-        return templateURI.getReference();
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Adding and removing Data from the Path Info and Query Data
-     *
-     * ========================================================================
-     */
-
-
-    /**
-     * Adds a name=value pair for every entry in a ParameterParser
-     * object to the path_info string.
-     *
-     * @param pp A ParameterParser.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(ParameterParser pp)
-    {
-        templateURI.addPathInfo(pp);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value An Object with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(String name, Object value)
-    {
-        templateURI.addPathInfo(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A String with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(String name, String value)
-    {
-        templateURI.addPathInfo(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A double with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(String name, double value)
-    {
-        templateURI.addPathInfo(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value An int with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(String name, int value)
-    {
-        templateURI.addPathInfo(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A long with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addPathInfo(String name, long value)
-    {
-        templateURI.addPathInfo(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value An Object with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(String name, Object value)
-    {
-        templateURI.addQueryData(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A String with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(String name, String value)
-    {
-        templateURI.addQueryData(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A double with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(String name, double value)
-    {
-        templateURI.addQueryData(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value An int with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(String name, int value)
-    {
-        templateURI.addQueryData(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A long with the value to add.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(String name, long value)
-    {
-        templateURI.addQueryData(name, value);
-        return this;
-    }
-
-    /**
-     * Adds a name=value pair for every entry in a ParameterParser
-     * object to the query string.
-     *
-     * @param pp A ParameterParser.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink addQueryData(ParameterParser pp)
-    {
-        templateURI.addQueryData(pp);
-        return this;
-    }
-
-    /**
-     * Removes all the path info elements.
-     *
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink removePathInfo()
-    {
-        templateURI.removePathInfo();
-        return this;
-    }
-
-    /**
-     * Removes a name=value pair from the path info.
-     *
-     * @param name A String with the name to be removed.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink removePathInfo(String name)
-    {
-        templateURI.removePathInfo(name);
-        return this;
-    }
-
-    /**
-     * Removes all the query string elements.
-     *
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink removeQueryData()
-    {
-        templateURI.removeQueryData();
-        return this;
-    }
-
-    /**
-     * Removes a name=value pair from the query string.
-     *
-     * @param name A String with the name to be removed.
-     * @return A <code>TemplateLink</code> (self).
-     */
-    public TemplateLink removeQueryData(String name)
-    {
-        templateURI.removeQueryData(name);
-        return this;
-    }
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is absolute; it starts with http/https...
-     *
-     * <p>
-     * <code><pre>
-     * TemplateURI tui = new TemplateURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getAbsoluteLink();
-     * </pre></code>
-     *
-     *  The above call to absoluteLink() would return the String:
-     *
-     * <p>
-     * http://www.server.com/servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * <p>
-     * After rendering the URI, it clears the
-     * pathInfo and QueryString portions of the TemplateURI. So you can
-     * use the $link reference multiple times on a page and start over
-     * with a fresh object every time.
-     *
-     * @return A String with the built URL.
-     */
-    public String getAbsoluteLink()
-    {
-        String output = templateURI.getAbsoluteLink();
-
-        // This was added to use $link multiple times on a page and start
-        // over with a fresh set of data every time.
-        templateURI.removePathInfo();
-        templateURI.removeQueryData();
-
-        return output;
-    }
-
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is relative to the webserver root.
-     *
-     * <p>
-     * <code><pre>
-     * TemplateURI tui = new TemplateURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getRelativeLink();
-     * </pre></code>
-     *
-     *  The above call to absoluteLink() would return the String:
-     *
-     * <p>
-     * /servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * <p>
-     * After rendering the URI, it clears the
-     * pathInfo and QueryString portions of the TemplateURI. So you can
-     * use the $link reference multiple times on a page and start over
-     * with a fresh object every time.
-     *
-     * @return A String with the built URL.
-     */
-    public String getRelativeLink()
-    {
-        String output = templateURI.getRelativeLink();
-
-        // This was added to use $link multiple times on a page and start
-        // over with a fresh set of data every time.
-        templateURI.removePathInfo();
-        templateURI.removeQueryData();
-
-        return output;
-    }
-
-    /**
-     * Returns the URI. After rendering the URI, it clears the
-     * pathInfo and QueryString portions of the TemplateURI. 
-     *
-     * @return A String with the URI in the form
-     * http://foo.com/Turbine/template/index.wm/hello/world
-     */
-    public String getLink()
-    {
-        return wantRelative ? 
-                getRelativeLink() : getAbsoluteLink();
-    }
-
-    /**
-     * Returns the relative URI leaving the source intact. Use this
-     * if you need the path_info and query data multiple times.
-     * This is equivalent to $link.Link or just $link,
-     * but does not reset the path_info and query data.
-     *
-     * @return A String with the URI in the form
-     * http://foo.com/Turbine/template/index.wm/hello/world
-     */
-    public String getURI()
-    {
-        return wantRelative ?
-                templateURI.getRelativeLink() : templateURI.getAbsoluteLink();
-    }
-
-    /**
-     * Returns the absolute URI leaving the source intact. Use this
-     * if you need the path_info and query data multiple times.
-     * This is equivalent to $link.AbsoluteLink but does not reset 
-     * the path_info and query data.
-     *
-     * @return A String with the URI in the form
-     * http://foo.com/Turbine/template/index.wm/hello/world
-     */
-    public String getAbsoluteURI()
-    {
-        return templateURI.getAbsoluteLink();
-    }
-
-    /**
-     * Returns the relative URI leaving the source intact. Use this
-     * if you need the path_info and query data multiple times.
-     * This is equivalent to $link.RelativeLink but does not reset
-     * the path_info and query data.
-     *
-     * @return A String with the URI in the form
-     * http://foo.com/Turbine/template/index.wm/hello/world
-     */
-    public String getRelativeURI()
-    {
-        return templateURI.getRelativeLink();
-    }
-
-    /**
-     * Same as getLink().
-     *
-     * @return A String with the URI represented by this object.
-     * 
-     */
-    public String toString()
-    {
-        return getLink();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pull/tools/TemplateLinkWithSlash.java b/src/java/org/apache/turbine/services/pull/tools/TemplateLinkWithSlash.java
deleted file mode 100644
index eec45dc..0000000
--- a/src/java/org/apache/turbine/services/pull/tools/TemplateLinkWithSlash.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.turbine.services.pull.tools;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.pull.ApplicationTool;
-
-/**
- * This class allows one to specify paths in the setPage method 
- * using '/' slash as opposed to the ',' used in TemplateLink.
- * It is less efficient as the '/' are converted to ',' to avoid
- * problems parsing the pathinfo after conversion in a web server. 
- * 
- * It is recommended that projects standardize on using the ',' 
- * separator and use TemplateLink.  But this class is available for
- * those who do not mind the inefficiency.
- *
- * <p>
- *
- * This is an application pull tool for the template system. You should <b>not</b>
- * use it in a normal application!
- *
- * @deprecated Use {@link org.apache.turbine.services.pull.tools.TemplateLink} instead and fix up your template references.
- *
- * @author <a href="jmcnally@collab.net">John D. McNally</a>
- * @version $Id$
- */
-public class TemplateLinkWithSlash
-    extends TemplateLink
-    implements ApplicationTool
-
-{
-    /**
-     * Default constructor
-     * <p>
-     * The init method must be called before use.
-     */
-    public TemplateLinkWithSlash()
-    {
-        super();
-    }
-    
-    /**
-     * Sets the template variable used by the Template Service.
-     * This method allows slashes '/' as the path separator.
-     *
-     * @param t A String with the template name.
-     * @return A TemplateLink.
-     */
-    public TemplateLink setPage(String template)
-    {
-        super.setPage( template.replace('/', ',') );
-        return this;
-    }
-}
-
-
diff --git a/src/java/org/apache/turbine/services/pull/tools/package.html b/src/java/org/apache/turbine/services/pull/tools/package.html
deleted file mode 100644
index 8c38309..0000000
--- a/src/java/org/apache/turbine/services/pull/tools/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Pull Tools to be used in a template based view.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/pull/util/DateFormatter.java b/src/java/org/apache/turbine/services/pull/util/DateFormatter.java
deleted file mode 100644
index eb74def..0000000
--- a/src/java/org/apache/turbine/services/pull/util/DateFormatter.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.apache.turbine.services.pull.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.pull.ApplicationTool;
-
-/**
- * This pull tool is used to format date objects into strings.
- *
- * @author <a href="mailto:qmccombs@nequalsone.com">Quinton McCombs</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public class DateFormatter
-        implements ApplicationTool
-{
-    /** Used for formatting date objects */
-    private SimpleDateFormat sdf = new SimpleDateFormat();
-
-    /** Default date format */
-    private static final String DATE_FORMAT_DEFAULT = "MM/dd/yyyy";
-
-    /**
-     * Property tag for the date format that is to be used for the web 
-     * application.
-     */
-    private static final String DATE_FORMAT_KEY = "tool.dateTool.format";
-
-    private String dateFormat = null;
-
-    /**
-     * Initialize the application tool. The data parameter holds a different
-     * type depending on how the tool is being instantiated:
-     * <ul>
-     * <li>For global tools data will be null
-     * <li>For request tools data will be of type RunData
-     * <li>For session and persistent tools data will be of type User
-     *
-     * @param data initialization data
-     */
-    public void init(Object data)
-    {
-        dateFormat = Turbine.getConfiguration()
-                .getString(DATE_FORMAT_KEY, DATE_FORMAT_DEFAULT);
-    }
-
-    /**
-     * Refresh the application tool. This is
-     * necessary for development work where you
-     * probably want the tool to refresh itself
-     * if it is using configuration information
-     * that is typically cached after initialization
-     */
-    public void refresh()
-    {
-    }
-
-    /**
-     * Formats the given date as a String using the default date format.
-     * The default date format is MM/dd/yyyy
-     *
-     * @param theDate date to format
-     * @return String value of the date
-     */
-    public String format(Date theDate)
-    {
-        return format(theDate, dateFormat);
-    }
-
-    /**
-     * Formats the given date as a String.
-     *
-     * @param theDate date to format
-     * @param dateFormatString format string to use.  See java.text.SimpleDateFormat
-     * for details.
-     * @return String value of the date
-     */
-    public String format(Date theDate, String dateFormatString)
-    {
-        String result = null;
-
-        if (StringUtils.isEmpty(dateFormatString) || theDate == null)
-        {
-            result = "";
-        }
-        else
-        {
-            this.sdf.applyPattern(dateFormatString);
-            result = this.sdf.format(theDate);
-        }
-        return result;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/pull/util/SessionData.java b/src/java/org/apache/turbine/services/pull/util/SessionData.java
deleted file mode 100644
index afa66a4..0000000
--- a/src/java/org/apache/turbine/services/pull/util/SessionData.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.apache.turbine.services.pull.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Iterator;
-
-import org.apache.turbine.services.pull.ApplicationTool;
-
-/**
- * Pull tool designed to be used in the session scope for storage of
- * temporary data.  This tool should eliminate the need for the
- * {@link org.apache.turbine.om.security.User#setTemp} and
- * {@link org.apache.turbine.om.security.User#getTemp} methods.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class SessionData implements ApplicationTool
-{
-    /** Storage of user defined data */
-    private Map dataStorage;
-
-    /**
-     * Initialize the application tool.
-     *
-     * @param data initialization data
-     */
-    public void init(Object data)
-    {
-        dataStorage = new HashMap();
-    }
-
-    /**
-     * Refresh the application tool.
-     */
-    public void refresh()
-    {
-        // do nothing
-    }
-
-    /**
-     * Gets the data stored under the key.  Null will be returned if the
-     * key does not exist or if null was stored under the key.
-     * <p>
-     * To check for a key with a null value use {@link #containsKey}.
-     *
-     * @param key key under which the data is stored.
-     * @return <code>Object</code> stored under the key.
-     */
-    public Object get(String key)
-    {
-        return dataStorage.get(key);
-    }
-
-    /**
-     * Determines is a given key is stored.
-     *
-     * @param key  the key to check for
-     * @return true if the key was found
-     */
-    public boolean containsKey(String key)
-    {
-        return dataStorage.containsKey(key);
-    }
-
-    /**
-     * Stores the data.  If the key already exists, the value will be
-     * overwritten.
-     *
-     * @param key   key under which the data will be stored.
-     * @param value data to store under the key.  Null values are allowed.
-     */
-    public void put(String key, Object value)
-    {
-        dataStorage.put(key, value);
-    }
-
-    /**
-     * Clears all data
-     */
-    public void clear()
-    {
-        dataStorage.clear();
-    }
-
-    /**
-     * Gets a iterator for the keys.
-     *
-     * @return <code>Iterator</code> for the keys
-     */
-    public Iterator iterator()
-    {
-        return dataStorage.keySet().iterator();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/pull/util/UIManager.java b/src/java/org/apache/turbine/services/pull/util/UIManager.java
deleted file mode 100644
index c952033..0000000
--- a/src/java/org/apache/turbine/services/pull/util/UIManager.java
+++ /dev/null
@@ -1,452 +0,0 @@
-package org.apache.turbine.services.pull.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.FileInputStream;
-
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.services.pull.TurbinePull;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.uri.DataURI;
-
-/**
- * UIManager.java
- * <br>
- * Manages all UI elements for a Turbine Application. Any
- * UI element can be accessed in any template using the
- * $ui handle (assuming you use the default PullService
- * configuration). So, for example, you could access
- * the background colour for your pages by using
- * $ui.bgcolor
- * <p>
- * <h3>Questions:</h3>
- * What is the best way to allow an application
- * to be skinned. And how to allow the flexible
- * altering of a particular UI element in certain
- * parts of the template hierarchy. For example
- * on one section of your site you might like
- * a certain bgcolor, on another part of your
- * site you might want another. How can be let
- * the designer specify these properties and
- * still use the single $app.ui.bgcolor in
- * all the templates.
- * <p>
- * It would also be very cool to use some form
- * of inheritence for UI elements. Say a $ui.bgcolor
- * is used in a template where the bgcolor is not
- * set for that part of hierarch, it would be cool
- * if it could find the setting for the bgcolor
- * in the parent directory. So you could override
- * a UI element where you wanted and the system
- * would fall back to the parent when necessary.
- * <p>
- * How to specify skins, how to deal with images,
- * how could this be handled with a web app.
- * <p>
- *
- * This is an application pull tool for the template system. You should <b>not</b>
- * use it in a normal application!
- *
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:james_coltman@majorband.co.uk">James Coltman</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class UIManager implements ApplicationTool
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(UIManager.class);
-
-    /**
-     * The location of the skins within the application
-     * resources directory.
-     */
-    private static final String SKINS_DIRECTORY = "/ui/skins";
-
-    /**
-     * The name of the directory where images are
-     * stored for this skin.
-     */
-    private static final String IMAGES_DIRECTORY = "/images";
-
-    /**
-     * Property tag for the skin that is to be
-     * used for the web application.
-     */
-    private static final String SKIN_PROPERTY = "tool.ui.skin";
-
-    /**
-     * Default skin name. This name actually represents
-     * a directory in the WEBAPP/resources/ui/skins
-     * directory. There is a file called skin.props
-     * which actually contains the name/value pairs.
-     */
-    private static final String SKIN_PROPERTY_DEFAULT = "default";
-
-    /**
-     * Attribute name of skinName value in User's temp hashmap.
-     */
-    private static final String SKIN_ATTRIBUTE =
-        UIManager.class.getName()+ ".skin";
-
-    /**
-     * The actual skin being used for the webapp.
-     */
-    private String skinName;
-
-    /**
-     * The skins directory.
-     */
-    private String skinsDirectory;
-
-    /**
-     * The file within the skin directory that actually
-     * contains the name/value pairs for the skin.
-     */
-    private static final String SKIN_PROPS_FILE = "skin.props";
-
-    /**
-     * The file name for the skin style sheet.
-     */
-    private static final String SKIN_CSS_FILE = "skin.css";
-
-    /**
-     * This the resources directory relative to the
-     * webapp context. Used for constructing correct
-     * URIs for retrieving images in image().
-     */
-    private String resourcesDirectory;
-
-    /**
-     * Properties to hold the name/value pairs
-     * for the skin.
-     */
-    private Properties skinProperties;
-
-    /**
-     * Initialize the UIManager object.
-     *
-     * @param data This is null, RunData or User depending upon specified tool scope.
-     */
-    public void init(Object data)
-    {
-        /**
-         * Store the resources directory for use in image().
-         */
-        resourcesDirectory = TurbinePull.getResourcesDirectory();
-
-        if (data == null)
-        {
-            log.debug("UI Manager scope is global");
-            setSkin();
-        }
-        else if (data instanceof RunData)
-        {
-            log.debug("UI Manager scope is request");
-            setSkin((RunData) data);
-        }
-        else if (data instanceof User)
-        {
-            log.debug("UI Manager scope is session");
-            setSkin((User) data);
-        }
-
-        skinsDirectory =
-                TurbinePull.getAbsolutePathToResourcesDirectory() + SKINS_DIRECTORY;
-
-        loadSkin();
-    }
-
-    /**
-     * This lets the tool know that it should be
-     * refreshed. The tool can perform whatever actions
-     * are necessary to refresh itself. This is necessary
-     * for sane development where you probably want the
-     * tools to refresh themselves on every request.
-     */
-    public void refresh()
-    {
-        log.debug("Refreshing UI manager");
-
-        loadSkin();
-    }
-
-    /**
-     * Retrieve a property from the properties held
-     * within the properties file for this skin.
-     */
-    public String get(String key)
-    {
-        return skinProperties.getProperty(key);
-    }
-
-    /**
-     * Retrieve the skin name.
-     */
-    public String getSkin()
-    {
-        return skinName;
-    }
-
-    /**
-     * Retrieve the URL for an image that is part
-     * of a skin. The images are stored in the
-     * WEBAPP/resources/ui/skins/&lt;SKIN&gt;/images
-     * directory.
-     *
-     * Use this if for some reason your server name,
-     * server scheme, or server port change on a
-     * per request basis. I'm not sure if this
-     * would happend in a load balanced situation.
-     * I think in most cases the image(String image)
-     * method would probably be enough, but I'm not
-     * absolutely positive.
-     */
-    public String image(String imageId, RunData data)
-    {
-        DataURI du = new DataURI(data);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-                append(SKINS_DIRECTORY).
-                append("/").
-                append(getSkin()).
-                append(IMAGES_DIRECTORY).
-                append("/").
-                append(imageId);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for an image that is part
-     * of a skin. The images are stored in the
-     * WEBAPP/resources/ui/skins/&lt;SKIN&gt;/images
-     * directory.
-     */
-    public String image(String imageId)
-    {
-        ServerData sd = Turbine.getDefaultServerData();
-        DataURI du = new DataURI(sd);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-           append(SKINS_DIRECTORY).
-           append("/").
-           append(getSkin()).
-           append(IMAGES_DIRECTORY).
-           append("/").
-           append(imageId);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part
-     * of a skin. The style is stored in the
-     * WEBAPP/resources/ui/skins/&lt;SKIN&gt; directory with the
-     * filename skin.css
-     *
-     * Use this if for some reason your server name,
-     * server scheme, or server port change on a
-     * per request basis. I'm not sure if this
-     * would happend in a load balanced situation.
-     * I think in most cases the style()
-     * method would probably be enough, but I'm not
-     * absolutely positive.
-     */
-    public String getStylecss(RunData data)
-    {
-        DataURI du = new DataURI(data);
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-                append(SKINS_DIRECTORY).
-                append("/").
-                append(getSkin()).
-                append("/").
-                append(SKIN_CSS_FILE);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Retrieve the URL for the style sheet that is part
-     * of a skin. The style is stored in the
-     * WEBAPP/resources/ui/skins/&lt;SKIN&gt; directory with the
-     * filename skin.css
-     */
-    public String getStylecss()
-    {
-        ServerData sd = Turbine.getDefaultServerData();
-        DataURI du = new DataURI(sd);
-
-        StringBuffer sb = new StringBuffer();
-
-        sb.append(resourcesDirectory).
-           append(SKINS_DIRECTORY).
-           append("/").
-           append(getSkin()).
-           append("/").
-           append(SKIN_CSS_FILE);
-
-        du.setScriptName(sb.toString());
-        return du.getAbsoluteLink();
-    }
-
-    /**
-     * Load the specified skin. In development mode
-     * this may occur frequently as the skin properties
-     * are being changed.
-     */
-    private void loadSkin()
-    {
-        skinProperties = new Properties();
-
-        try
-        {
-            FileInputStream is = new FileInputStream(
-                    skinsDirectory + "/" + getSkin() + "/" + SKIN_PROPS_FILE);
-
-            skinProperties.load(is);
-        }
-        catch (Exception e)
-        {
-            log.error("Cannot load skin: " + skinName);
-        }
-    }
-
-    /**
-     * Set the skin name to the skin from the TR.props
-     * file. If the property is not present use the
-     * default skin.
-     */
-    public void setSkin()
-    {
-        this.skinName = Turbine.getConfiguration()
-                .getString(SKIN_PROPERTY,
-                           SKIN_PROPERTY_DEFAULT);
-    }
-
-    /**
-     * Set the skin name to the specified skin.
-     *
-     * @param skinName the skin name to use.
-     */
-    public void setSkin(String skinName)
-    {
-        this.skinName = skinName;
-    }
-
-    /**
-     * Set the skin name when the tool is configured to be
-     * loaded on a per-request basis. By default it calls getSkin
-     * to return the skin specified in TR.properties. Developers can
-     * write a subclass of UIManager that overrides this method to
-     * determine the skin to use based on information held in the request.
-     *
-     * @param data a RunData instance
-     */
-    protected void setSkin(RunData data)
-    {
-        setSkin();
-    }
-
-    /**
-     * Set the skin name when the tool is configured to be
-     * loaded on a per-session basis. It the user's temp hashmap contains
-     * a value in the attribute specified by the String constant SKIN_ATTRIBUTE
-     * then that is returned. Otherwise it calls getSkin to return the skin
-     * specified in TR.properties.
-     *
-     * @param user a User instance
-     */
-    protected void setSkin(User user)
-    {
-        if (user.getTemp(SKIN_ATTRIBUTE) == null)
-        {
-            setSkin();
-        }
-        else
-        {
-            setSkin((String) user.getTemp(SKIN_ATTRIBUTE));
-        }
-    }
-
-    /**
-     * Set the skin name user's temp hashmap for the current session.
-     *
-     * @param user a User instance
-     * @param skin the skin name for the session
-     */
-    public static void setSkin(User user, String skin)
-    {
-        user.setTemp(SKIN_ATTRIBUTE, skin);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java b/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
deleted file mode 100644
index 2d05026..0000000
--- a/src/java/org/apache/turbine/services/rundata/DefaultTurbineRunData.java
+++ /dev/null
@@ -1,1557 +0,0 @@
-package org.apache.turbine.services.rundata;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.PrintWriter;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.Document;
-import org.apache.ecs.Element;
-import org.apache.ecs.StringElement;
-import org.apache.fulcrum.mimetype.MimeTypeService;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.DefaultPipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.FormMessages;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.SystemError;
-import org.apache.turbine.util.parser.CookieParser;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.pool.Recyclable;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.template.TemplateInfo;
-
-/**
- * DefaultTurbineRunData is the default implementation of the
- * TurbineRunData interface, which is distributed by the Turbine
- * RunData service, if another implementation is not defined in
- * the default or specified RunData configuration.
- * TurbineRunData is an extension to RunData, which
- * is an interface to run-rime information that is passed
- * within Turbine. This provides the threading mechanism for the
- * entire system because multiple requests can potentially come in
- * at the same time.  Thus, there is only one RunData implementation
- * for each request that is being serviced.
- *
- * <p>DefaultTurbineRunData implements the Recyclable interface making
- * it possible to pool its instances for recycling.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:bhoeneis@ee.ethz.ch">Bernie Hoeneisen</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class DefaultTurbineRunData
-        extends DefaultPipelineData
-        implements TurbineRunData, Recyclable
-{
-    /**
-     * The disposed flag.
-     */
-    private boolean disposed;
-    
-    /** The default locale. */
-    private static Locale defaultLocale = null;
-
-    /** The default charset. */
-    private static String defaultCharSet = null;
-
-    /** A reference to the GET/POST data parser. */
-    private ParameterParser parameters;
-
-    /** A reference to a cookie parser. */
-    public CookieParser cookies;
-
-    /** The servlet request interface. */
-    private HttpServletRequest req;
-
-    /** The servlet response interface. */
-    private HttpServletResponse res;
-
-    /** The servlet configuration. */
-    private ServletConfig config;
-
-    /**
-     * The servlet context information.
-     * Note that this is from the "Turbine" Servlet context.
-     */
-    private ServletContext servletContext;
-
-    /** The access control list. */
-    private AccessControlList acl;
-
-    /** Determines if there is information in the document or not. */
-    private boolean pageSet;
-
-    /** This creates an ECS Document. */
-    private Document page;
-
-    /** Cached action name to execute for this request. */
-    private String action;
-
-    /** This is the layout that the page will use to render the screen. */
-    private String layout;
-
-    /** Cached screen name to execute for this request. */
-    private String screen;
-
-    /** The character encoding of template files. */
-    private String templateEncoding;
-
-    /** Information used by a Template system (such as Velocity/JSP). */
-    private TemplateInfo templateInfo;
-
-    /** This is where output messages from actions should go. */
-    private StringElement message;
-
-    /**
-     * This is a dedicated message class where output messages from
-     * actions should go.
-     */
-    private FormMessages messages;
-
-    /** The user object. */
-    private User user;
-
-    /** This is what will build the <title></title> of the document. */
-    private String title;
-
-    /** Determines if there is information in the outputstream or not. */
-    private boolean outSet;
-
-    /**
-     * Cache the output stream because it can be used in many
-     * different places.
-     */
-    private PrintWriter out;
-
-    /** The locale. */
-    private Locale locale;
-
-    /** The HTTP charset. */
-    private String charSet;
-
-    /** The HTTP content type to return. */
-    private String contentType = "text/html";
-
-    /** If this is set, also set the status code to 302. */
-    private String redirectURI;
-
-    /** The HTTP status code to return. */
-    private int statusCode = HttpServletResponse.SC_OK;
-
-    /** This is a List to hold critical system errors. */
-    private List errors = new ArrayList();
-
-    /** JNDI Contexts. */
-    private Map jndiContexts;
-
-    /** Holds ServerData (basic properties) about this RunData object. */
-    private ServerData serverData;
-
-    /** @see #getRemoteAddr() */
-    private String remoteAddr;
-
-    /** @see #getRemoteHost() */
-    private String remoteHost;
-
-    /** @see #getUserAgent() */
-    private String userAgent;
-
-    /** A holder for stack trace. */
-    private String stackTrace;
-
-    /** A holder ofr stack trace exception. */
-    private Throwable stackTraceException;
-
-    /**
-     * Put things here and they will be shown on the default Error
-     * screen.  This is great for debugging variable values when an
-     * exception is thrown.
-     */
-    private Map debugVariables = new HashMap();
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(DefaultTurbineRunData.class);
-
-    /**
-     * Attempts to get the User object from the session.  If it does
-     * not exist, it returns null.
-     *
-     * @param session An HttpSession.
-     * @return A User.
-     */
-    public static User getUserFromSession(HttpSession session)
-    {
-        try
-        {
-            return (User) session.getAttribute(User.SESSION_KEY);
-        }
-        catch (ClassCastException e)
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Allows one to invalidate the user in a session.
-     *
-     * @param session An HttpSession.
-     * @return True if user was invalidated.
-     */
-    public static boolean removeUserFromSession(HttpSession session)
-    {
-        try
-        {
-            session.removeAttribute(User.SESSION_KEY);
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Gets the default locale defined by properties named
-     * "locale.default.lang" and "locale.default.country".
-     *
-     * This changed from earlier Turbine versions that you can
-     * rely on getDefaultLocale() to never return null.
-     *
-     * @return A Locale object.
-     */
-    protected static Locale getDefaultLocale()
-    {
-        if (defaultLocale == null)
-        {
-            /* Get the default locale and cache it in a static variable. */
-            String lang = Turbine.getConfiguration()
-                .getString(TurbineConstants.LOCALE_DEFAULT_LANGUAGE_KEY,
-                    TurbineConstants.LOCALE_DEFAULT_LANGUAGE_DEFAULT);
-
-            String country = Turbine.getConfiguration()
-                .getString(TurbineConstants.LOCALE_DEFAULT_COUNTRY_KEY,
-                    TurbineConstants.LOCALE_DEFAULT_COUNTRY_DEFAULT);
-
-
-            // We ensure that lang and country is never null
-            defaultLocale =  new Locale(lang, country);
-        }
-        return defaultLocale;
-    }
-
-    /**
-     * Gets the default charset defined by a property named
-     * "locale.default.charset" or by the specified locale.
-     * If the specified locale is null, the default locale is applied.
-     *
-     * @return the name of the default charset or null.
-     */
-    protected String getDefaultCharSet()
-    {
-        log.debug("getDefaultCharSet()");
-
-        if (defaultCharSet == null)
-        {
-            /* Get the default charset and cache it in a static variable. */
-            defaultCharSet = Turbine.getConfiguration()
-                .getString(TurbineConstants.LOCALE_DEFAULT_CHARSET_KEY,
-                    TurbineConstants.LOCALE_DEFAULT_CHARSET_DEFAULT);
-            log.debug("defaultCharSet = " + defaultCharSet + " (From Properties)");
-        }
-
-        String charset = defaultCharSet;
-        
-        if (StringUtils.isEmpty(charset))
-        {
-            log.debug("charset is empty!");
-            /* Default charset isn't specified, get the locale specific one. */
-            Locale locale = this.locale;
-            if (locale == null)
-            {
-                locale = getDefaultLocale();
-                log.debug("Locale was null, is now " + locale + " (from getDefaultLocale())");
-            }
-
-            log.debug("Locale is " + locale);
-
-            if (!locale.equals(Locale.US))
-            {
-                log.debug("We don't have US Locale!");
-                AvalonComponentService ecm= (AvalonComponentService)TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME);
-				MimeTypeService mimeTypeService=null;
-                try {
-					mimeTypeService= (MimeTypeService)ecm.lookup(MimeTypeService.ROLE);
-                }
-                catch (Exception e){
-                    throw new RuntimeException(e);
-                }
-                charset = mimeTypeService.getCharSet(locale);
-
-                log.debug("Charset now " + charset);
-            }
-        }
-
-        log.debug("Returning default Charset of " + charset);
-        return charset;
-    }
-
-    /**
-     * Constructs a run data object.
-     */
-    public DefaultTurbineRunData()
-    {
-        super();
-        recycle();
-    }
-
-    /**
-     * Recycles the object by removing its disposed flag.
-     */
-    public void recycle()
-    {
-        disposed = false;
-    }
-
-    /**
-     * Disposes a run data object.
-     */
-    public void dispose()
-    {
-        parameters = null;
-        cookies = null;
-        req = null;
-        res = null;
-        config = null;
-        servletContext = null;
-        acl = null;
-        pageSet = false;
-        page = null;
-        action = null;
-        layout = null;
-        screen = null;
-        templateEncoding = null;
-        templateInfo = null;
-        message = null;
-        messages = null;
-        user = null;
-        title = null;
-        outSet = false;
-        out = null;
-        locale = null;
-        charSet = null;
-        contentType = "text/html";
-        redirectURI = null;
-        statusCode = HttpServletResponse.SC_OK;
-        errors.clear();
-        jndiContexts = null;
-        serverData = null;
-        remoteAddr = null;
-        remoteHost = null;
-        userAgent = null;
-        stackTrace = null;
-        stackTraceException = null;
-        debugVariables.clear();
-    }
-
-    // ***************************************
-    // Implementation of the RunData interface
-    // ***************************************
-
-    /**
-     * Gets the parameters.
-     *
-     * @return a parameter parser.
-     */
-    public ParameterParser getParameters()
-    {
-        // Parse the parameters first, if not yet done.
-        if ((this.parameters != null) &&
-                (this.parameters.getRequest() != this.req))
-        {
-            this.parameters.setRequest(this.req);
-        }
-        return this.parameters;
-    }
-
-    /**
-     * Gets the cookies.
-     *
-     * @return a cookie parser.
-     */
-    public CookieParser getCookies()
-    {
-        // Parse the cookies first, if not yet done.
-        if ((this.cookies != null) &&
-                (this.cookies.getRequest() != getRequest()))
-        {
-            this.cookies.setData(getRequest(), getResponse());            
-        }
-        return this.cookies;
-    }
-
-    /**
-     * Gets the servlet request.
-     *
-     * @return the request.
-     */
-    public HttpServletRequest getRequest()
-    {
-        return this.req;
-    }
-
-    /**
-     * Gets the servlet response.
-     *
-     * @return the response.
-     */
-    public HttpServletResponse getResponse()
-    {
-        return this.res;
-    }
-
-    /**
-     * Gets the servlet session information.
-     *
-     * @return the session.
-     */
-    public HttpSession getSession()
-    {
-        return getRequest().getSession();
-    }
-
-    /**
-     * Gets the servlet configuration used during servlet init.
-     *
-     * @return the configuration.
-     */
-    public ServletConfig getServletConfig()
-    {
-        return this.config;
-    }
-
-    /**
-     * Gets the servlet context used during servlet init.
-     *
-     * @return the context.
-     */
-    public ServletContext getServletContext()
-    {
-        return this.servletContext;
-    }
-
-    /**
-     * Gets the access control list.
-     *
-     * @return the access control list.
-     */
-    public AccessControlList getACL()
-    {
-        return acl;
-    }
-
-    /**
-     * Sets the access control list.
-     *
-     * @param acl an access control list.
-     */
-    public void setACL(AccessControlList acl)
-    {
-        this.acl = acl;
-    }
-
-    /**
-     * Checks to see if the page is set.
-     *
-     * @return true if the page is set.
-     * @deprecated no replacement planned, ECS is no longer a requirement
-     */
-    public boolean isPageSet()
-    {
-        return pageSet;
-    }
-
-    /**
-     * Gets the page.
-     *
-     * @return a document.
-     * @deprecated no replacement planned, ECS is no longer a requirement
-     */
-    public Document getPage()
-    {
-        pageSet = true;
-        if (this.page == null) 
-        {
-            this.page = new Document();
-        }
-        return this.page;
-    }
-
-    /**
-     * Whether or not an action has been defined.
-     *
-     * @return true if an action has been defined.
-     */
-    public boolean hasAction()
-    {
-        return (StringUtils.isNotEmpty(this.action)
-          && !this.action.equalsIgnoreCase("null"));
-    }
-
-    /**
-     * Gets the action. It returns an empty string if null so
-     * that it is easy to do conditionals on it based on the
-     * equalsIgnoreCase() method.
-     *
-     * @return a string, "" if null.
-     */
-    public String getAction()
-    {
-        return (hasAction() ? this.action : "");
-    }
-
-    /**
-     * Sets the action for the request.
-     *
-     * @param action a atring.
-     */
-    public void setAction(String action)
-    {
-        this.action = action;
-    }
-
-    /**
-     * If the Layout has not been defined by the screen then set the
-     * layout to be "DefaultLayout".  The screen object can also
-     * override this method to provide intelligent determination of
-     * the Layout to execute.  You can also define that logic here as
-     * well if you want it to apply on a global scale.  For example,
-     * if you wanted to allow someone to define layout "preferences"
-     * where they could dynamicially change the layout for the entire
-     * site.
-     *
-     * @return a string.
-     */
-
-    public String getLayout()
-    {
-        if (this.layout == null)
-        {
-            /*
-             * This will return something if the template
-             * services are running. If we get nothing we
-             * will fall back to the ECS layout.
-             */
-            layout = TurbineTemplate.getDefaultLayoutName(this);
-
-            if (layout == null)
-            {
-                layout = "DefaultLayout";
-            }
-        }
-
-        return this.layout;
-    }
-
-    /**
-     * Set the layout for the request.
-     *
-     * @param layout a string.
-     */
-    public void setLayout(String layout)
-    {
-        this.layout = layout;
-    }
-
-    /**
-     * Convenience method for a template info that
-     * returns the layout template being used.
-     *
-     * @return a string.
-     */
-    public String getLayoutTemplate()
-    {
-        return getTemplateInfo().getLayoutTemplate();
-    }
-
-    /**
-     * Modifies the layout template for the screen. This convenience
-     * method allows for a layout to be modified from within a
-     * template. For example;
-     *
-     *    $data.setLayoutTemplate("NewLayout.vm")
-     *
-     * @param layout a layout template.
-     */
-    public void setLayoutTemplate(String layout)
-    {
-        getTemplateInfo().setLayoutTemplate(layout);
-    }
-
-    /**
-     * Whether or not a screen has been defined.
-     *
-     * @return true if a screen has been defined.
-     */
-    public boolean hasScreen()
-    {
-        return StringUtils.isNotEmpty(this.screen);
-    }
-
-    /**
-     * Gets the screen to execute.
-     *
-     * @return a string.
-     */
-    public String getScreen()
-    {
-        return (hasScreen() ? this.screen : "");
-    }
-
-    /**
-     * Sets the screen for the request.
-     *
-     * @param screen a string.
-     */
-    public void setScreen(String screen)
-    {
-        this.screen = screen;
-    }
-
-    /**
-     * Convenience method for a template info that
-     * returns the name of the template being used.
-     *
-     * @return a string.
-     */
-    public String getScreenTemplate()
-    {
-        return getTemplateInfo().getScreenTemplate();
-    }
-
-    /**
-     * Sets the screen template for the request. For
-     * example;
-     *
-     *    $data.setScreenTemplate("NewScreen.vm")
-     *
-     * @param screen a screen template.
-     */
-    public void setScreenTemplate(String screen)
-    {
-        getTemplateInfo().setScreenTemplate(screen);
-    }
-
-    /**
-     * Gets the character encoding to use for reading template files.
-     *
-     * @return the template encoding or null if not specified.
-     */
-    public String getTemplateEncoding()
-    {
-        return templateEncoding;
-    }
-
-    /**
-     * Sets the character encoding to use for reading template files.
-     *
-     * @param encoding the template encoding.
-     */
-    public void setTemplateEncoding(String encoding)
-    {
-        templateEncoding = encoding;
-    }
-
-    /**
-     * Gets the template info. Creates a new one if needed.
-     *
-     * @return a template info.
-     */
-    public TemplateInfo getTemplateInfo()
-    {
-        if (templateInfo == null)
-        {
-            templateInfo = new TemplateInfo(this);
-        }
-        return templateInfo;
-    }
-
-    /**
-     * Whether or not a message has been defined.
-     *
-     * @return true if a message has been defined.
-     */
-    public boolean hasMessage()
-    {
-        return (this.message != null)
-            && StringUtils.isNotEmpty(this.message.toString());
-    }
-
-    /**
-     * Gets the results of an action or another message
-     * to be displayed as a string.
-     *
-     * @return a string.
-     */
-    public String getMessage()
-    {
-        return (this.message == null ? null : this.message.toString());
-    }
-
-    /**
-     * Sets the message for the request as a string.
-     *
-     * @param msg a string.
-     */
-    public void setMessage(String msg)
-    {
-        this.message = new StringElement(msg);
-    }
-
-    /**
-     * Adds the string to message. If message has prior messages from
-     * other actions or screens, this method can be used to chain them.
-     *
-     * @param msg a string.
-     */
-    public void addMessage(String msg)
-    {
-        addMessage(new StringElement(msg));
-    }
-
-    /**
-     * Gets the results of an action or another message
-     * to be displayed as an ECS string element.
-     *
-     * @return a string element.
-     */
-    public StringElement getMessageAsHTML()
-    {
-        return this.message;
-    }
-
-    /**
-     * Sets the message for the request as an ECS element.
-     *
-     * @param msg an element.
-     */
-    public void setMessage(Element msg)
-    {
-        this.message = new StringElement(msg);
-    }
-
-    /**
-     * Adds the ECS element to message. If message has prior messages from
-     * other actions or screens, this method can be used to chain them.
-     *
-     * @param msg an element.
-     */
-    public void addMessage(Element msg)
-    {
-        if (msg != null)
-        {
-            if (message != null)
-            {
-                message.addElement(msg);
-            }
-            else
-            {
-                message = new StringElement(msg);
-            }
-        }
-    }
-
-    /**
-     * Unsets the message for the request.
-     */
-    public void unsetMessage()
-    {
-        this.message = null;
-    }
-
-    /**
-     * Gets a FormMessages object where all the messages to the
-     * user should be stored.
-     *
-     * @return a FormMessages.
-     */
-    public FormMessages getMessages()
-    {
-        if (this.messages == null)
-        {
-            this.messages = new FormMessages();
-        }
-        return this.messages;
-    }
-
-    /**
-     * Sets the FormMessages object for the request.
-     *
-     * @param msgs A FormMessages.
-     */
-    public void setMessages(FormMessages msgs)
-    {
-        this.messages = msgs;
-    }
-
-    /**
-     * Gets the title of the page.
-     *
-     * @return a string.
-     */
-    public String getTitle()
-    {
-        return (this.title == null ? "" : this.title);
-    }
-
-    /**
-     * Sets the title of the page.
-     *
-     * @param title a string.
-     */
-    public void setTitle(String title)
-    {
-        this.title = title;
-    }
-
-    /**
-     * Checks if a user exists in this session.
-     *
-     * @return true if a user exists in this session.
-     */
-    public boolean userExists()
-    {
-        user = getUserFromSession();
-        return (user != null);
-    }
-
-    /**
-     * Gets the user.
-     *
-     * @return a user.
-     */
-    public User getUser()
-    {
-        return this.user;
-    }
-
-    /**
-     * Sets the user.
-     *
-     * @param user a user.
-     */
-    public void setUser(User user)
-    {
-        log.debug("user set: " + user.getName());
-        this.user = user;
-    }
-
-    /**
-     * Attempts to get the user from the session. If it does
-     * not exist, it returns null.
-     *
-     * @return a user.
-     */
-    public User getUserFromSession()
-    {
-        return getUserFromSession(getSession());
-    }
-
-    /**
-     * Allows one to invalidate the user in the default session.
-     *
-     * @return true if user was invalidated.
-     */
-    public boolean removeUserFromSession()
-    {
-        return removeUserFromSession(getSession());
-    }
-
-    /**
-     * Checks to see if out is set.
-     *
-     * @return true if out is set.
-     * @deprecated no replacement planned, response writer will not be cached
-     */
-    public boolean isOutSet()
-    {
-        return outSet;
-    }
-
-    /**
-     * Gets the print writer. First time calling this
-     * will set the print writer via the response.
-     *
-     * @return a print writer.
-     * @throws IOException
-     * @deprecated no replacement planned, response writer will not be cached
-     */
-    public PrintWriter getOut()
-            throws IOException
-    {
-        // Check to see if null first.
-        if (this.out == null)
-        {
-            setOut(res.getWriter());
-        }
-        pageSet = false;
-        outSet = true;
-        return this.out;
-    }
-
-    /**
-     * Declares that output will be direct to the response stream,
-     * even though getOut() may never be called.  Useful for response
-     * mechanisms that may call res.getWriter() themselves
-     * (such as JSP.)
-     */
-    public void declareDirectResponse()
-    {
-        outSet = true;
-        pageSet = false;
-    }
-
-    /**
-     * Gets the locale. If it has not already been defined with
-     * setLocale(), then  properties named "locale.default.lang"
-     * and "locale.default.country" are checked from the Resource
-     * Service and the corresponding locale is returned. If these
-     * properties are undefined, JVM's default locale is returned.
-     *
-     * @return the locale.
-     */
-    public Locale getLocale()
-    {
-        Locale locale = this.locale;
-        if (locale == null)
-        {
-            locale = getDefaultLocale();
-        }
-        return locale;
-    }
-
-    /**
-     * Sets the locale.
-     *
-     * @param locale the new locale.
-     */
-    public void setLocale(Locale locale)
-    {
-        this.locale = locale;
-    }
-
-    /**
-     * Gets the charset. If it has not already been defined with
-     * setCharSet(), then a property named "locale.default.charset"
-     * is checked from the Resource Service and returned. If this
-     * property is undefined, the default charset of the locale
-     * is returned. If the locale is undefined, null is returned.
-     *
-     * @return the name of the charset or null.
-     */
-    public String getCharSet()
-    {
-        log.debug("getCharSet()");
-
-        if (StringUtils.isEmpty(charSet))
-        {
-            log.debug("Charset was null!");
-            return getDefaultCharSet();
-        }
-        else
-        {
-            return charSet;
-        }
-    }
-
-    /**
-     * Sets the charset.
-     *
-     * @param charSet the name of the new charset.
-     */
-    public void setCharSet(String charSet)
-    {
-        log.debug("setCharSet(" + charSet + ")");
-        this.charSet = charSet;
-    }
-
-    /**
-     * Gets the HTTP content type to return. If a charset
-     * has been specified, it is included in the content type.
-     * If the charset has not been specified and the main type
-     * of the content type is "text", the default charset is
-     * included. If the default charset is undefined, but the
-     * default locale is defined and it is not the US locale,
-     * a locale specific charset is included.
-     *
-     * @return the content type or an empty string.
-     */
-    public String getContentType()
-    {
-        if (StringUtils.isNotEmpty(contentType))
-        {
-            if (StringUtils.isEmpty(charSet))
-            {
-                if (contentType.startsWith("text/"))
-                {
-                    return contentType + "; charset=" + getDefaultCharSet();
-                }
-            }
-            else
-            {
-                return contentType + "; charset=" + charSet;
-            }
-        }
-
-        return "";
-    }
-
-    /**
-     * Sets the HTTP content type to return.
-     *
-     * @param contentType a string.
-     */
-    public void setContentType(String contentType)
-    {
-        this.contentType = contentType;
-    }
-
-    /**
-     * Gets the redirect URI. If this is set, also make sure to set
-     * the status code to 302.
-     *
-     * @return a string, "" if null.
-     */
-    public String getRedirectURI()
-    {
-        return (this.redirectURI == null ? "" : redirectURI);
-    }
-
-    /**
-     * Sets the redirect uri. If this is set, also make sure to set
-     * the status code to 302.
-     *
-     * @param ruri a string.
-     */
-    public void setRedirectURI(String ruri)
-    {
-        this.redirectURI = ruri;
-    }
-
-    /**
-     * Gets the HTTP status code to return.
-     *
-     * @return the status.
-     */
-    public int getStatusCode()
-    {
-        return statusCode;
-    }
-
-    /**
-     * Sets the HTTP status code to return.
-     *
-     * @param statusCode the status.
-     */
-    public void setStatusCode(int statusCode)
-    {
-        this.statusCode = statusCode;
-    }
-
-    /**
-     * Gets an array of system errors.
-     *
-     * @return a SystemError[].
-     */
-    public SystemError[] getSystemErrors()
-    {
-        SystemError[] result = new SystemError[errors.size()];
-        errors.toArray(result);
-        return result;
-    }
-
-    /**
-     * Adds a critical system error.
-     *
-     * @param err a system error.
-     */
-    public void setSystemError(SystemError err)
-    {
-        this.errors.add(err);
-    }
-
-    /**
-     * Gets JNDI Contexts.
-     *
-     * @return a hashtable.
-     */
-    public Map getJNDIContexts()
-    {
-        if (jndiContexts == null)
-            jndiContexts = new HashMap();
-        return jndiContexts;
-    }
-
-    /**
-     * Sets JNDI Contexts.
-     *
-     * @param contexts a hashtable.
-     */
-    public void setJNDIContexts(Map contexts)
-    {
-        this.jndiContexts = contexts;
-    }
-
-    /**
-     * Gets the cached server scheme.
-     *
-     * @return a string.
-     */
-    public String getServerScheme()
-    {
-        return getServerData().getServerScheme();
-    }
-
-    /**
-     * Gets the cached server name.
-     *
-     * @return a string.
-     */
-    public String getServerName()
-    {
-        return getServerData().getServerName();
-    }
-
-    /**
-     * Gets the cached server port.
-     *
-     * @return an int.
-     */
-    public int getServerPort()
-    {
-        return getServerData().getServerPort();
-    }
-
-    /**
-     * Gets the cached context path.
-     *
-     * @return a string.
-     */
-    public String getContextPath()
-    {
-        return getServerData().getContextPath();
-    }
-
-    /**
-     * Gets the cached script name.
-     *
-     * @return a string.
-     */
-    public String getScriptName()
-    {
-        return getServerData().getScriptName();
-    }
-
-    /**
-     * Gets the server data ofy the request.
-     *
-     * @return server data.
-     */
-    public ServerData getServerData()
-    {
-        return this.serverData;
-    }
-
-    /**
-     * Gets the IP address of the client that sent the request.
-     *
-     * @return a string.
-     */
-    public String getRemoteAddr()
-    {
-        if (this.remoteAddr == null)
-        {
-            this.remoteAddr = this.getRequest().getRemoteAddr();
-        }
-
-        return this.remoteAddr;
-    }
-
-    /**
-     * Gets the qualified name of the client that sent the request.
-     *
-     * @return a string.
-     */
-    public String getRemoteHost()
-    {
-        if (this.remoteHost == null)
-        {
-            this.remoteHost = this.getRequest().getRemoteHost();
-        }
-
-        return this.remoteHost;
-    }
-
-    /**
-     * Get the user agent for the request. The semantics here
-     * are muddled because RunData caches the value after the
-     * first invocation. This is different e.g. from getCharSet().
-     *
-     * @return a string.
-     */
-    public String getUserAgent()
-    {
-        if (StringUtils.isEmpty(userAgent))
-        {
-            userAgent = this.getRequest().getHeader("User-Agent");
-        }
-
-        return userAgent;
-    }
-
-    /**
-     * Pulls a user object from the session and increments the access
-     * counter and sets the last access date for the object.
-     */
-    public void populate()
-    {
-        user = getUserFromSession();
-
-        if (user != null)
-        {
-            user.setLastAccessDate();
-            user.incrementAccessCounter();
-            user.incrementAccessCounterForSession();
-        }
-    }
-
-    /**
-     * Saves a user object into the session.
-     */
-    public void save()
-    {
-        getSession().setAttribute(User.SESSION_KEY, user);
-    }
-
-    /**
-     * Gets the stack trace if set.
-     *
-     * @return the stack trace.
-     */
-    public String getStackTrace()
-    {
-        return stackTrace;
-    }
-
-    /**
-     * Gets the stack trace exception if set.
-     *
-     * @return the stack exception.
-     */
-    public Throwable getStackTraceException()
-    {
-        return stackTraceException;
-    }
-
-    /**
-     * Sets the stack trace.
-     *
-     * @param trace the stack trace.
-     * @param exp the exception.
-     */
-    public void setStackTrace(String trace, Throwable exp)
-    {
-        stackTrace = trace;
-        stackTraceException = exp;
-    }
-
-    /**
-     * Gets a Map of debug variables.
-     *
-     * @return a Map of debug variables.
-     * @deprecated use {@link #getDebugVariables} instead
-     */
-    public Map getVarDebug()
-    {
-        return debugVariables;
-    }
-
-    /**
-     * Sets a name/value pair in an internal Map that is accessible from the
-     * Error screen.  This is a good way to get debugging information
-     * when an exception is thrown.
-     *
-     * @param name name of the variable
-     * @param value value of the variable.
-     */
-    public void setDebugVariable(String name, Object value)
-    {
-        this.debugVariables.put(name, value);
-    }
-
-    /**
-     * Gets a Map of debug variables.
-     *
-     * @return a Map of debug variables.
-     */
-    public Map getDebugVariables()
-    {
-        return this.debugVariables;
-    }
-
-    // **********************************************
-    // Implementation of the TurbineRunData interface
-    // **********************************************
-
-    /**
-     * Gets the parameter parser without parsing the parameters.
-     *
-     * @return the parameter parser.
-     */
-    public ParameterParser getParameterParser()
-    {
-        return parameters;
-    }
-
-    /**
-     * Sets the parameter parser.
-     *
-     * @param parser a parameter parser.
-     */
-    public void setParameterParser(ParameterParser parser)
-    {
-        parameters = parser;
-    }
-
-    /**
-     * Gets the cookie parser without parsing the cookies.
-     *
-     * @return the cookie parser.
-     */
-    public CookieParser getCookieParser()
-    {
-        return cookies;
-    }
-
-    /**
-     * Sets the cookie parser.
-     *
-     * @param parser a cookie parser.
-     */
-    public void setCookieParser(CookieParser parser)
-    {
-        cookies = parser;
-    }
-
-    /**
-     * Sets the servlet request.
-     *
-     * @param req a request.
-     */
-    public void setRequest(HttpServletRequest req)
-    {
-        this.req = req;
-    }
-
-    /**
-     * Sets the servlet response.
-     *
-     * @param res a response.
-     */
-    public void setResponse(HttpServletResponse res)
-    {
-        this.res = res;
-    }
-
-    /**
-     * Sets the servlet session information.
-     *
-     * @param sess a session.
-     * @deprecated No replacement. This method no longer does anything.
-     */
-    public void setSession(HttpSession sess)
-    {
-    }
-
-    /**
-     * Sets the servlet configuration used during servlet init.
-     *
-     * @param config a configuration.
-     */
-    public void setServletConfig(ServletConfig config)
-    {
-        this.config = config;
-        if (config == null)
-        {
-            this.servletContext = null;
-        }
-        else
-        {
-            this.servletContext = config.getServletContext();
-        }
-    }
-
-    /**
-     * Sets the server data of the request.
-     *
-     * @param serverData server data.
-     */
-    public void setServerData(ServerData serverData)
-    {
-        this.serverData = serverData;
-    }
-
-    // ********************
-    // Miscellanous setters
-    // ********************
-
-    /**
-     * Sets the print writer.
-     *
-     * @param out a print writer.
-     * @deprecated no replacement planned, response writer will not be cached
-     */
-    protected void setOut(PrintWriter out)
-    {
-        this.out = out;
-    }
-
-    /**
-     * Sets the cached server scheme that is stored in the server data.
-     *
-     * @param serverScheme a string.
-     */
-    protected void setServerScheme(String serverScheme)
-    {
-        getServerData().setServerScheme(serverScheme);
-    }
-
-    /**
-     * Sets the cached server same that is stored in the server data.
-     *
-     * @param serverName a string.
-     */
-    protected void setServerName(String serverName)
-    {
-        getServerData().setServerName(serverName);
-    }
-
-    /**
-     * Sets the cached server port that is stored in the server data.
-     *
-     * @param port an int.
-     */
-    protected void setServerPort(int port)
-    {
-        getServerData().setServerPort(port);
-    }
-
-    /**
-     * Sets the cached context path that is stored in the server data.
-     *
-     * @param contextPath a string.
-     */
-    protected void setContextPath(String contextPath)
-    {
-        getServerData().setContextPath(contextPath);
-    }
-
-    /**
-     * Sets the cached script name that is stored in the server data.
-     *
-     * @param scriptName a string.
-     */
-    protected void setScriptName(String scriptName)
-    {
-        getServerData().setScriptName(scriptName);
-    }
- 
-    /**
-     * Checks whether the object is disposed.
-     *
-     * @return true, if the object is disposed.
-     */
-    public boolean isDisposed()
-    {
-        return disposed;
-    }    
-    
-}
diff --git a/src/java/org/apache/turbine/services/rundata/RunDataService.java b/src/java/org/apache/turbine/services/rundata/RunDataService.java
deleted file mode 100644
index 3a2b877..0000000
--- a/src/java/org/apache/turbine/services/rundata/RunDataService.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.apache.turbine.services.rundata;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The RunData Service provides the implementations for RunData and
- * related interfaces required by request processing. It supports
- * different configurations of implementations, which can be selected
- * by specifying a configuration key. It may use pooling, in which case
- * the implementations should implement the Recyclable interface.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface RunDataService
-    extends Service
-{
-    /** The key under which this service is stored in TurbineServices. */
-    String SERVICE_NAME = "RunDataService";
-
-    /** The default parser configuration key. */
-    String DEFAULT_CONFIG = "default";
-
-    /** The property for the implemention of the RunData object */
-    String RUN_DATA_KEY = "run.data";
-
-    /** The property for the implemention of the ParameterParser. */
-    String PARAMETER_PARSER_KEY = "parameter.parser";
-
-    /** The property for the implemention of the CookieParser. */
-    String COOKIE_PARSER_KEY = "cookie.parser";
-
-    /**
-     * Gets a default RunData object.
-     *
-     * @param req a servlet request.
-     * @param res a servlet response.
-     * @param config a servlet config.
-     * @return a new or recycled RunData object.
-     * @throws TurbineException if the operation fails.
-     */
-    RunData getRunData(HttpServletRequest req,
-                       HttpServletResponse res,
-                       ServletConfig config)
-            throws TurbineException;
-
-    /**
-     * Gets a RunData object from a specific configuration.
-     *
-     * @param key a configuration key.
-     * @param req a servlet request.
-     * @param res a servlet response.
-     * @param config a servlet config.
-     * @return a new or recycled RunData object.
-     * @throws TurbineException if the operation fails.
-     */
-    RunData getRunData(String key,
-                       HttpServletRequest req,
-                       HttpServletResponse res,
-                       ServletConfig config)
-            throws TurbineException;
-
-    /**
-     * Puts the used RunData object back to the factory for recycling.
-     *
-     * @param data the used RunData object.
-     * @return true, if pooling is supported and the object was accepted.
-     */
-    boolean putRunData(RunData data);
-}
diff --git a/src/java/org/apache/turbine/services/rundata/TurbineRunData.java b/src/java/org/apache/turbine/services/rundata/TurbineRunData.java
deleted file mode 100644
index 05df235..0000000
--- a/src/java/org/apache/turbine/services/rundata/TurbineRunData.java
+++ /dev/null
@@ -1,153 +0,0 @@
-package org.apache.turbine.services.rundata;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.parser.CookieParser;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.pool.Recyclable;
-
-/**
- * TurbineRunData is an extension to the RunData interface to be
- * implemented by RunData implementations to be distributed by
- * the Turbine RunData Service. The extensions define methods
- * that are used by the service for initilizing the implementation,
- * but which are not meant to be called by the actual client objects.
- *
- * <p>TurbineRunData extends also the Recyclable interface making
- * it possible to pool its implementations for recycling.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:bhoeneis@ee.ethz.ch">Bernie Hoeneisen</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface TurbineRunData
-    extends RunData,
-            Recyclable
-{
-    /**
-     * Gets the parameter parser without parsing the parameters.
-     *
-     * @return the parameter parser.
-     */
-    ParameterParser getParameterParser();
-
-    /**
-     * Sets the parameter parser.
-     *
-     * @param parser a parameter parser.
-     */
-    void setParameterParser(ParameterParser parser);
-
-    /**
-     * Gets the cookie parser without parsing the cookies.
-     *
-     * @return the cookie parser.
-     */
-    CookieParser getCookieParser();
-
-    /**
-     * Sets the cookie parser.
-     *
-     * @param parser a cookie parser.
-     */
-    void setCookieParser(CookieParser parser);
-
-    /**
-     * Sets the servlet request.
-     *
-     * @param req a request.
-     */
-    void setRequest(HttpServletRequest req);
-
-    /**
-     * Sets the servlet response.
-     *
-     * @param res a response.
-     */
-    void setResponse(HttpServletResponse res);
-
-    /**
-     * Sets the servlet session information.
-     *
-     * @param sess a session.
-     * @deprecated No replacement. This method no longer does anything.
-     */
-    void setSession(HttpSession sess);
-
-    /**
-     * Sets the servlet configuration used during servlet init.
-     *
-     * @param config a configuration.
-     */
-    void setServletConfig(ServletConfig config);
-
-    /**
-     * Sets the server data of the request.
-     *
-     * @param serverData server data.
-     */
-    void setServerData(ServerData serverData);
-}
diff --git a/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java b/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
deleted file mode 100644
index 0b13471..0000000
--- a/src/java/org/apache/turbine/services/rundata/TurbineRunDataService.java
+++ /dev/null
@@ -1,283 +0,0 @@
-package org.apache.turbine.services.rundata;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.pool.PoolService;
-import org.apache.turbine.services.pool.TurbinePool;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.CookieParser;
-import org.apache.turbine.util.parser.DefaultCookieParser;
-import org.apache.turbine.util.parser.DefaultParameterParser;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * The RunData Service provides the implementations for RunData and
- * related interfaces required by request processing. It supports
- * different configurations of implementations, which can be selected
- * by specifying a configuration key. It may use pooling, in which case
- * the implementations should implement the Recyclable interface.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineRunDataService
-    extends TurbineBaseService
-    implements RunDataService
-{
-
-    /** The default implementation of the RunData object*/
-    private static final String DEFAULT_RUN_DATA =
-        DefaultTurbineRunData.class.getName();
-
-    /** The default implementation of the Parameter Parser object */
-    private static final String DEFAULT_PARAMETER_PARSER =
-        DefaultParameterParser.class.getName();
-
-    /** The default implementation of the Cookie parser object */
-    private static final String DEFAULT_COOKIE_PARSER =
-        DefaultCookieParser.class.getName();
-
-    /** The map of configurations. */
-    private Map configurations = new HashMap();
-
-    /** Private reference to the pool service for object recycling */
-    private PoolService pool = null;
-
-    /**
-     * Constructs a RunData Service.
-     */
-    public TurbineRunDataService()
-    {
-    }
-
-    /**
-     * Initializes the service by setting the pool capacity.
-     *
-     * @throws InitializationException if initialization fails.
-     */
-    public void init()
-            throws InitializationException
-    {
-        // Create a default configuration.
-        String[] def = new String[]
-        {
-            DEFAULT_RUN_DATA,
-            DEFAULT_PARAMETER_PARSER,
-            DEFAULT_COOKIE_PARSER
-        };
-        configurations.put(DEFAULT_CONFIG, def.clone());
-
-        // Check other configurations.
-        Configuration conf = getConfiguration();
-        if (conf != null)
-        {
-            String key,value;
-            String[] config;
-            String[] plist = new String[]
-            {
-                RUN_DATA_KEY,
-                PARAMETER_PARSER_KEY,
-                COOKIE_PARSER_KEY
-            };
-            for (Iterator i = conf.getKeys(); i.hasNext();)
-            {
-                key = (String) i.next();
-                value = conf.getString(key);
-                for (int j = 0; j < plist.length; j++)
-                {
-                    if (key.endsWith(plist[j]) &&
-                            (key.length() > (plist[j].length() + 1)))
-                    {
-                        key = key.substring(0, key.length() - plist[j].length() - 1);
-                        config = (String[]) configurations.get(key);
-                        if (config == null)
-                        {
-                            config = (String[]) def.clone();
-                            configurations.put(key, config);
-                        }
-                        config[j] = value;
-                        break;
-                    }
-                }
-            }
-        }
-        pool = TurbinePool.getService();
-
-        if (pool == null)
-        {
-            throw new InitializationException("RunData Service requires"
-                + " configured Pool Service!");
-        }
-
-        setInit(true);
-    }
-
-    /**
-     * Gets a default RunData object.
-     *
-     * @param req a servlet request.
-     * @param res a servlet response.
-     * @param config a servlet config.
-     * @return a new or recycled RunData object.
-     * @throws TurbineException if the operation fails.
-     */
-    public RunData getRunData(HttpServletRequest req,
-                              HttpServletResponse res,
-                              ServletConfig config)
-            throws TurbineException
-    {
-        return getRunData(DEFAULT_CONFIG, req, res, config);
-    }
-
-    /**
-     * Gets a RunData instance from a specific configuration.
-     *
-     * @param key a configuration key.
-     * @param req a servlet request.
-     * @param res a servlet response.
-     * @param config a servlet config.
-     * @return a new or recycled RunData object.
-     * @throws TurbineException if the operation fails.
-     * @throws IllegalArgumentException if any of the parameters are null.
-     */
-    public RunData getRunData(String key,
-                              HttpServletRequest req,
-                              HttpServletResponse res,
-                              ServletConfig config)
-            throws TurbineException,
-            IllegalArgumentException
-    {
-        // The RunData object caches all the information that is needed for
-        // the execution lifetime of a single request. A RunData object
-        // is created/recycled for each and every request and is passed
-        // to each and every module. Since each thread has its own RunData
-        // object, it is not necessary to perform syncronization for
-        // the data within this object.
-        if ((req == null)
-            || (res == null)
-            || (config == null))
-        {
-            throw new IllegalArgumentException("HttpServletRequest, "
-                + "HttpServletResponse or ServletConfig was null.");
-        }
-
-        // Get the specified configuration.
-        String[] cfg = (String[]) configurations.get(key);
-        if (cfg == null)
-        {
-            throw new TurbineException("RunTime configuration '" + key + "' is undefined");
-        }
-
-        TurbineRunData data;
-        try
-        {
-            data = (TurbineRunData) pool.getInstance(cfg[0]);
-            data.setParameterParser((ParameterParser) pool.getInstance(cfg[1]));
-            data.setCookieParser((CookieParser) pool.getInstance(cfg[2]));
-        }
-        catch (ClassCastException x)
-        {
-            throw new TurbineException("RunData configuration '" + key + "' is illegal", x);
-        }
-
-        // Set the request and response.
-        data.setRequest(req);
-        data.setResponse(res);
-
-        // Set the servlet configuration.
-        data.setServletConfig(config);
-
-        // Set the ServerData.
-        data.setServerData(new ServerData(req));
-
-        return data;
-    }
-
-    /**
-     * Puts the used RunData object back to the factory for recycling.
-     *
-     * @param data the used RunData object.
-     * @return true, if pooling is supported and the object was accepted.
-     */
-    public boolean putRunData(RunData data)
-    {
-        if (data instanceof TurbineRunData)
-        {
-            pool.putInstance(((TurbineRunData) data).getParameterParser());
-            pool.putInstance(((TurbineRunData) data).getCookieParser());
-
-            return pool.putInstance(data);
-        }
-        else
-        {
-            return false;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/rundata/package.html b/src/java/org/apache/turbine/services/rundata/package.html
deleted file mode 100644
index 56f07eb..0000000
--- a/src/java/org/apache/turbine/services/rundata/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Rundata Service provides a factory for the request cycle data objects.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/schedule/JobEntry.java b/src/java/org/apache/turbine/services/schedule/JobEntry.java
deleted file mode 100644
index bd6badd..0000000
--- a/src/java/org/apache/turbine/services/schedule/JobEntry.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/*
- * ==================================================================== The
- * Apache Software License, Version 1.1
- * 
- * Copyright (c) 2001-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://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 Turbine"
- * must not be used to endorse or promote products derived from this 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
- * Turbine", 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/> .
- */
-
-import java.util.Date;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a interface for a scheduled job. It does not specify how to 
- * configure when to run, that is left to subclasses.  See the JobEntryTorque
- * for an example of a JobEntry backed by Torque objects.
- * 
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface JobEntry extends Comparable
-{
-
-    /**
-	 * Used for ordering Jobentries Note: this comparator imposes orderings
-	 * that are inconsistent with equals.
-	 * 
-	 * @param je The first <code>JobEntry</code> object.
-	 * @return An <code>int</code> indicating the result of the comparison.
-	 */
-    public int compareTo(Object je);
-
-    /**
-	 * Sets whether the job is running.
-	 * 
-	 * @param isActive Whether the job is running.
-	 */
-    public void setActive(boolean isActive);
-
-    /**
-	 * Check to see if job is currently active/running
-	 * 
-	 * @return true if job is currently geing run by the workerthread,
-	 *         otherwise false
-	 */
-    public boolean isActive();
-
-    
-	/**
-	 * Get the Task
-	 *
-	 * @return String
-	 */
-	public String getTask();
-	
-	/**
-	  * Set the value of Task
-	  *
-	  * @param v new value
-	  */
-	 public void setTask(String v);	
-    /**
-	 * Get the next runtime for this job as a long.
-	 * 
-	 * @return The next run time as a long.
-	 */
-    public long getNextRuntime();
-
-    /**
-	 * Gets the next runtime as a date
-	 * 
-	 * @return Next run date
-	 */
-    public Date getNextRunDate();
-
-    /**
-	 * Get the next runtime for this job as a String.
-	 * 
-	 * @return The next run time as a String.
-	 */
-    public String getNextRunAsString();
-
-    /**
-	 * Calculate how long before the next runtime. <br>
-	 * 
-	 * The runtime determines it's position in the job queue. Here's the logic:
-	 * <br>
-	 *  1. Create a date the represents when this job is to run. <br>
-	 *  2. If this date has expired, them "roll" appropriate date fields
-	 * forward to the next date. <br>
-	 *  3. Calculate the diff in time between the current time and the next run
-	 * time. <br>
-	 * 
-	 * @exception TurbineException a generic exception.
-	 */
-    public void calcRunTime() throws TurbineException;
-    
-}
diff --git a/src/java/org/apache/turbine/services/schedule/ScheduleService.java b/src/java/org/apache/turbine/services/schedule/ScheduleService.java
deleted file mode 100644
index db6ec6e..0000000
--- a/src/java/org/apache/turbine/services/schedule/ScheduleService.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * ScheduleService interface.
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface ScheduleService
-        extends Service
-{
-    /** Name of service */
-    String SERVICE_NAME = "SchedulerService";
-
-    /** TR.props key for intially activating the scheduler thread */
-    String INTIALLY_ACTIVE = "enabled";
-
-    /** TR.props key for the logger */
-    String LOGGER_NAME = "scheduler";
-
-    /**
-     * Get a specific Job from Storage.
-     *
-     * @param oid The int id for the job.
-     * @return A JobEntry.
-     * @exception TurbineException could not retreive job
-     */
-    JobEntry getJob(int oid)
-            throws TurbineException;
-
-    /**
-     * Add a new job to the queue.
-     *
-     * @param je A JobEntry with the job to add.
-     * @throws TurbineException job could not be added
-     */
-    void addJob(JobEntry je)
-            throws TurbineException;
-
-    /**
-     * Modify a Job.
-     *
-     * @param je A JobEntry with the job to modify
-     * @throws TurbineException job could not be updated
-     */
-    void updateJob(JobEntry je)
-            throws TurbineException;
-
-    /**
-     * Remove a job from the queue.
-     *
-     * @param je A JobEntry with the job to remove.
-     * @exception TurbineException job could not be removed
-     */
-    void removeJob(JobEntry je)
-            throws TurbineException;
-
-    /**
-     * List jobs in the queue.  This is used by the scheduler UI.
-     *
-     * @return A List of jobs.
-     */
-    List listJobs();
-
-    /**
-     * Determines if the scheduler service is currently active.
-     *
-     * @return Status of the scheduler service.
-     */
-    boolean isEnabled();
-
-    /**
-     * Starts the scheduler if not already running.
-     */
-    void startScheduler();
-
-    /**
-     * Stops the scheduler if ti is currently running.
-     */
-    void stopScheduler();
-
-}
diff --git a/src/java/org/apache/turbine/services/schedule/SchedulerTool.java b/src/java/org/apache/turbine/services/schedule/SchedulerTool.java
deleted file mode 100644
index 7211c9c..0000000
--- a/src/java/org/apache/turbine/services/schedule/SchedulerTool.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This tool is used to retrieve information about the job scheduler.
- *
- * @author <a href="mailto:qmccombs@nequalsone.com">Quinton McCombs</a>
- * @version $Id$
- */
-public class SchedulerTool implements ApplicationTool
-{
-    /** Used for logging */
-    private static Log log = LogFactory.getLog(ScheduleService.LOGGER_NAME);
-
-    /**
-     * Initialize the pull tool
-     */
-    public void init(Object data)
-    {
-        if (!TurbineServices.getInstance().isRegistered(
-                ScheduleService.SERVICE_NAME))
-        {
-            log.error("You can not use the SchedulerTool unless you enable "
-                    +"the Scheduler Service!!!!");
-        }
-    }
-
-    /**
-     * Does nothing
-     */
-    public void refresh()
-    {
-    }
-
-    /**
-     * Gets the list of scheduled jobs.
-     *
-     * @return List of JobEntry objects.
-     */
-    public List getScheduledJobs()
-    {
-        return TurbineScheduler.listJobs();
-    }
-
-    /**
-     * Determines if the scheduler service is currently enabled.
-     */
-    public boolean isEnabled()
-    {
-        return TurbineScheduler.isEnabled();
-    }
-
-    /**
-     * Gets the job identified by the jobId.
-     *
-     * @param jobId Id of the job to retreive.
-     * @return The job.  Null if the jobId is not found.
-     */
-    public JobEntry getJob(String jobId)
-    {
-        JobEntry je = null;
-
-        try
-        {
-            je = TurbineScheduler.getJob(Integer.parseInt(jobId));
-        }
-        catch (TurbineException e)
-        {
-            log.error("Could not retreive job id #" + jobId, e);
-        }
-
-        return je;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/schedule/TurbineScheduler.java b/src/java/org/apache/turbine/services/schedule/TurbineScheduler.java
deleted file mode 100644
index e1a036e..0000000
--- a/src/java/org/apache/turbine/services/schedule/TurbineScheduler.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.apache.turbine.services.schedule;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a fascade class to provide easy access to the Scheduler
- * service.  All access methods are static and act upon the current
- * instance of the scheduler service.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- * @see org.apache.turbine.services.schedule.ScheduleService
- */
-public abstract class TurbineScheduler
-{
-    /**
-     * Get a specific Job from Storage.
-     *
-     * @param oid The int id for the job.
-     * @return A JobEntry.
-     * @exception TurbineException job could not be retrieved
-     */
-    public static JobEntry getJob(int oid)
-            throws TurbineException
-    {
-        return getService().getJob(oid);
-    }
-
-    /**
-     * Add a new job to the queue.
-     *
-     * @param je A JobEntry with the job to add.
-     * @exception TurbineException job could not be added
-     */
-    public static void addJob(JobEntry je)
-            throws TurbineException
-    {
-        getService().addJob(je);
-    }
-
-    /**
-     * Add or update a job
-     *
-     * @param je A JobEntry with the job to modify
-     * @exception TurbineException job could not be updated
-     */
-    public static void updateJob(JobEntry je)
-            throws TurbineException
-    {
-        getService().updateJob(je);
-    }
-
-    /**
-     * Remove a job from the queue.
-     *
-     * @param je A JobEntry with the job to remove.
-     * @exception TurbineException job could not be removed
-     */
-    public static void removeJob(JobEntry je)
-            throws TurbineException
-    {
-        getService().removeJob(je);
-    }
-
-    /**
-     * List jobs in the queue.  This is used by the scheduler UI.
-     *
-     * @return A Vector of jobs.
-     */
-    public static List listJobs()
-    {
-        return getService().listJobs();
-    }
-
-    /**
-     * Determines if the scheduler service is currently active.
-     *
-     * @return Status of the scheduler service.
-     */
-    public static boolean isEnabled()
-    {
-        return getService().isEnabled();
-    }
-
-    /**
-     * Starts the scheduler if not already running.
-     */
-    public static void startScheduler()
-    {
-        getService().startScheduler();
-    }
-
-    /**
-     * Stops the scheduler if ti is currently running.
-     */
-    public static void stopScheduler()
-    {
-        getService().stopScheduler();
-    }
-
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a ScheduleService implementation instance
-     */
-    private static ScheduleService getService()
-    {
-        return (ScheduleService) TurbineServices
-                .getInstance().getService(ScheduleService.SERVICE_NAME);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/schedule/package.html b/src/java/org/apache/turbine/services/schedule/package.html
deleted file mode 100644
index 5000d38..0000000
--- a/src/java/org/apache/turbine/services/schedule/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The scheduler service can run tasks in the background.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/security/BaseSecurityService.java b/src/java/org/apache/turbine/services/security/BaseSecurityService.java
deleted file mode 100644
index 7b917ea..0000000
--- a/src/java/org/apache/turbine/services/security/BaseSecurityService.java
+++ /dev/null
@@ -1,1255 +0,0 @@
-package org.apache.turbine.services.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.crypto.CryptoAlgorithm;
-import org.apache.fulcrum.crypto.CryptoService;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.services.factory.FactoryService;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * This is a common subset of SecurityService implementation.
- *
- * Provided functionality includes:
- * <ul>
- * <li> methods for retrieving User objects, that delegates functionality
- *      to the pluggable implementations of the User interface.
- * <li> synchronization mechanism for methods reading/modifying the security
- *      information, that guarantees that multiple threads may read the
- *      information concurrently, but threads that modify the information
- *      acquires exclusive access.
- * <li> implementation of convenience methods for retrieving security entities
- *      that maintain in-memory caching of objects for fast access.
- * </ul>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public abstract class BaseSecurityService
-        extends TurbineBaseService
-        implements SecurityService
-{
-    /** The number of threads concurrently reading security information */
-    private int readerCount = 0;
-
-    /** The instance of UserManager the SecurityService uses */
-    private UserManager userManager = null;
-
-    /** The class of User the SecurityService uses */
-    private Class userClass = null;
-
-    /** The class of Group the SecurityService uses */
-    private Class groupClass = null;
-
-    /** The class of Permission the SecurityService uses */
-    private Class permissionClass = null;
-
-    /** The class of Role the SecurityService uses */
-    private Class roleClass = null;
-
-    /** The class of ACL the SecurityService uses */
-    private Class aclClass = null;
-
-    /** A factory to construct ACL Objects */
-    private FactoryService aclFactoryService = null;
-
-    /**
-     * The Group object that represents the <a href="#global">global group</a>.
-     */
-    private static Group globalGroup = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(BaseSecurityService.class);
-
-    /**
-     * This method provides client-side encryption of passwords.
-     *
-     * If <code>secure.passwords</code> are enabled in TurbineResources,
-     * the password will be encrypted, if not, it will be returned unchanged.
-     * The <code>secure.passwords.algorithm</code> property can be used
-     * to chose which digest algorithm should be used for performing the
-     * encryption. <code>SHA</code> is used by default.
-     *
-     * @param password the password to process
-     * @return processed password
-     */
-    public String encryptPassword(String password)
-    {
-        return encryptPassword(password, null);
-    }
-
-    /**
-     * This method provides client-side encryption of passwords.
-     *
-     * If <code>secure.passwords</code> are enabled in TurbineResources,
-     * the password will be encrypted, if not, it will be returned unchanged.
-     * The <code>secure.passwords.algorithm</code> property can be used
-     * to chose which digest algorithm should be used for performing the
-     * encryption. <code>SHA</code> is used by default.
-     *
-     * The used algorithms must be prepared to accept null as a
-     * valid parameter for salt. All algorithms in the Fulcrum Cryptoservice
-     * accept this.
-     *
-     * @param password the password to process
-     * @param salt     algorithms that needs a salt can provide one here
-     * @return processed password
-     */
-
-    public String encryptPassword(String password, String salt)
-    {
-        if (password == null)
-        {
-            return null;
-        }
-        String secure = getConfiguration().getString(
-                SecurityService.SECURE_PASSWORDS_KEY,
-                SecurityService.SECURE_PASSWORDS_DEFAULT).toLowerCase();
-
-        String algorithm = getConfiguration().getString(
-                SecurityService.SECURE_PASSWORDS_ALGORITHM_KEY,
-                SecurityService.SECURE_PASSWORDS_ALGORITHM_DEFAULT);
-
-        AvalonComponentService ecm = (AvalonComponentService)TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME);
-        CryptoService cs = null;
-        try {
-            cs = (CryptoService)ecm.lookup(CryptoService.ROLE);
-        }
-        catch (Exception e){
-            throw new RuntimeException("Could not access Crypto Service",e);
-        }
-
-        if (cs != null && (secure.equals("true") || secure.equals("yes")))
-        {
-            try
-            {
-                CryptoAlgorithm ca = cs.getCryptoAlgorithm(algorithm);
-
-                ca.setSeed(salt);
-
-                String result = ca.encrypt(password);
-
-                return result;
-            }
-            catch (Exception e)
-            {
-                log.error("Unable to encrypt password: ", e);
-
-                return null;
-            }
-        }
-        else
-        {
-            return password;
-        }
-    }
-
-    /**
-     * Checks if a supplied password matches the encrypted password
-     *
-     * @param checkpw      The clear text password supplied by the user
-     * @param encpw        The current, encrypted password
-     *
-     * @return true if the password matches, else false
-     *
-     */
-
-    public boolean checkPassword(String checkpw, String encpw)
-    {
-        String result = encryptPassword(checkpw, encpw);
-
-        return (result == null) ? false : result.equals(encpw);
-    }
-
-    /**
-     * Initializes the SecurityService, locating the apropriate UserManager
-     * This is a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        String userManagerClassName = conf.getString(
-                SecurityService.USER_MANAGER_KEY,
-                SecurityService.USER_MANAGER_DEFAULT);
-
-        String userClassName = conf.getString(
-                SecurityService.USER_CLASS_KEY,
-                SecurityService.USER_CLASS_DEFAULT);
-
-        String groupClassName = conf.getString(
-                SecurityService.GROUP_CLASS_KEY,
-                SecurityService.GROUP_CLASS_DEFAULT);
-
-        String permissionClassName = conf.getString(
-                SecurityService.PERMISSION_CLASS_KEY,
-                SecurityService.PERMISSION_CLASS_DEFAULT);
-
-        String roleClassName = conf.getString(
-                SecurityService.ROLE_CLASS_KEY,
-                SecurityService.ROLE_CLASS_DEFAULT);
-
-        String aclClassName = conf.getString(
-                SecurityService.ACL_CLASS_KEY,
-                SecurityService.ACL_CLASS_DEFAULT);
-
-        try
-        {
-            userClass = Class.forName(userClassName);
-            groupClass = Class.forName(groupClassName);
-            permissionClass = Class.forName(permissionClassName);
-            roleClass = Class.forName(roleClassName);
-            aclClass = Class.forName(aclClassName);
-        }
-        catch (Exception e)
-        {
-            if (userClass == null)
-            {
-                throw new InitializationException(
-                        "Failed to create a Class object for User implementation", e);
-            }
-            if (groupClass == null)
-            {
-                throw new InitializationException(
-                        "Failed to create a Class object for Group implementation", e);
-            }
-            if (permissionClass == null)
-            {
-                throw new InitializationException(
-                        "Failed to create a Class object for Permission implementation", e);
-            }
-            if (roleClass == null)
-            {
-                throw new InitializationException(
-                        "Failed to create a Class object for Role implementation", e);
-            }
-            if (aclClass == null)
-            {
-                throw new InitializationException(
-                        "Failed to create a Class object for ACL implementation", e);
-            }
-        }
-
-        try
-        {
-            UserManager userManager =
-                    (UserManager) Class.forName(userManagerClassName).newInstance();
-
-            userManager.init(conf);
-
-            setUserManager(userManager);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException("Failed to instantiate UserManager", e);
-        }
-
-        try
-        {
-            aclFactoryService = (FactoryService) TurbineServices.getInstance().
-                    getService(FactoryService.SERVICE_NAME);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                    "BaseSecurityService.init: Failed to get the Factory Service object", e);
-        }
-
-        setInit(true);
-    }
-
-    /**
-     * Initializes the SecurityService, locating the apropriate UserManager
-     *
-     * @param config a ServletConfig, to enforce early initialization
-     * @throws InitializationException Something went wrong in the init stage
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config) throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Return a Class object representing the system's chosen implementation of
-     * of User interface.
-     *
-     * @return systems's chosen implementation of User interface.
-     * @throws UnknownEntityException if the implementation of User interface
-     *         could not be determined, or does not exist.
-     */
-    public Class getUserClass()
-            throws UnknownEntityException
-    {
-        if (userClass == null)
-        {
-            throw new UnknownEntityException(
-                    "Failed to create a Class object for User implementation");
-        }
-        return userClass;
-    }
-
-    /**
-     * Construct a blank User object.
-     *
-     * This method calls getUserClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing User interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public User getUserInstance()
-            throws UnknownEntityException
-    {
-        User user;
-        try
-        {
-            user = (User) getUserClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                    "Failed instantiate an User implementation object", e);
-        }
-        return user;
-    }
-
-    /**
-     * Construct a blank User object.
-     *
-     * This method calls getUserClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param userName The name of the user.
-     *
-     * @return an object implementing User interface.
-     *
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public User getUserInstance(String userName)
-            throws UnknownEntityException
-    {
-        User user = getUserInstance();
-        user.setName(userName);
-        return user;
-    }
-
-    /**
-     * Return a Class object representing the system's chosen implementation of
-     * of Group interface.
-     *
-     * @return systems's chosen implementation of Group interface.
-     * @throws UnknownEntityException if the implementation of Group interface
-     *         could not be determined, or does not exist.
-     */
-    public Class getGroupClass()
-            throws UnknownEntityException
-    {
-        if (groupClass == null)
-        {
-            throw new UnknownEntityException(
-                    "Failed to create a Class object for Group implementation");
-        }
-        return groupClass;
-    }
-
-    /**
-     * Construct a blank Group object.
-     *
-     * This method calls getGroupClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Group interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Group getGroupInstance()
-            throws UnknownEntityException
-    {
-        Group group;
-        try
-        {
-            group = (Group) getGroupClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException("Failed to instantiate a Group implementation object", e);
-        }
-        return group;
-    }
-
-    /**
-     * Construct a blank Group object.
-     *
-     * This method calls getGroupClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param groupName The name of the Group
-     *
-     * @return an object implementing Group interface.
-     *
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Group getGroupInstance(String groupName)
-            throws UnknownEntityException
-    {
-        Group group = getGroupInstance();
-        group.setName(groupName);
-        return group;
-    }
-
-    /**
-     * Return a Class object representing the system's chosen implementation of
-     * of Permission interface.
-     *
-     * @return systems's chosen implementation of Permission interface.
-     * @throws UnknownEntityException if the implementation of Permission interface
-     *         could not be determined, or does not exist.
-     */
-    public Class getPermissionClass()
-            throws UnknownEntityException
-    {
-        if (permissionClass == null)
-        {
-            throw new UnknownEntityException(
-                    "Failed to create a Class object for Permission implementation");
-        }
-        return permissionClass;
-    }
-
-    /**
-     * Construct a blank Permission object.
-     *
-     * This method calls getPermissionClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Permission interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Permission getPermissionInstance()
-            throws UnknownEntityException
-    {
-        Permission permission;
-        try
-        {
-            permission = (Permission) getPermissionClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException("Failed to instantiate a Permission implementation object", e);
-        }
-        return permission;
-    }
-
-    /**
-     * Construct a blank Permission object.
-     *
-     * This method calls getPermissionClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param permName The name of the permission.
-     *
-     * @return an object implementing Permission interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Permission getPermissionInstance(String permName)
-            throws UnknownEntityException
-    {
-        Permission perm = getPermissionInstance();
-        perm.setName(permName);
-        return perm;
-    }
-
-    /**
-     * Return a Class object representing the system's chosen implementation of
-     * of Role interface.
-     *
-     * @return systems's chosen implementation of Role interface.
-     * @throws UnknownEntityException if the implementation of Role interface
-     *         could not be determined, or does not exist.
-     */
-    public Class getRoleClass()
-            throws UnknownEntityException
-    {
-        if (roleClass == null)
-        {
-            throw new UnknownEntityException(
-                    "Failed to create a Class object for Role implementation");
-        }
-        return roleClass;
-    }
-
-    /**
-     * Construct a blank Role object.
-     *
-     * This method calls getRoleClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Role interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Role getRoleInstance()
-            throws UnknownEntityException
-    {
-        Role role;
-
-        try
-        {
-            role = (Role) getRoleClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException("Failed to instantiate a Role implementation object", e);
-        }
-        return role;
-    }
-
-    /**
-     * Construct a blank Role object.
-     *
-     * This method calls getRoleClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param roleName The name of the role.
-     *
-     * @return an object implementing Role interface.
-     *
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public Role getRoleInstance(String roleName)
-            throws UnknownEntityException
-    {
-        Role role = getRoleInstance();
-        role.setName(roleName);
-        return role;
-    }
-
-    /**
-     * Return a Class object representing the system's chosen implementation of
-     * of ACL interface.
-     *
-     * @return systems's chosen implementation of ACL interface.
-     * @throws UnknownEntityException if the implementation of ACL interface
-     *         could not be determined, or does not exist.
-     */
-    public Class getAclClass()
-            throws UnknownEntityException
-    {
-        if (aclClass == null)
-        {
-            throw new UnknownEntityException(
-                    "Failed to create a Class object for ACL implementation");
-        }
-        return aclClass;
-    }
-
-    /**
-     * Construct a new ACL object.
-     *
-     * This constructs a new ACL object from the configured class and
-     * initializes it with the supplied roles and permissions.
-     *
-     * @param roles The roles that this ACL should contain
-     * @param permissions The permissions for this ACL
-     *
-     * @return an object implementing ACL interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public AccessControlList getAclInstance(Map roles, Map permissions)
-            throws UnknownEntityException
-    {
-        Object[] objects = {roles, permissions};
-        String[] signatures = {Map.class.getName(), Map.class.getName()};
-        AccessControlList accessControlList;
-
-        try
-        {
-            accessControlList =
-                    (AccessControlList) aclFactoryService.getInstance(aclClass.getName(),
-                            objects,
-                            signatures);
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                    "Failed to instantiate an ACL implementation object", e);
-        }
-
-        return accessControlList;
-    }
-
-    /**
-     * Returns the configured UserManager.
-     *
-     * @return An UserManager object
-     */
-    public UserManager getUserManager()
-    {
-        return userManager;
-    }
-
-    /**
-     * Configure a new user Manager.
-     *
-     * @param userManager An UserManager object
-     */
-    public void setUserManager(UserManager userManager)
-    {
-        this.userManager = userManager;
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public boolean accountExists(User user)
-            throws DataBackendException
-    {
-        return getUserManager().accountExists(user);
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public boolean accountExists(String userName)
-            throws DataBackendException
-    {
-        return getUserManager().accountExists(userName);
-    }
-
-    /**
-     * Authenticates an user, and constructs an User object to represent
-     * him/her.
-     *
-     * @param username The user name.
-     * @param password The user password.
-     * @return An authenticated Turbine User.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     * @throws UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    public User getAuthenticatedUser(String username, String password)
-            throws DataBackendException, UnknownEntityException,
-                   PasswordMismatchException
-    {
-        return getUserManager().retrieve(username, password);
-    }
-
-    /**
-     * Constructs an User object to represent a registered user of the
-     * application.
-     *
-     * @param username The user name.
-     * @return A Turbine User.
-     * @throws UnknownEntityException if the user's account does not exist
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    public User getUser(String username)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getUserManager().retrieve(username);
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List getUserList(Criteria criteria)
-            throws DataBackendException
-    {
-        return getUserManager().retrieveList(criteria);
-    }
-
-    /**
-     * Constructs an User object to represent an anonymous user of the
-     * application.
-     *
-     * @return An anonymous Turbine User.
-     * @throws UnknownEntityException if the implementation of User interface
-     *         could not be determined, or does not exist.
-     */
-    public User getAnonymousUser()
-            throws UnknownEntityException
-    {
-        User user = getUserInstance();
-        user.setName("");
-        return user;
-    }
-
-    /**
-     * Checks whether a passed user object matches the anonymous user pattern
-     * according to the configured user manager
-     *
-     * @param user An user object
-     *
-     * @return True if this is an anonymous user
-     *
-     */
-    public boolean isAnonymousUser(User user)
-    {
-        // Either just null, the name is null or the name is the empty string
-        return (user == null) || StringUtils.isEmpty(user.getName());
-    }
-
-    /**
-     * Saves User's data in the permanent storage. The user account is required
-     * to exist in the storage.
-     *
-     * @param user the User object to save
-     * @throws UnknownEntityException if the user's account does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    public void saveUser(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        getUserManager().store(user);
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        userManager.saveOnSessionUnbind(user);
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param password The password to use for the account.
-     *
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void addUser(User user, String password)
-            throws DataBackendException, EntityExistsException
-    {
-        getUserManager().createAccount(user, password);
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeUser(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        // revoke all roles form the user
-        revokeAll(user);
-
-        getUserManager().removeAccount(user);
-    }
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password supplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     * @throws UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    public void changePassword(User user, String oldPassword,
-            String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-                   DataBackendException
-    {
-        getUserManager().changePassword(user, oldPassword, newPassword);
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @throws UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    public void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        getUserManager().forcePassword(user, password);
-    }
-
-    /**
-     * Acquire a shared lock on the security information repository.
-     *
-     * Methods that read security information need to invoke this
-     * method at the beginning of their body.
-     */
-    protected synchronized void lockShared()
-    {
-        readerCount++;
-    }
-
-    /**
-     * Release a shared lock on the security information repository.
-     *
-     * Methods that read security information need to invoke this
-     * method at the end of their body.
-     */
-    protected synchronized void unlockShared()
-    {
-        readerCount--;
-        this.notify();
-    }
-
-    /**
-     * Acquire an exclusive lock on the security information repository.
-     *
-     * Methods that modify security information need to invoke this
-     * method at the beginning of their body. Note! Those methods must
-     * be <code>synchronized</code> themselves!
-     */
-    protected void lockExclusive()
-    {
-        while (readerCount > 0)
-        {
-            try
-            {
-                this.wait();
-            }
-            catch (InterruptedException e)
-            {
-            }
-        }
-    }
-
-    /**
-     * Release an exclusive lock on the security information repository.
-     *
-     * This method is provided only for completeness. It does not really
-     * do anything. Note! Methods that modify security information
-     * must be <code>synchronized</code>!
-     */
-    protected void unlockExclusive()
-    {
-        // do nothing
-    }
-
-    /**
-     * Provides a reference to the Group object that represents the
-     * <a href="#global">global group</a>.
-     *
-     * @return a Group object that represents the global group.
-     */
-    public Group getGlobalGroup()
-    {
-        if (globalGroup == null)
-        {
-            synchronized (BaseSecurityService.class)
-            {
-                if (globalGroup == null)
-                {
-                    try
-                    {
-                        globalGroup = getAllGroups()
-                                .getGroupByName(Group.GLOBAL_GROUP_NAME);
-                    }
-                    catch (DataBackendException e)
-                    {
-                        log.error("Failed to retrieve global group object: ", e);
-                    }
-                }
-            }
-        }
-        return globalGroup;
-    }
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param name the name of the Group.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the group does not exist.
-     * @deprecated Use <a href="#getGroupByName">getGroupByName</a> instead.
-     */
-    public Group getGroup(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getGroupByName(name);
-    }
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param name the name of the Group.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public Group getGroupByName(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        Group group = getAllGroups().getGroupByName(name);
-        if (group == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified group does not exist");
-        }
-        return group;
-    }
-
-    /**
-     * Retrieve a Group object with specified Id.
-     *
-     * @param id the id of the Group.
-     * @return an object representing the Group with specified name.
-     * @throws UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public Group getGroupById(int id)
-            throws DataBackendException, UnknownEntityException
-    {
-        Group group = getAllGroups().getGroupById(id);
-        if (group == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified group does not exist");
-        }
-        return group;
-    }
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param name the name of the Role.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the role does not exist.
-     * @deprecated Use <a href="#getRoleByName">getRoleByName</a> instead.
-     */
-    public Role getRole(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getRoleByName(name);
-    }
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param name the name of the Role.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public Role getRoleByName(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        Role role = getAllRoles().getRoleByName(name);
-        if (role == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified role does not exist");
-        }
-        role.setPermissions(getPermissions(role));
-        return role;
-    }
-
-    /**
-     * Retrieve a Role object with specified Id.
-     * @param id the id of the Role.
-     * @return an object representing the Role with specified name.
-     * @throws UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public Role getRoleById(int id)
-            throws DataBackendException,
-                   UnknownEntityException
-    {
-        Role role = getAllRoles().getRoleById(id);
-        if (role == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified role does not exist");
-        }
-        role.setPermissions(getPermissions(role));
-        return role;
-    }
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param name the name of the Permission.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     * @deprecated Use <a href="#getPermissionByName">getPermissionByName</a> instead.
-     */
-    public Permission getPermission(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getPermissionByName(name);
-    }
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param name the name of the Permission.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public Permission getPermissionByName(String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        Permission permission = getAllPermissions().getPermissionByName(name);
-        if (permission == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified permission does not exist");
-        }
-        return permission;
-    }
-
-    /**
-     * Retrieve a Permission object with specified Id.
-     *
-     * @param id the id of the Permission.
-     * @return an object representing the Permission with specified name.
-     * @throws UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public Permission getPermissionById(int id)
-            throws DataBackendException,
-                   UnknownEntityException
-    {
-        Permission permission = getAllPermissions().getPermissionById(id);
-        if (permission == null)
-        {
-            throw new UnknownEntityException(
-                    "The specified permission does not exist");
-        }
-        return permission;
-    }
-
-    /**
-     * Retrieves all groups defined in the system.
-     *
-     * @return the names of all groups defined in the system.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     */
-    public GroupSet getAllGroups()
-            throws DataBackendException
-    {
-        return getGroups(new Criteria());
-    }
-
-    /**
-     * Retrieves all roles defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     */
-    public RoleSet getAllRoles()
-            throws DataBackendException
-    {
-        return getRoles(new Criteria());
-    }
-
-    /**
-     * Retrieves all permissions defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the
-     *         data backend.
-     */
-    public PermissionSet getAllPermissions()
-            throws DataBackendException
-    {
-        return getPermissions(new Criteria());
-    }
-
-    /**
-     * @deprecated Use getGroupInstance(String name) instead.
-     */
-    public Group getNewGroup(String groupName)
-    {
-        try
-        {
-            return getGroupInstance(groupName);
-        }
-        catch (UnknownEntityException uee)
-        {
-            uee.printStackTrace();
-            return null;
-        }
-    }
-
-    /**
-     * @deprecated Use getRoleInstance(String name) instead.
-     */
-    public Role getNewRole(String roleName)
-    {
-        try
-        {
-            return getRoleInstance(roleName);
-        }
-        catch (UnknownEntityException uee)
-        {
-            return null;
-        }
-    }
-
-    /**
-     * @deprecated Use getPermissionInstance(String name) instead.
-     */
-    public Permission getNewPermission(String permissionName)
-    {
-        try
-        {
-            return getPermissionInstance(permissionName);
-        }
-        catch (UnknownEntityException uee)
-        {
-            return null;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/security/SecurityService.java b/src/java/org/apache/turbine/services/security/SecurityService.java
deleted file mode 100644
index 39523ff..0000000
--- a/src/java/org/apache/turbine/services/security/SecurityService.java
+++ /dev/null
@@ -1,1087 +0,0 @@
-package org.apache.turbine.services.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.TurbineGroup;
-import org.apache.turbine.om.security.TurbinePermission;
-import org.apache.turbine.om.security.TurbineRole;
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.Service;
-import org.apache.turbine.services.security.db.DBUserManager;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.TurbineAccessControlList;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * The Security Service manages Users, Groups Roles and Permissions in the
- * system.
- *
- * The task performed by the security service include creation and removal of
- * accounts, groups, roles, and permissions; assigning users roles in groups;
- * assigning roles specific permissions and construction of objects
- * representing these logical entities.
- *
- * <p> Because of pluggable nature of the Services, it is possible to create
- * multiple implementations of SecurityService, for example employing database
- * and directory server as the data backend.<br>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @version $Id$
- */
-public interface SecurityService
-        extends Service
-{
-    /** The name of the service */
-    static final String SERVICE_NAME = "SecurityService";
-
-    /**
-     * the key within services's properties for user implementation
-     * classname (user.class)
-     */
-    static final String USER_CLASS_KEY = "user.class";
-
-    /**
-     * the default implementation of User interface
-     * (org.apache.turbine.om.security.TurbineUser)
-     */
-    static final String USER_CLASS_DEFAULT
-            = TurbineUser.class.getName();
-
-    /**
-     * The key within services' properties for the GROUP
-     * implementation classname (group.class)
-     */
-    static final String GROUP_CLASS_KEY = "group.class";
-
-    /**
-     * The default implementation of the Group interface
-     * (org.apache.turbine.om.security.TurbineGroup)
-     */
-    static final String GROUP_CLASS_DEFAULT
-            = TurbineGroup.class.getName();
-
-    /**
-     * The key within services' properties for the PERMISSION
-     * implementation classname (permission.class)
-     */
-    static final String PERMISSION_CLASS_KEY = "permission.class";
-
-    /**
-     * The default implementation of the Permissions interface
-     * (org.apache.turbine.om.security.TurbinePermission)
-     */
-    static final String PERMISSION_CLASS_DEFAULT
-            = TurbinePermission.class.getName();
-
-    /**
-     * The key within services' properties for the ROLE
-     * implementation classname (role.class)
-     */
-    static final String ROLE_CLASS_KEY = "role.class";
-
-    /**
-     * The default implementation of the Role Interface
-     * (org.apache.turbine.om.security.TurbineRole)
-     */
-    static final String ROLE_CLASS_DEFAULT
-            = TurbineRole.class.getName();
-
-    /**
-     * The key within services' properties for the
-     * ACL implementation classname (acl.class)
-     */
-    static final String ACL_CLASS_KEY = "acl.class";
-
-    /**
-     * The default implementation of the Acl Interface
-     * (org.apache.turbine.util.security.TurbineAccessControlList)
-     */
-    static final String ACL_CLASS_DEFAULT
-            = TurbineAccessControlList.class.getName();
-
-    /**
-     * the key within services's properties for user implementation
-     * classname (user.manager)
-     */
-    static final String USER_MANAGER_KEY = "user.manager";
-
-    /**
-     * the default implementation of UserManager interface
-     * (org.apache.turbine.services.security.DBUserManager)
-     */
-    static final String USER_MANAGER_DEFAULT
-            = DBUserManager.class.getName();
-
-    /**
-     * the key within services's properties for secure passwords flag
-     * (secure.passwords)
-     */
-    static final String SECURE_PASSWORDS_KEY = "secure.passwords";
-
-    /** the value of secure passwords flag (false) */
-    static final String SECURE_PASSWORDS_DEFAULT = "false";
-
-    /**
-     * the key within services's properties for secure passwords algorithm
-     * (secure.passwords.algorithm)
-     */
-    static final String SECURE_PASSWORDS_ALGORITHM_KEY
-            = "secure.passwords.algorithm";
-
-    /** the default algorithm for password encryption (SHA) */
-    static final String SECURE_PASSWORDS_ALGORITHM_DEFAULT = "SHA";
-
-    /*-----------------------------------------------------------------------
-      Management of User objects
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Returns the Class object for the implementation of User interface
-     * used by the system.
-     *
-     * @return the implementation of User interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of User
-     *         interface could not be determined.
-     */
-    Class getUserClass()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank User object.
-     *
-     * This method calls getUserClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing User interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    User getUserInstance()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank User object.
-     *
-     * This method calls getUserClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param userName The name of the user.
-     *
-     * @return an object implementing User interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    User getUserInstance(String userName)
-            throws UnknownEntityException;
-
-    /**
-     * Returns the Class object for the implementation of Group interface
-     * used by the system.
-     *
-     * @return the implementation of Group interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Group
-     *         interface could not be determined.
-     */
-    Class getGroupClass()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Group object.
-     *
-     * This method calls getGroupClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Group interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Group getGroupInstance()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Group object.
-     *
-     * This method calls getGroupClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param groupName The name of the Group
-     *
-     * @return an object implementing Group interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Group getGroupInstance(String groupName)
-            throws UnknownEntityException;
-
-    /**
-     * Returns the Class object for the implementation of Permission interface
-     * used by the system.
-     *
-     * @return the implementation of Permission interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Permission
-     *         interface could not be determined.
-     */
-    Class getPermissionClass()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Permission object.
-     *
-     * This method calls getPermissionClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Permission interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Permission getPermissionInstance()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Permission object.
-     *
-     * This method calls getPermissionClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param permName The name of the Permission
-     *
-     * @return an object implementing Permission interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Permission getPermissionInstance(String permName)
-            throws UnknownEntityException;
-
-    /**
-     * Returns the Class object for the implementation of Role interface
-     * used by the system.
-     *
-     * @return the implementation of Role interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Role
-     *         interface could not be determined.
-     */
-    Class getRoleClass()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Role object.
-     *
-     * This method calls getRoleClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing Role interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Role getRoleInstance()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a blank Role object.
-     *
-     * This method calls getRoleClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param roleName The name of the Role
-     *
-     * @return an object implementing Role interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    Role getRoleInstance(String roleName)
-            throws UnknownEntityException;
-
-    /**
-     * Returns the Class object for the implementation of AccessControlList interface
-     * used by the system.
-     *
-     * @return the implementation of AccessControlList interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of AccessControlList
-     *         interface could not be determined.
-     */
-    Class getAclClass()
-            throws UnknownEntityException;
-
-    /**
-     * Construct a new ACL object.
-     *
-     * This constructs a new ACL object from the configured class and
-     * initializes it with the supplied roles and permissions.
-     *
-     * @param roles The roles that this ACL should contain
-     * @param permissions The permissions for this ACL
-     *
-     * @return an object implementing ACL interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    AccessControlList getAclInstance(Map roles, Map permissions)
-            throws UnknownEntityException;
-
-    /**
-     * Returns the configured UserManager.
-     *
-     * @return An UserManager object
-     */
-    UserManager getUserManager();
-
-    /**
-     * Configure a new user Manager.
-     *
-     * @param userManager An UserManager object
-     */
-    void setUserManager(UserManager userManager);
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    boolean accountExists(String userName)
-            throws DataBackendException;
-
-    /**
-     * Check whether a specified user's account exists.
-     * An User object is used for looking up the account.
-     *
-     * @param user The user object to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    boolean accountExists(User user)
-            throws DataBackendException;
-
-    /**
-     * Authenticates an user, and constructs an User object to represent
-     * him/her.
-     *
-     * @param username The user name.
-     * @param password The user password.
-     * @return An authenticated Turbine User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     */
-    User getAuthenticatedUser(String username, String password)
-            throws DataBackendException, UnknownEntityException,
-            PasswordMismatchException;
-
-    /**
-     * Constructs an User object to represent a registered user of the
-     * application.
-     *
-     * @param username The user name.
-     * @return A Turbine User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    User getUser(String username)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of Torque implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    List getUserList(Criteria criteria)
-            throws DataBackendException;
-
-    /**
-     * Constructs an User object to represent an anonymous user of the
-     * application.
-     *
-     * @return An anonymous Turbine User.
-     * @throws UnknownEntityException if the anonymous User object couldn't be
-     *         constructed.
-     */
-    User getAnonymousUser()
-            throws UnknownEntityException;
-
-    /**
-     * Checks whether a passed user object matches the anonymous user pattern
-     * according to the configured user manager
-     *
-     * @param An user object
-     *
-     * @return True if this is an anonymous user
-     *
-     */
-    boolean isAnonymousUser(User u);
-
-    /**
-     * Saves User's data in the permanent storage. The user account is required
-     * to exist in the storage.
-     *
-     * @param user the user object to save
-     * @throws UnknownEntityException if the user's account does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    void saveUser(User user)
-            throws UnknownEntityException, DataBackendException;
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException;
-
-    /*-----------------------------------------------------------------------
-      Account management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param password The password to use.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    void addUser(User user, String password)
-            throws DataBackendException, EntityExistsException;
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    void removeUser(User user)
-            throws DataBackendException, UnknownEntityException;
-
-    /*-----------------------------------------------------------------------
-      Management of passwords
-      -----------------------------------------------------------------------*/
-
-    /**
-     * This method provides client-side encryption mechanism for passwords.
-     *
-     * This is an utility method that is used by other classes to maintain
-     * a consistent approach to encrypting password. The behavior of the
-     * method can be configured in service's properties.
-     *
-     * @param password the password to process
-     * @return processed password
-     */
-    String encryptPassword(String password);
-
-    /**
-     * This method provides client-side encryption mechanism for passwords.
-     *
-     * This is an utility method that is used by other classes to maintain
-     * a consistent approach to encrypting password. The behavior of the
-     * method can be configured in service's properties.
-     *
-     * Algorithms that must supply a salt for encryption
-     * can use this method to provide it.
-     *
-     * @param password the password to process
-     * @param salt Salt parameter for some crypto algorithms
-     *
-     * @return processed password
-     */
-    String encryptPassword(String password, String salt);
-
-    /**
-     * Checks if a supplied password matches the encrypted password
-     * when using the current encryption algorithm
-     *
-     * @param checkpw      The clear text password supplied by the user
-     * @param encpw        The current, encrypted password
-     *
-     * @return true if the password matches, else false
-     *
-     */
-    boolean checkPassword(String checkpw, String encpw);
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password supplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    void changePassword(User user, String oldPassword,
-                        String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException;
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException;
-
-    /*-----------------------------------------------------------------------
-      Retrieval of security information
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @return A new AccessControlList object.
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    AccessControlList getACL(User user)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @return the permissions associated with the role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role is not present.
-     */
-    PermissionSet getPermissions(Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /*-----------------------------------------------------------------------
-      Manipulation of security information
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    void grant(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    void revoke(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Revokes all roles from an User.
-     *
-     * This method is used when deleting an account.
-     *
-     * @param user the User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the account is not present.
-     */
-    void revokeAll(User user)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    void grant(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    void revoke(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Revokes all permissions from a Role.
-     *
-     * This method is user when deleting a Role.
-     *
-     * @param role the Role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws  UnknownEntityException if the Role is not present.
-     */
-    void revokeAll(Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /*-----------------------------------------------------------------------
-      Retrieval & storage of SecurityObjects
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Provides a reference to the Group object that represents the
-     * <a href="#global">global group</a>.
-     *
-     * @return A Group object that represents the global group.
-     */
-    Group getGlobalGroup();
-
-    /**
-     * @deprecated Use getGroupInstance(String name) instead.
-     */
-    Group getNewGroup(String groupName);
-
-    /**
-     * @deprecated Use getRoleInstance(String name) instead.
-     */
-    Role getNewRole(String roleName);
-
-    /**
-     * @deprecated Use getPermissionInstance(String name) instead.
-     */
-    Permission getNewPermission(String permissionName);
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param name the name of the Group.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     * @deprecated Use <a href="#getGroupByName">getGroupByName</a> instead.
-     */
-    Group getGroup(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param name the name of the Group.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    Group getGroupByName(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Group object with specified Id.
-     *
-     * @param name the name of the Group.
-     *
-     * @return an object representing the Group with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    Group getGroupById(int id)
-            throws DataBackendException,
-                   UnknownEntityException;
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param name the name of the Role.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     * @deprecated Use <a href="#getRoleByName">getRoleByName</a> instead.
-     */
-    Role getRole(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param name the name of the Role.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    Role getRoleByName(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Role object with specified Id.
-     *
-     * @param name the name of the Role.
-     *
-     * @return an object representing the Role with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    Role getRoleById(int id)
-            throws DataBackendException,
-                   UnknownEntityException;
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param name the name of the Permission.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     * @deprecated Use <a href="#getPermissionByName">getPermissionByName</a> instead.
-     */
-    Permission getPermission(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param name the name of the Permission.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    Permission getPermissionByName(String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Retrieve a Permission object with specified Id.
-     *
-     * @param name the name of the Permission.
-     *
-     * @return an object representing the Permission with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    Permission getPermissionById(int id)
-            throws DataBackendException,
-                   UnknownEntityException;
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria a Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    GroupSet getGroups(Criteria criteria)
-            throws DataBackendException;
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria a Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    RoleSet getRoles(Criteria criteria)
-            throws DataBackendException;
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria a Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    PermissionSet getPermissions(Criteria criteria)
-            throws DataBackendException;
-
-    /**
-     * Retrieves all groups defined in the system.
-     *
-     * @return the names of all groups defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    GroupSet getAllGroups()
-            throws DataBackendException;
-
-    /**
-     * Retrieves all roles defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    RoleSet getAllRoles()
-            throws DataBackendException;
-
-    /**
-     * Retrieves all permissions defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    PermissionSet getAllPermissions()
-            throws DataBackendException;
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    void saveGroup(Group group)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    void saveRole(Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Stores Permission's attributes. The Permission is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    void savePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException;
-
-    /*-----------------------------------------------------------------------
-      Group/Role/Permission management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Creates a new group with specified attributes.
-     *
-     * @param group the object describing the group to be created.
-     * @return the new Group object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    Group addGroup(Group group)
-            throws DataBackendException, EntityExistsException;
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role The object describing the role to be created.
-     * @return the new Role object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    Role addRole(Role role)
-            throws DataBackendException, EntityExistsException;
-
-    /**
-     * Creates a new permission with specified attributes.
-     *
-     * @param permission The object describing the permission to be created.
-     * @return the new Permission object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    Permission addPermission(Permission permission)
-            throws DataBackendException, EntityExistsException;
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group The object describing the group to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    void removeGroup(Group group)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role The object describing the role to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    void removeRole(Role role)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission The object describing the permission to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    void removePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group The object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    void renameGroup(Group group, String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role The object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    void renameRole(Role role, String name)
-            throws DataBackendException, UnknownEntityException;
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission The object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    void renamePermission(Permission permission, String name)
-            throws DataBackendException, UnknownEntityException;
-}
diff --git a/src/java/org/apache/turbine/services/security/TurbineSecurity.java b/src/java/org/apache/turbine/services/security/TurbineSecurity.java
deleted file mode 100644
index 1c24dec..0000000
--- a/src/java/org/apache/turbine/services/security/TurbineSecurity.java
+++ /dev/null
@@ -1,1155 +0,0 @@
-package org.apache.turbine.services.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.TurbineSecurityException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * This is a Facade class for SecurityService.
- *
- * This class provides static methods that call related methods of the
- * implementation of SecurityService used by the System, according to
- * the settings in TurbineResources.
- * <br>
- *
- * <a name="global">
- * <p> Certain Roles that the Users may have in the system may are not related
- * to any specific resource nor entity. They are assigned within a special group
- * named 'global' that can be referenced in the code as
- * {@link org.apache.turbine.om.security.Group#GLOBAL_GROUP_NAME}.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class TurbineSecurity
-{
-    /**
-     * Retrieves an implementation of SecurityService, base on the settings in
-     * TurbineResources.
-     *
-     * @return an implementation of SecurityService.
-     */
-    public static SecurityService getService()
-    {
-        return (SecurityService) TurbineServices.getInstance().
-                getService(SecurityService.SERVICE_NAME);
-    }
-
-    /*-----------------------------------------------------------------------
-      Management of User objects
-      -----------------------------------------------------------------------*/
-
-    /**
-     * This method provides client-side encryption of passwords.
-     *
-     * This is an utility method that is used by other classes to maintain
-     * a consistent approach to encrypting password. The behavior of the
-     * method can be configured in service's properties.
-     *
-     * @param password the password to process
-     * @return processed password
-     */
-    public static String encryptPassword(String password)
-    {
-        return getService().encryptPassword(password);
-    }
-
-    /**
-     * This method provides client-side encryption of passwords.
-     *
-     * This is an utility method that is used by other classes to maintain
-     * a consistent approach to encrypting password. The behavior of the
-     * method can be configured in service's properties.
-     *
-     * @param password the password to process
-     * @param salt the supplied salt to encrypt the password
-     * @return processed password
-     */
-    public static String encryptPassword(String password, String salt)
-    {
-        return getService().encryptPassword(password, salt);
-    }
-
-    /**
-     * Checks if a supplied password matches the encrypted password
-     *
-     * @param checkpw      The clear text password supplied by the user
-     * @param encpw        The current, encrypted password
-     *
-     * @return true if the password matches, else false
-     *
-     */
-
-    public static boolean checkPassword(String checkpw, String encpw)
-    {
-        return getService().checkPassword(checkpw, encpw);
-    }
-
-    /*-----------------------------------------------------------------------
-      Getting Object Classes
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Returns the Class object for the implementation of User interface
-     * used by the system.
-     *
-     * @return the implementation of User interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of User
-     *         interface could not be determined.
-     */
-    public static Class getUserClass()
-            throws UnknownEntityException
-    {
-        return getService().getUserClass();
-    }
-
-    /**
-     * Returns the Class object for the implementation of Group interface
-     * used by the system.
-     *
-     * @return the implementation of Group interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Group
-     *         interface could not be determined.
-     */
-    public static Class getGroupClass()
-        throws UnknownEntityException
-    {
-        return getService().getGroupClass();
-    }
-
-    /**
-     * Returns the Class object for the implementation of Permission interface
-     * used by the system.
-     *
-     * @return the implementation of Permission interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Permission
-     *         interface could not be determined.
-     */
-    public static Class getPermissionClass()
-        throws UnknownEntityException
-    {
-        return getService().getPermissionClass();
-    }
-
-    /**
-     * Returns the Class object for the implementation of Role interface
-     * used by the system.
-     *
-     * @return the implementation of Role interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of Role
-     *         interface could not be determined.
-     */
-    public static Class getRoleClass()
-        throws UnknownEntityException
-    {
-        return getService().getRoleClass();
-    }
-
-    /**
-     * Construct a blank User object.
-     *
-     * This method calls getUserClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing User interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public static User getUserInstance()
-            throws UnknownEntityException
-    {
-        return getService().getUserInstance();
-    }
-
-    /**
-     * Returns the configured UserManager.
-     *
-     * @return An UserManager object
-     */
-    public static UserManager getUserManager()
-    {
-        return getService().getUserManager();
-    }
-
-    /**
-     * Configure a new user Manager.
-     *
-     * @param userManager An UserManager object
-     */
-    public void setUserManager(UserManager userManager)
-    {
-        getService().setUserManager(userManager);
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static boolean accountExists(User user)
-            throws DataBackendException
-    {
-        return getService().accountExists(user);
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static boolean accountExists(String userName)
-            throws DataBackendException
-    {
-        return getService().accountExists(userName);
-    }
-
-    /**
-     * Authenticates an user, and constructs an User object to represent
-     * him/her.
-     *
-     * @param username The user name.
-     * @param password The user password.
-     * @return An authenticated Turbine User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     */
-    public static User getAuthenticatedUser(String username, String password)
-            throws DataBackendException, UnknownEntityException,
-            PasswordMismatchException
-    {
-        return getService().getAuthenticatedUser(username, password);
-    }
-
-    /**
-     * Constructs an User object to represent a registered user of the
-     * application.
-     *
-     * @param username The user name.
-     * @return A Turbine User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    public static User getUser(String username)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getUser(username);
-    }
-
-    /**
-     * Constructs an User object to represent an anonymous user of the
-     * application.
-     *
-     * @return An anonymous Turbine User.
-     * @throws UnknownEntityException if the anonymous User object couldn't be
-     *         constructed.
-     */
-    public static User getAnonymousUser()
-            throws UnknownEntityException
-    {
-        return getService().getAnonymousUser();
-    }
-
-    /**
-     * Checks whether a passed user object matches the anonymous user pattern
-     * according to the configured service
-     *
-     * @param user A user object
-     * @return True if this is an anonymous user
-     */
-    public static boolean isAnonymousUser(User user)
-    {
-        return getService().isAnonymousUser(user);
-    }
-
-    /**
-     * Saves User's data in the permanent storage. The user account is required
-     * to exist in the storage.
-     *
-     * @param user The User object to save.
-     * @throws UnknownEntityException if the user's account does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public static void saveUser(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        getService().saveUser(user);
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public static void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        getService().saveOnSessionUnbind(user);
-    }
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password supplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @throws PasswordMismatchException if the supplied password was
-     *         incorrect.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public static void changePassword(User user, String oldPassword,
-                                      String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        getService().changePassword(user, oldPassword, newPassword);
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public static void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        getService().forcePassword(user, password);
-    }
-
-    /*-----------------------------------------------------------------------
-      Creation of AccessControlLists
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @return The AccessControList object constructed from the user object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    public static AccessControlList getACL(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getACL(user);
-    }
-
-    /*-----------------------------------------------------------------------
-      Security management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public static void grant(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().grant(user, group, role);
-    }
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public static void revoke(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().revoke(user, group, role);
-    }
-
-    /**
-     * Revokes all roles from an User.
-     *
-     * This method is used when deleting an account.
-     *
-     * @param user the User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the account is not present.
-     */
-    public static void revokeAll(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().revokeAll(user);
-    }
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public static void grant(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().grant(role, permission);
-    }
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public static void revoke(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().revoke(role, permission);
-    }
-
-    /**
-     * Revokes all permissions from a Role.
-     *
-     * This method is user when deleting a Role.
-     *
-     * @param role the Role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws  UnknownEntityException if the Role is not present.
-     */
-    public static void revokeAll(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().revokeAll(role);
-    }
-
-    /*-----------------------------------------------------------------------
-      Account management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * <strong>TODO</strong> throw more specific exception<br>
-     *
-     * @param user the object describing account to be created.
-     * @param password password for the new user
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public static void addUser(User user, String password)
-            throws DataBackendException, EntityExistsException
-    {
-        getService().addUser(user, password);
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * <strong>TODO</strong> throw more specific exception<br>
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public static void removeUser(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().removeUser(user);
-    }
-
-    /*-----------------------------------------------------------------------
-      Group/Role/Permission management
-      -----------------------------------------------------------------------*/
-    /**
-     * Provides a reference to the Group object that represents the
-     * <a name="global">global group</a>.
-     *
-     * @return a Group object that represents the global group.
-     */
-    public static Group getGlobalGroup()
-    {
-        return getService().getGlobalGroup();
-    }
-
-    /**
-     * Creates a new Group in the system. This is a convenience
-     * method.
-     *
-     * @param name The name of the new Group.
-     * @return An object representing the new Group.
-     * @throws TurbineSecurityException if the Group could not be created.
-     */
-    public static Group createGroup(String name)
-            throws TurbineSecurityException
-    {
-        return getService().addGroup(getGroupInstance(name));
-    }
-
-    /**
-     * Creates a new Permission in the system. This is a convenience
-     * method.
-     *
-     * @param name The name of the new Permission.
-     * @return An object representing the new Permission.
-     * @throws TurbineSecurityException if the Permission could not be created.
-     */
-    public static Permission createPermission(String name)
-            throws TurbineSecurityException
-    {
-        return getService().addPermission(getPermissionInstance(name));
-    }
-
-    /**
-     * Creates a new Role in the system. This is a convenience
-     * method.
-     *
-     * @param name The name of the Role.
-     *
-     * @return An object representing the new Role.
-     *
-     * @throws TurbineSecurityException if the Role could not be created.
-     */
-    public static Role createRole(String name)
-        throws TurbineSecurityException
-    {
-        return getService().addRole(getRoleInstance(name));
-    }
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param groupName The name of the Group to be retrieved.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Group is not present.
-     * @deprecated Use <a href="#getGroupByName">getGroupByName</a> instead.
-     */
-    public static Group getGroup(String groupName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getGroup(groupName);
-    }
-
-    /**
-     * Retrieve a Group object with specified name.
-     *
-     * @param groupName The name of the Group to be retrieved.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Group is not present.
-     */
-    public static Group getGroupByName(String groupName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getGroupByName(groupName);
-    }
-
-    /**
-     * Retrieve a Group object with specified Id.
-     *
-     * @param name the name of the Group.
-     *
-     * @return an object representing the Group with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public static Group getGroupById(int groupId)
-            throws DataBackendException,
-                   UnknownEntityException
-    {
-        return getService().getGroupById(groupId);
-    }
-
-    /**
-     * Construct a blank Group object.
-     *
-     * This method calls getGroupClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param groupName The name of the Group
-     *
-     * @return an object implementing Group interface.
-     *
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public static Group getGroupInstance(String groupName)
-            throws UnknownEntityException
-    {
-        return getService().getGroupInstance(groupName);
-    }
-
-    /**
-     * Retrieves a named Group. If the Group does not exist, it creates
-     * a new Group based on the Services Group implementation. It is ok
-     * to pass in null or "" here and then use Group.setName() at a later
-     * point.
-     *
-     * @param groupName The name of the Group to be retrieved.
-     * @return an object representing the Group with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @deprecated Use getGroupInstance(String name) instead.
-     */
-    public static Group getNewGroup(String groupName)
-            throws DataBackendException
-    {
-        return getService().getNewGroup(groupName);
-    }
-
-    /**
-     * Construct a blank Role object.
-     *
-     * This method calls getRoleClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param roleName The name of the role.
-     *
-     * @return an object implementing Role interface.
-     *
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public static Role getRoleInstance(String roleName)
-            throws UnknownEntityException
-    {
-        return getService().getRoleInstance(roleName);
-    }
-
-    /**
-     * Retrieves a named Role. If the Role does not exist, it creates a new Role
-     * based on the Services Role implementation.
-     * It is ok to pass in null or "" here and then use Role.setName() at
-     * a later point.
-     *
-     * @param roleName The name of the Role to be retrieved.
-     * @return an object representing the Role with specified name.
-     * @throws TurbineSecurityException if the Role could not be retrieved
-     * @deprecated Use getRoleInstance(String name) instead.
-     */
-    public static Role getNewRole(String roleName)
-            throws TurbineSecurityException
-    {
-        return getService().getNewRole(roleName);
-    }
-
-    /**
-     * Construct a blank Permission object.
-     *
-     * This method calls getPermissionClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @param permName The name of the permission.
-     *
-     * @return an object implementing Permission interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public static Permission getPermissionInstance(String permName)
-            throws UnknownEntityException
-    {
-        return getService().getPermissionInstance(permName);
-    }
-
-    /**
-     * Retrieves a named Permission. If the Permission does not exist, it
-     * creates a new Permission based on the Services Permission implementation.
-     * It is ok to pass in null or "" here and then use Permission.setName() at
-     * a later point.
-     *
-     * @param permissionName The name of the Permission to be retrieved.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @deprecated Use getPermissionInstance(String name) instead.
-     */
-    public static Permission getNewPermission(String permissionName)
-            throws DataBackendException
-    {
-        return getService().getNewPermission(permissionName);
-    }
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param roleName The name of the Role to be retrieved.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Role is not present.
-     * @deprecated Use <a href="#getRoleByName">getRoleByName</a> instead.
-     */
-    public static Role getRole(String roleName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getRole(roleName);
-    }
-
-    /**
-     * Retrieve a Role object with specified name.
-     *
-     * @param roleName The name of the Role to be retrieved.
-     * @return an object representing the Role with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Role is not present.
-     */
-    public static Role getRoleByName(String roleName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getRoleByName(roleName);
-    }
-
-    /**
-     * Retrieve a Role object with specified Id.
-     *
-     * @param name the name of the Role.
-     *
-     * @return an object representing the Role with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public static Role getRoleById(int roleId)
-            throws DataBackendException,
-                   UnknownEntityException
-    {
-        return getService().getRoleById(roleId);
-    }
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param permissionName The name of the Permission to be retrieved.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Permission is not present.
-     * @deprecated Use <a href="#getPermissionByName">getPermissionByName</a> instead.
-     */
-    public static Permission getPermission(String permissionName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getPermission(permissionName);
-    }
-
-    /**
-     * Retrieve a Permission object with specified name.
-     *
-     * @param permissionName The name of the Permission to be retrieved.
-     * @return an object representing the Permission with specified name.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Permission is not present.
-     */
-    public static Permission getPermissionByName(String permissionName)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getPermissionByName(permissionName);
-    }
-
-    /**
-     * Retrieve a Permission object with specified Id.
-     *
-     * @param name the name of the Permission.
-     *
-     * @return an object representing the Permission with specified name.
-     *
-     * @exception UnknownEntityException if the permission does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public static Permission getPermissionById(int permissionId)
-            throws DataBackendException,
-                   UnknownEntityException
-    {
-        return getService().getPermissionById(permissionId);
-    }
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static GroupSet getGroups(Criteria criteria)
-            throws DataBackendException
-    {
-        return getService().getGroups(criteria);
-    }
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria a Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static RoleSet getRoles(Criteria criteria)
-            throws DataBackendException
-    {
-        return getService().getRoles(criteria);
-    }
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria a Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static PermissionSet getPermissions(Criteria criteria)
-            throws DataBackendException
-    {
-        return getService().getPermissions(criteria);
-    }
-
-    /**
-     * Retrieves all groups defined in the system.
-     *
-     * @return the names of all groups defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static GroupSet getAllGroups()
-            throws DataBackendException
-    {
-        return getService().getAllGroups();
-    }
-
-    /**
-     * Retrieves all roles defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static RoleSet getAllRoles()
-            throws DataBackendException
-    {
-        return getService().getAllRoles();
-    }
-
-    /**
-     * Retrieves all permissions defined in the system.
-     *
-     * @return the names of all roles defined in the system.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public static PermissionSet getAllPermissions()
-            throws DataBackendException
-    {
-        return getService().getAllPermissions();
-    }
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @return the Permissions for the specified role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role is not present.
-     */
-    public static PermissionSet getPermissions(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        return getService().getPermissions(role);
-    }
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public static void saveGroup(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().saveGroup(group);
-    }
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public static void saveRole(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().saveRole(role);
-    }
-
-    /**
-     * Stores Permission's attributes. The Permissions is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public static void savePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().savePermission(permission);
-    }
-
-    /**
-     * Creates a new group with specified attributes.
-     *
-     * @param group the object describing the group to be created.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    public static void addGroup(Group group)
-            throws DataBackendException, EntityExistsException
-    {
-        getService().addGroup(group);
-    }
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role the objects describing the role to be created.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    public static void addRole(Role role)
-            throws DataBackendException, EntityExistsException
-    {
-        getService().addRole(role);
-    }
-
-    /**
-     * Creates a new permission with specified attributes.
-     *
-     * @param permission the objects describing the permission to be created.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    public static void addPermission(Permission permission)
-            throws DataBackendException, EntityExistsException
-    {
-        getService().addPermission(permission);
-    }
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group the object describing group to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public static void removeGroup(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().removeGroup(group);
-    }
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role The object describing the role to be removed.
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public static void removeRole(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().removeRole(role);
-    }
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission The object describing the permission to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public static void removePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().removePermission(permission);
-    }
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group The object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public static void renameGroup(Group group, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().renameGroup(group, name);
-    }
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role The object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public static void renameRole(Role role, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().renameRole(role, name);
-    }
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission The object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public static void renamePermission(Permission permission, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        getService().renamePermission(permission, name);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/security/UserManager.java b/src/java/org/apache/turbine/services/security/UserManager.java
deleted file mode 100644
index ab0ec42..0000000
--- a/src/java/org/apache/turbine/services/security/UserManager.java
+++ /dev/null
@@ -1,286 +0,0 @@
-package org.apache.turbine.services.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An UserManager performs {@link org.apache.turbine.om.security.User} objects
- * related tasks on behalf of the
- * {@link org.apache.turbine.services.security.BaseSecurityService}.
- *
- * The responsibilities of this class include loading data of an user from the
- * storage and putting them into the
- * {@link org.apache.turbine.om.security.User} objects, saving those data
- * to the permanent storage, and authenticating users.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface UserManager
-{
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     *
-     * @throws InitializationException When something went wrong.
-     */
-    void init(Configuration conf)
-        throws InitializationException;
-    
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    boolean accountExists(User user)
-            throws DataBackendException;
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    boolean accountExists(String userName)
-            throws DataBackendException;
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param username the name of the user.
-     * @return an User object.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    User retrieve(String username)
-            throws UnknownEntityException, DataBackendException;
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     * @deprecated Use retrieveList(Criteria crit)
-     */
-    User[] retrieve(Criteria criteria) throws DataBackendException;
-
-    /**
-     * Retrieve a list of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    List retrieveList(Criteria criteria)
-        throws DataBackendException;
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param username the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    User retrieve(String username, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException;
-
-    /**
-     * Save an User object to persistent storage. User's record is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    void store(User user)
-            throws UnknownEntityException, DataBackendException;
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException;
-
-    /**
-     * Authenticate an User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user an User object to authenticate.
-     * @param password the user supplied password.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    void authenticate(User user, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException;
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param initialPassword password for the new user
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    void createAccount(User user, String initialPassword)
-            throws EntityExistsException, DataBackendException;
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    void removeAccount(User user)
-            throws UnknownEntityException, DataBackendException;
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password suplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @throws PasswordMismatchException if the supplied password was incorrect.
-     * @throws UnknownEntityException if the user's record does not
-     *         exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    void changePassword(User user, String oldPassword,
-                        String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException;
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @throws UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @throws DataBackendException if there is a problem accessing the storage.
-     */
-    void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException;
-}
diff --git a/src/java/org/apache/turbine/services/security/db/DBSecurityService.java b/src/java/org/apache/turbine/services/security/db/DBSecurityService.java
deleted file mode 100644
index 2f63695..0000000
--- a/src/java/org/apache/turbine/services/security/db/DBSecurityService.java
+++ /dev/null
@@ -1,1210 +0,0 @@
-package org.apache.turbine.services.security.db;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.om.security.peer.GroupPeer;
-import org.apache.turbine.om.security.peer.PermissionPeer;
-import org.apache.turbine.om.security.peer.RolePeer;
-import org.apache.turbine.om.security.peer.RolePermissionPeer;
-import org.apache.turbine.om.security.peer.UserGroupRolePeer;
-import org.apache.turbine.om.security.peer.UserPeer;
-import org.apache.turbine.services.security.BaseSecurityService;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An implementation of SecurityService that uses a database as backend.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @version $Id$
- */
-public class DBSecurityService
-        extends BaseSecurityService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DBSecurityService.class);
-
-    /**
-     * The key within services's properties for user implementation
-     * classname (user.class)  - Leandro
-     */
-    public static final String USER_PEER_CLASS_KEY = "userPeer.class";
-
-    /**
-     * The default implementation of User interface
-     * (org.apache.turbine.om.security.DBUser)
-     */
-    public static final String USER_PEER_CLASS_DEFAULT =
-            "org.apache.turbine.om.security.peer.TurbineUserPeer";
-
-    /*-----------------------------------------------------------------------
-      Creation of AccessControlLists
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * This method creates a snapshot of the state of security information
-     * concerning this user, at the moment of invocation and stores it
-     * into an AccessControlList object.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @return A new AccessControlList object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    public AccessControlList getACL(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        if (!TurbineSecurity.accountExists(user))
-        {
-            throw new UnknownEntityException("The account '"
-                    + user.getName() + "' does not exist");
-        }
-        try
-        {
-            Hashtable roles = new Hashtable();
-            Hashtable permissions = new Hashtable();
-            // notify the state modifiers (writers) that we want to create
-            // the snapshot.
-            lockShared();
-
-            // construct the snapshot:
-
-            // foreach group in the system
-            for (Iterator groupsIterator = getAllGroups().iterator();
-                 groupsIterator.hasNext();)
-            {
-                Group group = (Group) groupsIterator.next();
-                // get roles of user in the group
-                RoleSet groupRoles = RolePeer.retrieveSet(user, group);
-                // put the Set into roles(group)
-                roles.put(group, groupRoles);
-                // collect all permissions in this group
-                PermissionSet groupPermissions = new PermissionSet();
-                // foreach role in Set
-                for (Iterator rolesIterator = groupRoles.iterator();
-                     rolesIterator.hasNext();)
-                {
-                    Role role = (Role) rolesIterator.next();
-                    // get permissions of the role
-                    PermissionSet rolePermissions
-                            = PermissionPeer.retrieveSet(role);
-                    groupPermissions.add(rolePermissions);
-                }
-                // put the Set into permissions(group)
-                permissions.put(group, groupPermissions);
-            }
-            return getAclInstance(roles, permissions);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to build ACL for user '"
-                    + user.getName() + "'", e);
-        }
-        finally
-        {
-            // notify the state modifiers that we are done creating the snapshot
-            unlockShared();
-        }
-    }
-
-    /*-----------------------------------------------------------------------
-      Security management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void grant(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(UserGroupRolePeer.USER_ID,
-                        ((BaseObject) user).getPrimaryKey());
-                criteria.add(UserGroupRolePeer.GROUP_ID,
-                        ((BaseObject) group).getPrimaryKey());
-                criteria.add(UserGroupRolePeer.ROLE_ID,
-                        ((BaseObject) role).getPrimaryKey());
-                UserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(User,Group,Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException("Unknown user '"
-                    + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException("Unknown group '"
-                    + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                    + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void revoke(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(UserGroupRolePeer.USER_ID,
-                        ((BaseObject) user).getPrimaryKey());
-                criteria.add(UserGroupRolePeer.GROUP_ID,
-                        ((BaseObject) group).getPrimaryKey());
-                criteria.add(UserGroupRolePeer.ROLE_ID,
-                        ((BaseObject) role).getPrimaryKey());
-                UserGroupRolePeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(User,Role,Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException("Unknown user '"
-                    + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException("Unknown group '"
-                    + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                    + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all roles from an User.
-     *
-     * This method is used when deleting an account.
-     *
-     * @param user the User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the account is not present.
-     */
-    public synchronized void revokeAll(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            if (userExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(UserGroupRolePeer.USER_ID,
-                        ((BaseObject) user).getPrimaryKey());
-                UserGroupRolePeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(User) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown user '"
-                + user.getName() + "'");
-    }
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void grant(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(RolePermissionPeer.ROLE_ID,
-                        ((BaseObject) role).getPrimaryKey());
-                criteria.add(RolePermissionPeer.PERMISSION_ID,
-                        ((BaseObject) permission).getPrimaryKey());
-                UserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                    + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException("Unknown permission '"
-                    + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void revoke(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(RolePermissionPeer.ROLE_ID,
-                        ((BaseObject) role).getPrimaryKey());
-                criteria.add(RolePermissionPeer.PERMISSION_ID,
-                        ((BaseObject) permission).getPrimaryKey());
-                RolePermissionPeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException("Unknown role '"
-                    + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException("Unknown permission '"
-                    + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all permissions from a Role.
-     *
-     * This method is user when deleting a Role.
-     *
-     * @param role the Role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Role is not present.
-     */
-    public synchronized void revokeAll(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(RolePermissionPeer.ROLE_ID,
-                        ((BaseObject) role).getPrimaryKey());
-                RolePermissionPeer.doDelete(criteria);
-
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '"
-                + role.getName() + "'");
-    }
-
-    /*-----------------------------------------------------------------------
-      Group/Role/Permission management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public GroupSet getGroups(Criteria criteria)
-            throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(GroupPeer.getColumnName(key), criteria.get(key));
-        }
-        List groups = new ArrayList(0);
-        try
-        {
-            groups = GroupPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getGroups(Criteria) failed", e);
-        }
-        return new GroupSet(groups);
-    }
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public RoleSet getRoles(Criteria criteria)
-            throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(RolePeer.getColumnName(key), criteria.get(key));
-        }
-        List roles = new ArrayList(0);
-        try
-        {
-            roles = RolePeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getRoles(Criteria) failed", e);
-        }
-        return new RoleSet(roles);
-    }
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public PermissionSet getPermissions(Criteria criteria)
-            throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(PermissionPeer.getColumnName(key),
-                    criteria.get(key));
-        }
-        List permissions = new Vector(0);
-        try
-        {
-            permissions = PermissionPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                    "getPermissions(Criteria) failed", e);
-        }
-        return new PermissionSet(permissions);
-    }
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @return A Permission set for the Role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role is not present.
-     */
-    public PermissionSet getPermissions(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockShared();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                return PermissionPeer.retrieveSet(role);
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getPermissions(Role) failed", e);
-        }
-        finally
-        {
-            unlockShared();
-        }
-        throw new UnknownEntityException("Unknown role '"
-                + role.getName() + "'");
-    }
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public void saveGroup(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveGroup(Group) failed", e);
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public void saveRole(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveRole(Role) failed", e);
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Stores Permission's attributes. The Permissions is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public void savePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                    "savePermission(Permission) failed", e);
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                + permission + "'");
-    }
-
-    /**
-     * Creates a new group with specified attributes.
-     *
-     * @param group the object describing the group to be created.
-     * @return a new Group object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    public synchronized Group addGroup(Group group)
-            throws DataBackendException,
-            EntityExistsException
-    {
-        boolean groupExists = false;
-
-        if (StringUtils.isEmpty(group.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                    + "a group with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (!groupExists)
-            {
-                // add a row to the table
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(GroupPeer.NAME,
-                        group.getName());
-                List results = GroupPeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                            "Internal error - query returned "
-                            + results.size() + " rows");
-                }
-                Group newGroup = (Group) results.get(0);
-                // add the group to system-wide cache
-                getAllGroups().add(newGroup);
-                // return the object with correct id
-                return newGroup;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the groupExists was true.
-        throw new EntityExistsException("Group '" + group + "' already exists");
-    }
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role the object describing the role to be created.
-     * @return a new Role object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    public synchronized Role addRole(Role role)
-            throws DataBackendException, EntityExistsException
-    {
-        boolean roleExists = false;
-
-        if (StringUtils.isEmpty(role.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                    + "a role with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (!roleExists)
-            {
-                // add a row to the table
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(RolePeer.NAME, role.getName());
-                List results = RolePeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                            "Internal error - query returned "
-                            + results.size() + " rows");
-                }
-                Role newRole = (Role) results.get(0);
-                // add the role to system-wide cache
-                getAllRoles().add(newRole);
-                // return the object with correct id
-                return newRole;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addRole(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the roleExists was true.
-        throw new EntityExistsException("Role '" + role + "' already exists");
-    }
-
-    /**
-     * Creates a new permission with specified attributes.
-     *
-     * @param permission the object describing the permission to be created.
-     * @return a new Permission object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    public synchronized Permission addPermission(Permission permission)
-            throws DataBackendException, EntityExistsException
-    {
-        boolean permissionExists = false;
-
-        if (StringUtils.isEmpty(permission.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                    + "a permission with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (!permissionExists)
-            {
-                // add a row to the table
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(PermissionPeer.NAME,
-                        permission.getName());
-                List results = PermissionPeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                            "Internal error - query returned "
-                            + results.size() + " rows");
-                }
-                Permission newPermission = (Permission) results.get(0);
-                // add the permission to system-wide cache
-                getAllPermissions().add(newPermission);
-                // return the object with correct id
-                return newPermission;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                    "addPermission(Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the permissionExists was true.
-        throw new EntityExistsException("Permission '" + permission
-                + "' already exists");
-    }
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group The object describing the group to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void removeGroup(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doDelete(criteria);
-                getAllGroups().remove(group);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Failed to delete a Group");
-            log.error(e);
-            throw new DataBackendException("removeGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role The object describing the role to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void removeRole(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                // revoke all permissions from the role to be deleted
-                revokeAll(role);
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doDelete(criteria);
-                getAllRoles().remove(role);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removeRole(Role)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission The object describing the permission to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void removePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doDelete(criteria);
-                getAllPermissions().remove(permission);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removePermission(Permission)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                + permission + "'");
-    }
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group The object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void renameGroup(Group group, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                group.setName(name);
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameGroup(Group,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role The object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void renameRole(Role role, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                role.setName(name);
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameRole(Role,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission The object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void renamePermission(Permission permission,
-                                              String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                permission.setName(name);
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                    "renamePermission(Permission,name)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown permission '"
-                + permission + "'");
-    }
-
-    /* Service specific implementation methods */
-
-    /**
-     * Returns the Class object for the implementation of UserPeer interface
-     * used by the system (defined in TR.properties)
-     *
-     * @return the implementation of UserPeer interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of UserPeer
-     *         interface could not be determined.
-     */
-    public Class getUserPeerClass() throws UnknownEntityException
-    {
-        String userPeerClassName = getConfiguration().getString(
-                USER_PEER_CLASS_KEY, USER_PEER_CLASS_DEFAULT);
-        try
-        {
-            return Class.forName(userPeerClassName);
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                    "Failed create a Class object for UserPeer implementation", e);
-        }
-    }
-
-    /**
-     * Construct a UserPeer object.
-     *
-     * This method calls getUserPeerClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing UserPeer interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public UserPeer getUserPeerInstance() throws UnknownEntityException
-    {
-        UserPeer up;
-        try
-        {
-            up = (UserPeer) getUserPeerClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                    "Failed instantiate an UserPeer implementation object", e);
-        }
-        return up;
-    }
-
-    /**
-     * Determines if the <code>Group</code> exists in the security system.
-     *
-     * @param group a <code>Group</code> value
-     * @return true if the group exists in the system, false otherwise
-     * @throws DataBackendException when more than one Group with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Group group)
-            throws DataBackendException, Exception
-    {
-        return GroupPeer.checkExists(group);
-    }
-
-    /**
-     * Determines if the <code>Role</code> exists in the security system.
-     *
-     * @param role a <code>Role</code> value
-     * @return true if the role exists in the system, false otherwise
-     * @throws DataBackendException when more than one Role with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Role role)
-            throws DataBackendException, Exception
-    {
-        return RolePeer.checkExists(role);
-    }
-
-    /**
-     * Determines if the <code>Permission</code> exists in the security system.
-     *
-     * @param permission a <code>Permission</code> value
-     * @return true if the permission exists in the system, false otherwise
-     * @throws DataBackendException when more than one Permission with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Permission permission)
-            throws DataBackendException, Exception
-    {
-        return PermissionPeer.checkExists(permission);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/security/db/DBUserManager.java b/src/java/org/apache/turbine/services/security/db/DBUserManager.java
deleted file mode 100644
index 7f2d5cf..0000000
--- a/src/java/org/apache/turbine/services/security/db/DBUserManager.java
+++ /dev/null
@@ -1,564 +0,0 @@
-package org.apache.turbine.services.security.db;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.om.ObjectKey;
-import org.apache.torque.om.Persistent;
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.om.security.peer.TurbineUserPeer;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.UserManager;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An UserManager performs {@link org.apache.turbine.om.security.User}
- * objects related tasks on behalf of the
- * {@link org.apache.turbine.services.security.BaseSecurityService}.
- *
- * This implementation uses a relational database for storing user data. It
- * expects that the User interface implementation will be castable to
- * {@link org.apache.torque.om.BaseObject}.
- *
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DBUserManager
-        implements UserManager
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DBUserManager.class);
-
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     */
-    public void init(Configuration conf)
-    {
-        // GNDN
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing
-     *         the data backend.
-     */
-    public boolean accountExists(User user)
-            throws DataBackendException
-    {
-        return accountExists(user.getName());
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing
-     *         the data backend.
-     */
-    public boolean accountExists(String userName)
-            throws DataBackendException
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(TurbineUserPeer.USERNAME, userName);
-        List users;
-        try
-        {
-            users = TurbineUserPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                    "Failed to check account's presence", e);
-        }
-        if (users.size() > 1)
-        {
-            throw new DataBackendException(
-                    "Multiple Users with same username '" + userName + "'");
-        }
-        return (users.size() == 1);
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param userName the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String userName)
-            throws UnknownEntityException, DataBackendException
-    {
-        Criteria criteria = new Criteria();
-        criteria.add(TurbineUserPeer.USERNAME, userName);
-        List users;
-        try
-        {
-            users = TurbineUserPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to retrieve user '" +
-                    userName + "'", e);
-        }
-        if (users.size() > 1)
-        {
-            throw new DataBackendException(
-                    "Multiple Users with same username '" + userName + "'");
-        }
-        if (users.size() == 1)
-        {
-            return (User) users.get(0);
-        }
-        throw new UnknownEntityException("Unknown user '" + userName + "'");
-    }
-
-    /**
-     * Retrieve a list of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of Torque implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List retrieveList(Criteria criteria)
-        throws DataBackendException
-    {
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-
-            // set the table name for all attached criterion
-            Criteria.Criterion[] criterion = criteria
-                    .getCriterion(key).getAttachedCriterion();
-
-            for (int i = 0; i < criterion.length; i++)
-            {
-                String table = criterion[i].getTable();
-                if (table == null || "".equals(table))
-                {
-                    criterion[i].setTable(TurbineUserPeer.getTableName());
-                }
-            }
-        }
-        List users = new ArrayList(0);
-        try
-        {
-            users = TurbineUserPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to retrieve users", e);
-        }
-        return users;
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     * @deprecated Use <a href="#retrieveList">retrieveList</a> instead.
-     */
-    public User[] retrieve(Criteria criteria)
-            throws DataBackendException
-    {
-        return (User []) retrieveList(criteria).toArray(new User[0]);
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param userName the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String userName, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        User user = retrieve(userName);
-        authenticate(user, password);
-        return user;
-    }
-
-    /**
-     * Save an User object to persistent storage. User's account is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void store(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-
-        Criteria criteria = TurbineUserPeer.buildCriteria(user);
-        try
-        {
-            TurbineUserPeer.doUpdate(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to save user object", e);
-        }
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!user.hasLoggedIn())
-        {
-            return;
-        }
-
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-        Criteria crit = new Criteria();
-        if (!((Persistent) user).isNew())
-        {
-            crit.add(TurbineUserPeer.USER_ID, ((Persistent) user).getPrimaryKey());
-        }
-
-        Hashtable permStorage = (Hashtable) user.getPermStorage().clone();
-        crit.add(TurbineUserPeer.LAST_LOGIN, permStorage.remove(TurbineUserPeer.LAST_LOGIN));
-
-        // The OBJECT_DATA column only stores data not mapped to a column.  We must
-        // remove all of the extra data and serialize the rest.  Access Counter
-        // is not mapped to a column so it will be serialized into OBJECT_DATA.
-        for (int i = 1; i < TurbineUserPeer.columnNames.length; i++)
-        {
-            if (permStorage.containsKey(TurbineUserPeer.columnNames[i]))
-            {
-                permStorage.remove(TurbineUserPeer.columnNames[i]);
-            }
-        }
-        crit.add(TurbineUserPeer.OBJECT_DATA, permStorage);
-
-        try
-        {
-            TurbineUserPeer.doUpdate(crit);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to save user object", e);
-        }
-
-    }
-
-    /**
-     * Authenticate an User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user an User object to authenticate.
-     * @param password the user supplied password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void authenticate(User user, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-
-        // log.debug("Supplied Pass: " + password);
-        // log.debug("User Pass: " + user.getPassword());
-
-        /*
-         * Unix crypt needs the existing, encrypted password text as
-         * salt for checking the supplied password. So we supply it
-         * into the checkPassword routine
-         */
-
-        if (!TurbineSecurity.checkPassword(password, user.getPassword()))
-        {
-            throw new PasswordMismatchException("The passwords do not match");
-        }
-    }
-
-    /**
-     * Change the password for an User. The user must have supplied the
-     * old password to allow the change.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword The old password to verify
-     * @param newPassword The new password to set
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void changePassword(User user, String oldPassword,
-                               String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-
-        if (!TurbineSecurity.checkPassword(oldPassword, user.getPassword()))
-        {
-            throw new PasswordMismatchException(
-                    "The supplied old password for '" + user.getName() +
-                    "' was incorrect");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(newPassword));
-        // save the changes in the database imediately, to prevent the password
-        // being 'reverted' to the old value if the user data is lost somehow
-        // before it is saved at session's expiry.
-        store(user);
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(password));
-        // save the changes in the database immediately, to prevent the
-        // password being 'reverted' to the old value if the user data
-        // is lost somehow before it is saved at session's expiry.
-        store(user);
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user The object describing account to be created.
-     * @param initialPassword the password for the new account
-     * @throws DataBackendException if there was an error accessing
-     the data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void createAccount(User user, String initialPassword)
-            throws EntityExistsException, DataBackendException
-    {
-        if (StringUtils.isEmpty(user.getName()))
-        {
-            throw new DataBackendException("Could not create "
-                    + "an user with empty name!");
-        }
-
-        if (accountExists(user))
-        {
-            throw new EntityExistsException("The account '" +
-                    user.getName() + "' already exists");
-        }
-        user.setPassword(TurbineSecurity.encryptPassword(initialPassword));
-
-        Criteria criteria = TurbineUserPeer.buildCriteria(user);
-        try
-        {
-            // perform the insert to the database
-            ObjectKey pk = TurbineUserPeer.doInsert(criteria);
-
-            // update the user object with the primary key
-            TurbineMapBuilder mapbuilder = (TurbineMapBuilder)
-                    TurbineUserPeer.getMapBuilder("org.apache.turbine.util.db.map.TurbineMapBuilder");
-            user.setPerm(mapbuilder.getUserId(), pk);
-            ((BaseObject) user).setPrimaryKey(pk);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to create account '" +
-                    user.getName() + "'", e);
-        }
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing
-     the data backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeAccount(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-        Criteria criteria = new Criteria();
-        criteria.add(TurbineUserPeer.USERNAME, user.getName());
-        try
-        {
-            TurbineUserPeer.doDelete(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to remove account '" +
-                    user.getName() + "'", e);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/security/db/package.html b/src/java/org/apache/turbine/services/security/db/package.html
deleted file mode 100644
index b477cf7..0000000
--- a/src/java/org/apache/turbine/services/security/db/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-A security service implementation that used an SQL database for authentication.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityConstants.java b/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityConstants.java
deleted file mode 100644
index 991a141..0000000
--- a/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityConstants.java
+++ /dev/null
@@ -1,314 +0,0 @@
-package org.apache.turbine.services.security.ldap;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Properties;
-
-import org.apache.turbine.services.security.TurbineSecurity;
-
-/**
- * <p>This is a static class for defining the default ldap confiquration
- * keys used by core Turbine components.</p>
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:hhernandez@itweb.com.mx">Humberto Hernandez</a>
- *
- */
-public class LDAPSecurityConstants
-{
-    /** Property key */
-    static final String LDAP_ADMIN_USERNAME_KEY = "ldap.admin.username";
-
-    /** Property key */
-    static final String LDAP_ADMIN_PASSWORD_KEY = "ldap.admin.password";
-
-    /** Property key */
-    static final String LDAP_HOST_KEY = "ldap.host";
-
-    /** Property default value */
-    static final String LDAP_HOST_DEFAULT = "localhost";
-
-    /** Property key */
-    static final String LDAP_PORT_KEY = "ldap.port";
-
-    /** Property default value */
-    static final String LDAP_PORT_DEFAULT = "389";
-
-    /** Property key */
-    static final String LDAP_PROVIDER_KEY = "ldap.provider";
-
-    /** Property default value */
-    static final String LDAP_PROVIDER_DEFAULT =
-            "com.sun.jndi.ldap.LdapCtxFactory";
-
-    /** Property key */
-    static final String LDAP_BASE_SEARCH_KEY = "ldap.basesearch";
-
-    /** Property key */
-    static final String LDAP_AUTH_KEY = "ldap.security.authentication";
-
-    /** Property default value */
-    static final String LDAP_AUTH_DEFAULT = "simple";
-
-    /** Property key */
-    static final String LDAP_USER_USERID_KEY = "ldap.user.userid";
-
-    /** Property key */
-    static final String LDAP_USER_USERNAME_KEY = "ldap.user.username";
-
-    /** Property default value */
-    static final String LDAP_USER_USERNAME_DEFAULT = "turbineUserUniqueId";
-
-    /** Property key */
-    static final String LDAP_USER_FIRSTNAME_KEY = "ldap.user.firstname";
-
-    /** Property default value */
-    static final String LDAP_USER_FIRSTNAME_DEFAULT = "turbineUserFirstName";
-
-    /** Property key */
-    static final String LDAP_USER_LASTNAME_KEY = "ldap.user.lastname";
-
-    /** Property default value */
-    static final String LDAP_USER_LASTNAME_DEFAULT = "turbineUserLastName";
-
-    /** Property key */
-    static final String LDAP_USER_EMAIL_KEY = "ldap.user.email";
-
-    /** Property default value */
-    static final String LDAP_USER_EMAIL_DEFAULT = "turbineUserMailAddress";
-
-    /** Property key */
-    static final String LDAP_USER_PASSWORD_KEY = "ldap.user.password";
-
-    /** Property default value */
-    static final String LDAP_USER_PASSWORD_DEFAULT = "userPassword";
-
-    /**
-     * Get all the properties for the security service.
-     * @return all the properties of the security service.
-     */
-    public static Properties getProperties()
-    {
-        return TurbineSecurity.getService().getProperties();
-    }
-
-    /**
-     * Get a property from the LDAP security service.
-     * @param key The key to access the value of the property.
-     * @return The value of the property.
-     */
-    public static String getProperty(String key)
-    {
-        return getProperties().getProperty(key);
-    }
-
-    /**
-     * Get a property from the LDAP security service.
-     * @param key The key to access the value of the property.
-     * @param defaultValue The value that the property takes
-     *        when it doesn't exist.
-     * @return The value of the property.
-     */
-    public static String getProperty(String key, String defaultValue)
-    {
-        return getProperties().getProperty(key, defaultValue);
-    }
-
-    /**
-     * Get the value of the property for the administration username.
-     * @return the value of the property.
-     */
-    public static String getAdminUsername()
-    {
-        String str = getProperty(LDAP_ADMIN_USERNAME_KEY);
-
-        /*
-         * The adminUsername string contains some
-         * characters that need to be transformed.
-         */
-        str = str.replace('/', '=');
-        str = str.replace('%', ',');
-        return str;
-    }
-
-    /**
-     * Get the value of the property for the administration password.
-     * @return the value of the property.
-     */
-    public static String getAdminPassword()
-    {
-        return getProperty(LDAP_ADMIN_PASSWORD_KEY);
-    }
-
-    /**
-     * Get the value of the property for the LDAP Host.
-     * @return the value of the property.
-     */
-    public static String getLDAPHost()
-    {
-        return getProperty(LDAP_HOST_KEY, LDAP_HOST_DEFAULT);
-    }
-
-    /**
-     * Get the value of the property for the LDAP Port.
-     * @return the value of the property.
-     */
-    public static String getLDAPPort()
-    {
-        return getProperty(LDAP_PORT_KEY, LDAP_PORT_DEFAULT);
-    }
-
-    /**
-     * Get the value of the property for the  LDAP Provider.
-     * @return the value of the property.
-     */
-    public static String getLDAPProvider()
-    {
-        return getProperty(LDAP_PROVIDER_KEY, LDAP_PROVIDER_DEFAULT);
-    }
-
-    /**
-     * Get value of the property for the Base Search.
-     * @return the value of the property.
-     */
-    public static String getBaseSearch()
-    {
-        String str = getProperty(LDAP_BASE_SEARCH_KEY);
-
-        /*
-         * The userBaseSearch string contains some
-         * characters that need to be transformed.
-         */
-        str = str.replace('/', '=');
-        str = str.replace('%', ',');
-        return str;
-    }
-
-    /**
-     * Get the value of the property for the Authentication
-     * mechanism. Valid values are: none, simple,
-     * @return the value of the property.
-     */
-    public static String getLDAPAuthentication()
-    {
-        return getProperty(LDAP_AUTH_KEY, LDAP_AUTH_DEFAULT);
-    }
-
-    /**
-     * Get the value of the User id Attribute.
-     * @return the value of the property.
-     */
-    public static String getUserIdAttribute()
-    {
-        return getProperty(LDAP_USER_USERID_KEY);
-    }
-
-    /**
-     * Get the value of the Username Attribute.
-     * @return the value of the property.
-     */
-    public static String getNameAttribute()
-    {
-        return getProperty(LDAP_USER_USERNAME_KEY, LDAP_USER_USERNAME_DEFAULT);
-    }
-
-    /**
-     * Get the value of the Username Attribute.
-     * @return the value of the property.
-     * @deprecated Use getNameAttribute()
-     */
-    public static String getUserNameAttribute()
-    {
-        return getNameAttribute();
-    }
-
-    /**
-     * Get the value of the Firstname Attribute.
-     * @return the value of the property.
-     */
-    public static String getFirstNameAttribute()
-    {
-        return getProperty(LDAP_USER_FIRSTNAME_KEY,
-                LDAP_USER_FIRSTNAME_DEFAULT);
-    }
-
-    /**
-     * Get the value of the Lastname Attribute.
-     * @return the value of the property.
-     */
-    public static String getLastNameAttribute()
-    {
-        return getProperty(LDAP_USER_LASTNAME_KEY, LDAP_USER_LASTNAME_DEFAULT);
-    }
-
-    /**
-     * Get the value of the Password Attribute.
-     * @return the value of the property.
-     */
-    public static String getPasswordAttribute()
-    {
-        return getProperty(LDAP_USER_PASSWORD_KEY, LDAP_USER_PASSWORD_DEFAULT);
-    }
-
-    /**
-     * Get the value of the E-Mail Attribute.
-     * @return the value of the property.
-     */
-    public static String getEmailAttribute()
-    {
-        return getProperty(LDAP_USER_EMAIL_KEY, LDAP_USER_EMAIL_DEFAULT);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityService.java b/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityService.java
deleted file mode 100644
index 452e5ea..0000000
--- a/src/java/org/apache/turbine/services/security/ldap/LDAPSecurityService.java
+++ /dev/null
@@ -1,1259 +0,0 @@
-package org.apache.turbine.services.security.ldap;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Vector;
-import javax.naming.NameAlreadyBoundException;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.BasicAttributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.TurbineGroup;
-import org.apache.turbine.om.security.TurbinePermission;
-import org.apache.turbine.om.security.TurbineRole;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.BaseSecurityService;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An implementation of SecurityService that uses LDAP as a backend.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:tadewunmi@gluecode.com">Tracy M. Adewunmi </a>
- * @author <a href="mailto:lflournoy@gluecode.com">Leonard J. Flournoy </a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hhernandez@itweb.com.mx">Humberto Hernandez</a>
- * @version $Id$
- */
-public class LDAPSecurityService extends BaseSecurityService
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LDAPSecurityService.class);
-
-    /*
-     * -----------------------------------------------------------------------
-     *  C R E A T I O N  O F  A C C E S S  C O N T R O L  L I S T
-     * -----------------------------------------------------------------------
-     */
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * This method creates a snapshot of the state of security information
-     * concerning this user, at the moment of invocation and stores it
-     * into an AccessControlList object.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if user account is not present.
-     * @return an AccessControlList for a specific user.
-     */
-    public AccessControlList getACL(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        if (!TurbineSecurity.accountExists(user))
-        {
-            throw new UnknownEntityException("The account '"
-                    + user.getName() + "' does not exist");
-        }
-        try
-        {
-            Hashtable roles = new Hashtable();
-            Hashtable permissions = new Hashtable();
-
-            // notify the state modifiers (writers) that we want to create
-            // the snapshot.
-            lockShared();
-
-            // construct the snapshot:
-            // foreach group in the system
-            Iterator groupsIterator = getAllGroups().iterator();
-
-            while (groupsIterator.hasNext())
-            {
-                Group group = (Group) groupsIterator.next();
-
-                // get roles of user in the group
-                RoleSet groupRoles = getRoles(user, group);
-
-                // put the Set into roles(group)
-                roles.put(group, groupRoles);
-                // collect all permissoins in this group
-                PermissionSet groupPermissions = new PermissionSet();
-                // foreach role in Set
-                Iterator rolesIterator = groupRoles.iterator();
-
-                while (rolesIterator.hasNext())
-                {
-                    Role role = (Role) rolesIterator.next();
-                    // get permissions of the role
-                    PermissionSet rolePermissions = getPermissions(role);
-
-                    groupPermissions.add(rolePermissions);
-                }
-                // put the Set into permissions(group)
-                permissions.put(group, groupPermissions);
-            }
-            return getAclInstance(roles, permissions);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("Failed to build ACL for user '"
-                    + user.getName() + "'", e);
-        }
-        finally
-        {
-            // notify the state modifiers that we are done creating
-            // the snapshot.
-            unlockShared();
-        }
-    }
-
-    /*
-     * -----------------------------------------------------------------------
-     * S E C U R I T Y  M A N A G E M E N T
-     * -----------------------------------------------------------------------
-     */
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if user account, group or role
-     *         is not present.
-     */
-    public synchronized void grant(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String userName = user.getName();
-            String roleName = role.getName();
-            String groupName = group.getName();
-
-            if (!accountExists(user))
-            {
-                throw new UnknownEntityException(
-                        "User '" + userName + "' does not exist");
-            }
-
-            if (!checkExists(role))
-            {
-                throw new UnknownEntityException(
-                        "Role '" + roleName + "' does not exist");
-            }
-
-            if (!checkExists(group))
-            {
-                throw new UnknownEntityException(
-                        "Group '" + groupName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineGroupName=" + groupName + ","
-                    + LDAPSecurityConstants.getNameAttribute()
-                    + "=" + userName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("turbineRoleName", roleName));
-            attrs.put(new BasicAttribute("objectClass", "turbineUserGroup"));
-            attrs.put(new BasicAttribute("turbineUserUniqueId", userName));
-            try
-            {
-                // Add the turbineUserGroup.
-                ctx.bind(dn, null, attrs);
-            }
-            catch (NameAlreadyBoundException ex)
-            {
-                // Since turbineUserGroup had already been created
-                // then just add the role name attribute.
-                attrs = new BasicAttributes();
-                attrs.put(new BasicAttribute("turbineRoleName", roleName));
-                ctx.modifyAttributes(dn, DirContext.ADD_ATTRIBUTE, attrs);
-            }
-
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if user account, group or role is
-     *         not present.
-     */
-    public synchronized void revoke(User user, Group group, Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String userName = user.getName();
-            String roleName = role.getName();
-            String groupName = group.getName();
-
-            if (!accountExists(user))
-            {
-                throw new UnknownEntityException(
-                        "User '" + userName + "' does not exist");
-            }
-
-            if (!checkExists(role))
-            {
-                throw new UnknownEntityException(
-                        "Role '" + roleName + "' does not exist");
-            }
-
-            if (!checkExists(group))
-            {
-                throw new UnknownEntityException(
-                        "Group '" + groupName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineGroupName=" + groupName + ","
-                    + LDAPSecurityConstants.getNameAttribute()
-                    + "=" + userName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("turbineRoleName", roleName));
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Remove the role.
-            ctx.modifyAttributes(dn, DirContext.REMOVE_ATTRIBUTE, attrs);
-
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void grant(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String roleName = role.getName();
-            String permName = permission.getName();
-
-            if (!checkExists(role))
-            {
-                throw new UnknownEntityException(
-                        "Role '" + roleName + "' does not exist");
-            }
-
-            if (!checkExists(permission))
-            {
-                throw new UnknownEntityException(
-                        "Permission '" + permName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineRoleName=" + roleName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("turbinePermissionName", permName));
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Add the permission.
-            ctx.modifyAttributes(dn, DirContext.ADD_ATTRIBUTE, attrs);
-
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void revoke(Role role, Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String roleName = role.getName();
-            String permName = permission.getName();
-
-            if (!checkExists(role))
-            {
-                throw new UnknownEntityException(
-                        "Role '" + roleName + "' does not exist");
-            }
-
-            if (!checkExists(permission))
-            {
-                throw new UnknownEntityException(
-                        "Permission '" + permName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineRoleName=" + roleName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("turbinePermissionName", permName));
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Remove the permission.
-            ctx.modifyAttributes(dn, DirContext.REMOVE_ATTRIBUTE, attrs);
-
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /*
-     * -----------------------------------------------------------------------
-     * G R O U P / R O L E / P E R M I S S I O N  M A N A G E M E N T
-     * -----------------------------------------------------------------------
-     */
-
-    /**
-     * Retrieves a new Group. It creates
-     * a new Group based on the Services Group implementation. It does not
-     * create a new Group in the system though. Use addGroup for that.
-     * <strong>Not implemented</strong>
-     *
-     * @param groupName The name of the Group to be retrieved.
-     * @return a Group.
-     */
-    public Group getNewGroup(String groupName)
-    {
-        return (Group) new TurbineGroup(groupName);
-    }
-
-    /**
-     * Retrieves a new Role. It creates
-     * a new Role based on the Services Role implementation. It does not
-     * create a new Role in the system though. Use addRole for that.
-     * <strong>Not implemented</strong>
-     *
-     * @param roleName The name of the Group to be retrieved.
-     * @return a Role.
-     */
-    public Role getNewRole(String roleName)
-    {
-        return (Role) new TurbineRole(roleName);
-    }
-
-    /**
-     * Retrieves a new Permission. It creates
-     * a new Permission based on the Services Permission implementation. It
-     * does not create a new Permission in the system though. Use create for
-     * that.
-     * <strong>Not implemented</strong>
-     *
-     * @param permissionName The name of the Permission to be retrieved.
-     * @return a Permission
-     */
-    public Permission getNewPermission(String permissionName)
-    {
-        return (Permission) new TurbinePermission(permissionName);
-    }
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there is problem with the Backend.
-     */
-    public GroupSet getGroups(Criteria criteria)
-            throws DataBackendException
-    {
-        Vector groups = new Vector();
-
-        try
-        {
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            String baseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = "(objectclass=turbineGroup)";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer = ctx.search(baseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                Attribute attr = attribs.get("turbineGroupName");
-
-                if (attr != null && attr.get() != null)
-                {
-                    Group group = getNewGroup(attr.get().toString());
-
-                    groups.add(group);
-                }
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        return new GroupSet(groups);
-    }
-
-    /** Get the Roles that a user belongs in a specific group.
-     * @param user The user.
-     * @param group The group
-     * @throws DataBackendException if there is a problem with
-     *     the LDAP service.
-     * @return a RoleSet.
-     */
-    private RoleSet getRoles(User user, Group group)
-            throws DataBackendException
-    {
-        Vector roles = new Vector(0);
-
-        try
-        {
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            String baseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = "(& ";
-
-            filter += "(objectclass=turbineUserGroup)";
-            filter += "(turbineUserUniqueId=" + user.getName() + ")";
-            filter += "(turbineGroupName=" + group.getName() + ")";
-            filter += ")";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
-
-            NamingEnumeration answer = ctx.search(baseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                Attribute attr = attribs.get("turbineRoleName");
-
-                if (attr != null)
-                {
-                    NamingEnumeration values = attr.getAll();
-
-                    while (values.hasMore())
-                    {
-                        Role role = getNewRole(values.next().toString());
-
-                        roles.add(role);
-                    }
-                }
-                else
-                {
-                    log.error("Role doesn't have a name");
-                }
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "NamingException caught:", ex);
-        }
-
-        return new RoleSet(roles);
-    }
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there is a problem with the Backend.
-     */
-    public RoleSet getRoles(Criteria criteria) throws DataBackendException
-    {
-        Vector roles = new Vector(0);
-
-        try
-        {
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            String baseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = "(objectclass=turbineRole)";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer = ctx.search(baseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                Attribute attr = attribs.get("turbineRoleName");
-
-                if (attr != null && attr.get() != null)
-                {
-                    Role role = getNewRole(attr.get().toString());
-
-                    roles.add(role);
-                }
-                else
-                {
-                    log.error("Role doesn't have a name");
-                }
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-
-        return new RoleSet(roles);
-    }
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there is a problem with the Backend.
-     */
-    public PermissionSet getPermissions(Criteria criteria)
-            throws DataBackendException
-    {
-        Vector permissions = new Vector();
-
-        try
-        {
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            String baseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = "(objectClass=turbinePermission)";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer = ctx.search(baseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                Attribute attr = attribs.get("turbinePermissionName");
-
-                if (attr != null && attr.get() != null)
-                {
-                    Permission perm = getNewPermission(attr.get().toString());
-
-                    permissions.add(perm);
-                }
-                else
-                {
-                    log.error("Permission doesn't have a name");
-                }
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "The LDAP server specified is unavailable", ex);
-        }
-        return new PermissionSet(permissions);
-    }
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the role is not present.
-     * @return a PermissionSet.
-     */
-    public PermissionSet getPermissions(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        Hashtable permissions = new Hashtable();
-
-        try
-        {
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            String baseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = "(& ";
-
-            filter += "(objectClass=turbineRole)";
-            filter += "(turbineRoleName=" + role.getName() + ")";
-            filter += ")";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer = ctx.search(baseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                Attribute attr = attribs.get("turbinePermissionName");
-
-                if (attr != null)
-                {
-                    NamingEnumeration values = attr.getAll();
-
-                    while (values.hasMore())
-                    {
-                        String permName = values.next().toString();
-                        Permission perm = getNewPermission(permName);
-
-                        permissions.put(perm.getName(), perm);
-                    }
-                }
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "The LDAP server specified is unavailable", ex);
-        }
-        return new PermissionSet(permissions.values());
-    }
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public void saveGroup(Group group) throws DataBackendException,
-            UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public void saveRole(Role role) throws DataBackendException,
-            UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Stores Permission's attributes. The Permissions is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public void savePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Creates a new group with specified attributes.
-     * <strong>Not implemented</strong>
-     *
-     * @param group the object describing the group to be created.
-     * @return a new Group object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    public synchronized Group addGroup(Group group)
-            throws DataBackendException, EntityExistsException
-    {
-        try
-        {
-            lockExclusive();
-
-            String groupName = group.getName();
-
-            if (checkExists(group))
-            {
-                throw new EntityExistsException(
-                        "Group '" + groupName + "' already exists");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineGroupName=" + groupName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("objectClass", "turbineGroup"));
-            attrs.put(new BasicAttribute("turbineGroupName", groupName));
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Add the group in LDAP.
-            ctx.bind(dn, null, attrs);
-
-            // Add the group to system-wide cache.
-            getAllGroups().add(group);
-
-            return group;
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role the object describing the role to be created.
-     * @return a new Role object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    public synchronized Role addRole(Role role)
-            throws DataBackendException, EntityExistsException
-    {
-        try
-        {
-            lockExclusive();
-
-            String roleName = role.getName();
-
-            if (checkExists(role))
-            {
-                throw new EntityExistsException(
-                        "Role '" + roleName + "' already exists");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineRoleName=" + roleName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("objectClass", "turbineRole"));
-            attrs.put(new BasicAttribute("turbineRoleName", roleName));
-
-            // Connect to LDAP.
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Add the role in LDAP.
-            ctx.bind(dn, null, attrs);
-
-            // Add the role to system-wide cache.
-            getAllRoles().add(role);
-
-            return role;
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Creates a new permission with specified attributes.
-     * <strong>Not implemented</strong>
-     *
-     * @param permission the object describing the permission to be created.
-     * @return a new Permission object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    public synchronized Permission addPermission(Permission permission)
-            throws DataBackendException, EntityExistsException
-    {
-        try
-        {
-            lockExclusive();
-
-            String permName = permission.getName();
-
-            if (checkExists(permission))
-            {
-                throw new EntityExistsException(
-                        "Permission '" + permName + "' already exists");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbinePermissionName=" + permName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            // Make the attributes.
-            Attributes attrs = new BasicAttributes();
-
-            attrs.put(new BasicAttribute("objectClass", "turbinePermission"));
-            attrs.put(new BasicAttribute("turbinePermissionName", permName));
-
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Add the permission in LDAP.
-            ctx.bind(dn, null, attrs);
-
-            // add the permission to system-wide cache
-            getAllPermissions().add(permission);
-
-            return permission;
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group object describing group to be removed.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void removeGroup(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String groupName = group.getName();
-
-            if (!checkExists(group))
-            {
-                throw new UnknownEntityException(
-                        "Group '" + groupName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineGroupName=" + groupName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Remove the group from LDAP.
-            ctx.unbind(dn);
-
-            // Remove the group from system-wide cache.
-            getAllGroups().remove(group);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role object describing role to be removed.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void removeRole(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String roleName = role.getName();
-
-            if (!checkExists(role))
-            {
-                throw new UnknownEntityException(
-                        "Role '" + roleName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbineRoleName=" + roleName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Remove the role from LDAP.
-            ctx.unbind(dn);
-
-            // Remove the role from system-wide cache.
-            getAllRoles().remove(role);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission object describing permission to be removed.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void removePermission(Permission permission)
-            throws DataBackendException, UnknownEntityException
-    {
-        try
-        {
-            lockExclusive();
-
-            String permName = permission.getName();
-
-            if (!checkExists(permission))
-            {
-                throw new UnknownEntityException(
-                        "Permission '" + permName + "' does not exist");
-            }
-
-            // Make the distinguished name.
-            String dn = "turbinePermissionName=" + permName + ","
-                    + LDAPSecurityConstants.getBaseSearch();
-
-            DirContext ctx = LDAPUserManager.bindAsAdmin();
-
-            // Remove the permission in LDAP.
-            ctx.unbind(dn);
-
-            // Remove the permission from system-wide cache.
-            getAllPermissions().remove(permission);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-    }
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void renameGroup(Group group, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void renameRole(Role role, String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void renamePermission(Permission permission,
-                                              String name)
-            throws DataBackendException, UnknownEntityException
-    {
-        // Not implemented yet.
-    }
-
-    /**
-     * Revoke all the roles to a user
-     * @param user the user.
-     * @throws DataBackendException if there is an error with the data backend.
-     * @throws UnkownEntityException if the role or a permission is not found.
-     */
-    public void revokeAll(User user)
-            throws DataBackendException, UnknownEntityException
-    {
-        Iterator groupsIterator = getAllGroups().iterator();
-        while (groupsIterator.hasNext())
-        {
-            Group group = (Group) groupsIterator.next();
-            Iterator rolesIterator = getRoles(user, group).iterator();
-            while (rolesIterator.hasNext())
-            {
-                Role role = (Role) rolesIterator.next();
-                revoke(user, group, role);
-            }
-        }
-    }
-
-    /**
-     * Revoke all the permissions to a role.
-     * @param role the role.
-     * @throws DataBackendException if there is an error with the data backend.
-     * @throws UnkownEntityException if the role or a permission is not found.
-     */
-    public void revokeAll(Role role)
-            throws DataBackendException, UnknownEntityException
-    {
-        PermissionSet permissions = getPermissions(role);
-        Iterator permIterator = permissions.iterator();
-        while (permIterator.hasNext())
-        {
-            Permission perm = (Permission) permIterator.next();
-            revoke(role, perm);
-        }
-    }
-
-    /**
-     * Revoke all the roles to a group.
-     * @param group the group.
-     * @throws DataBackendException if there is an error with the data backend.
-     * @throws UnkownEntityException if the role or a permission is not found.
-     */
-    public void revokeAll(Group group)
-            throws DataBackendException, UnknownEntityException
-    {
-        for (Iterator it = getUserList(new Criteria()).iterator();
-             it.hasNext();)
-        {
-            User user = (User) it.next();
-            for (Iterator rolesIterator = getRoles(user, group).iterator();
-                 rolesIterator.hasNext();)
-            {
-                Role role = (Role) rolesIterator.next();
-                revoke(user, group, role);
-            }
-        }
-    }
-
-    /**
-     * Determines if the <code>Role</code> exists in the security system.
-     *
-     * @param role a <code>Role</code> value
-     * @return true if the role exists in the system, false otherwise
-     * @throws DataBackendException if there is an error with LDAP
-     */
-    public boolean checkExists(Role role)
-            throws DataBackendException
-    {
-        RoleSet roleSet = getRoles(new Criteria());
-
-        return roleSet.contains(role);
-    }
-
-    /**
-     * Determines if the <code>Group</code> exists in the security system.
-     *
-     * @param group a <code>Group</code> value
-     * @return true if the group exists in the system, false otherwise
-     * @throws DataBackendException if there is an error with LDAP
-     */
-    public boolean checkExists(Group group)
-            throws DataBackendException
-    {
-        GroupSet groupSet = getGroups(new Criteria());
-
-        return groupSet.contains(group);
-    }
-
-    /**
-     * Determines if the <code>Permission</code> exists in the security system.
-     *
-     * @param permission a <code>Permission</code> value
-     * @return true if the permission exists in the system, false otherwise
-     * @throws DataBackendException if there is an error with LDAP
-     */
-    public boolean checkExists(Permission permission)
-            throws DataBackendException
-    {
-        PermissionSet permissionSet = getPermissions(new Criteria());
-
-        return permissionSet.contains(permission);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/security/ldap/LDAPUser.java b/src/java/org/apache/turbine/services/security/ldap/LDAPUser.java
deleted file mode 100644
index 81245a5..0000000
--- a/src/java/org/apache/turbine/services/security/ldap/LDAPUser.java
+++ /dev/null
@@ -1,985 +0,0 @@
-package org.apache.turbine.services.security.ldap;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-import java.sql.Connection;
-import java.util.Hashtable;
-import javax.naming.NamingException;
-import javax.naming.directory.Attribute;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.BasicAttribute;
-import javax.naming.directory.BasicAttributes;
-import javax.servlet.http.HttpSessionBindingEvent;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.om.StringKey;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-/**
- * LDAPUser implements User and provides access to a user who accesses the
- * system via LDAP.
- *
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:tadewunmi@gluecode.com">Tracy M. Adewunmi</a>
- * @author <a href="mailto:lflournoy@gluecode.com">Leonard J. Flournoy </a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hhernandez@itweb.com.mx">Humberto Hernandez</a>
- */
-public class LDAPUser extends BaseObject implements User
-{
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(LDAPUser.class);
-
-    /* A few attributes common to a User. */
-
-    /** Date when the user was created */
-    private java.util.Date createDate = null;
-
-    /** Date when the user was last accessed */
-    private java.util.Date lastAccessDate = null;
-
-    /** timeout */
-    private int timeout = 15;
-
-    /** This is data that will survive a servlet engine restart. */
-    private Hashtable permStorage = null;
-
-    /** This is data that will not survive a servlet engine restart. */
-    private Hashtable tempStorage = null;
-
-    /**
-     * Constructor.
-     * Create a new User and set the createDate.
-     */
-    public LDAPUser()
-    {
-        createDate = new java.util.Date();
-        tempStorage = new Hashtable(10);
-        permStorage = new Hashtable(10);
-        setHasLoggedIn(new Boolean(false));
-    }
-
-    /**
-     * Populates the user with values obtained from the LDAP Service.
-     * This method could be redefined in subclasses.
-     * @param attribs The attributes obtained from LDAP.
-     * @throws NamingException if there was an error with JNDI.
-     */
-    public void setLDAPAttributes(Attributes attribs)
-            throws NamingException
-    {
-
-        Attribute attr;
-        String attrName;
-
-        // Set the User id.
-        attrName = LDAPSecurityConstants.getUserIdAttribute();
-        if (attrName != null)
-        {
-            attr = attribs.get(attrName);
-            if (attr != null && attr.get() != null)
-            {
-                try
-                {
-                    setPrimaryKey(new StringKey(attr.get().toString()));
-                }
-                catch (Exception ex)
-                {
-                    log.error("Exception caught:", ex);
-                }
-            }
-        }
-
-        // Set the Username.
-        attrName = LDAPSecurityConstants.getNameAttribute();
-        if (attrName != null)
-        {
-            attr = attribs.get(attrName);
-            if (attr != null && attr.get() != null)
-            {
-                setName(attr.get().toString());
-            }
-        }
-        else
-        {
-            log.error("There is no LDAP attribute for the username.");
-        }
-
-        // Set the Firstname.
-        attrName = LDAPSecurityConstants.getFirstNameAttribute();
-        if (attrName != null)
-        {
-            attr = attribs.get(attrName);
-            if (attr != null && attr.get() != null)
-            {
-                setFirstName(attr.get().toString());
-            }
-        }
-
-        // Set the Lastname.
-        attrName = LDAPSecurityConstants.getLastNameAttribute();
-        if (attrName != null)
-        {
-            attr = attribs.get(attrName);
-            if (attr != null && attr.get() != null)
-            {
-                setLastName(attr.get().toString());
-            }
-        }
-
-        // Set the E-Mail
-        attrName = LDAPSecurityConstants.getEmailAttribute();
-        if (attrName != null)
-        {
-            attr = attribs.get(attrName);
-            if (attr != null && attr.get() != null)
-            {
-                setEmail(attr.get().toString());
-            }
-        }
-    }
-
-    /**
-     * Get the JNDI Attributes used to store the user in LDAP.
-     * This method could be redefined in a subclass.
-     *
-     * @throws NamingException if there is a JNDI error.
-     * @return The JNDI attributes of the user.
-     */
-    public Attributes getLDAPAttributes()
-            throws NamingException
-    {
-        Attributes attribs = new BasicAttributes();
-        String attrName;
-
-        // Set the objectClass
-        attrName = "objectClass";
-        if (attrName != null)
-        {
-            Object value = "turbineUser";
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the User id.
-        attrName = LDAPSecurityConstants.getUserIdAttribute();
-        if (attrName != null)
-        {
-            Object value = getPrimaryKey();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the Username.
-        attrName = LDAPSecurityConstants.getNameAttribute();
-        if (attrName != null)
-        {
-            Object value = getName();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the Firstname.
-        attrName = LDAPSecurityConstants.getFirstNameAttribute();
-        if (attrName != null)
-        {
-            Object value = getFirstName();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the Lastname.
-        attrName = LDAPSecurityConstants.getLastNameAttribute();
-        if (attrName != null)
-        {
-            Object value = getLastName();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the E-Mail.
-        attrName = LDAPSecurityConstants.getEmailAttribute();
-        if (attrName != null)
-        {
-            Object value = getEmail();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        // Set the Password
-        attrName = LDAPSecurityConstants.getPasswordAttribute();
-        if (attrName != null)
-        {
-            Object value = getPassword();
-
-            if (value != null)
-            {
-                Attribute attr = new BasicAttribute(attrName, value);
-
-                attribs.put(attr);
-            }
-        }
-
-        return attribs;
-    }
-
-    /**
-     * Gets the distinguished name (DN) of the User.
-     * This method could be redefined in a subclass.
-     * @return The Distinguished Name of the user.
-     */
-    public String getDN()
-    {
-        String filterAttribute = LDAPSecurityConstants.getNameAttribute();
-        String userBaseSearch = LDAPSecurityConstants.getBaseSearch();
-        String userName = getName();
-
-        String dn = filterAttribute + "=" + userName + "," + userBaseSearch;
-
-        return dn;
-    }
-
-    /**
-     * Gets the access counter for a user during a session.
-     *
-     * @return The access counter for the user for the session.
-     */
-    public int getAccessCounterForSession()
-    {
-        try
-        {
-            return ((Integer) getTemp(User.SESSION_ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Gets the access counter for a user from perm storage.
-     *
-     * @return The access counter for the user.
-     */
-    public int getAccessCounter()
-    {
-        try
-        {
-            return ((Integer) getPerm(User.ACCESS_COUNTER)).intValue();
-        }
-        catch (Exception e)
-        {
-            return 0;
-        }
-    }
-
-    /**
-     * Gets the create date for this User.  This is the time at which
-     * the user object was created.
-     *
-     * @return A Java Date with the date of creation for the user.
-     */
-    public java.util.Date getCreateDate()
-    {
-        return createDate;
-    }
-
-    /**
-     * Returns the value of Confirmed variable
-     * @return the confirm value.
-     */
-    public String getConfirmed()
-    {
-        String tmp = null;
-
-        tmp = (String) getPerm(User.CONFIRM_VALUE);
-        if (tmp != null && tmp.length() == 0)
-        {
-            tmp = null;
-        }
-        return tmp;
-    }
-
-    /**
-     * Returns the Email for this user.  If this is defined, then
-     * the user is considered logged in.
-     *
-     * @return A String with the user's Email.
-     */
-    public String getEmail()
-    {
-        String tmp = null;
-
-        tmp = (String) getPerm(User.EMAIL);
-        if (tmp != null && tmp.length() == 0)
-        {
-            tmp = null;
-        }
-        return tmp;
-    }
-
-    /**
-     * Gets the last access date for this User.  This is the last time
-     * that the user object was referenced.
-     *
-     * @return A Java Date with the last access date for the user.
-     */
-    public java.util.Date getLastAccessDate()
-    {
-        if (lastAccessDate == null)
-        {
-            setLastAccessDate();
-        }
-        return lastAccessDate;
-    }
-
-    /**
-     * Get last login date/time for this user.
-     *
-     * @return A Java Date with the last login date for the user.
-     */
-    public java.util.Date getLastLogin()
-    {
-        return (java.util.Date) getPerm(User.LAST_LOGIN);
-    }
-
-    /**
-     * Get password for this user.
-     *
-     * @return A String with the password for the user.
-     */
-    public String getPassword()
-    {
-        return (String) getPerm(User.PASSWORD);
-    }
-
-    /**
-     * Get an object from permanent storage.
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    public Object getPerm(String name)
-    {
-        return permStorage.get(name);
-    }
-
-    /**
-     * Get an object from permanent storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getPerm(String name, Object def)
-    {
-        try
-        {
-            Object val = permStorage.get(name);
-
-            if (val == null)
-            {
-                return def;
-            }
-            return val;
-        }
-        catch (Exception e)
-        {
-            return def;
-        }
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getPermStorage()
-    {
-        if (this.permStorage == null)
-        {
-            this.permStorage = new Hashtable();
-        }
-        return this.permStorage;
-    }
-
-    /**
-     * Get an object from temporary storage.
-     *
-     * @param name The object's name.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name)
-    {
-        return tempStorage.get(name);
-    }
-
-    /**
-     * Get an object from temporary storage; return default if value
-     * is null.
-     *
-     * @param name The object's name.
-     * @param def A default value to return.
-     * @return An Object with the given name.
-     */
-    public Object getTemp(String name, Object def)
-    {
-        Object val;
-
-        try
-        {
-            val = tempStorage.get(name);
-            if (val == null)
-            {
-                val = def;
-            }
-        }
-        catch (Exception e)
-        {
-            val = def;
-        }
-        return val;
-    }
-
-    /**
-     * A User object can have a variable Timeout, which is defined in
-     * minutes.  If the user has been timed out, then the
-     * hasLoggedIn() value will return false.
-     *
-     * @return An int specifying the timeout.
-     */
-    public int getTimeout()
-    {
-        return this.timeout;
-    }
-
-
-    /**
-     * Returns the first name for this user.  If this is defined, then
-     * the user is considered logged in.
-     *
-     * @return A String with the user's first name.
-     */
-    public String getFirstName()
-    {
-        String tmp = null;
-
-        tmp = (String) getPerm(User.FIRST_NAME);
-        if (tmp != null && tmp.length() == 0)
-        {
-            tmp = null;
-        }
-        return tmp;
-    }
-
-    /**
-     * Returns the last name for this user.  If this is defined, then
-     * the user is considered logged in.
-     *
-     * @return A String with the user's last name.
-     */
-    public String getLastName()
-    {
-        String tmp = null;
-
-        tmp = (String) getPerm(User.LAST_NAME);
-        if (tmp != null && tmp.length() == 0)
-        {
-            tmp = null;
-        }
-        return tmp;
-    }
-
-    /**
-     * The user is considered logged in if they have not timed out.
-     *
-     * @return True if the user has logged in.
-     */
-    public boolean hasLoggedIn()
-    {
-        Boolean tmp = getHasLoggedIn();
-
-        if (tmp != null && tmp.booleanValue())
-        {
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * This method reports whether or not the user has been confirmed
-     * in the system by checking the <code>CONFIRM_VALUE</code>
-     * column to see if it is equal to <code>CONFIRM_DATA</code>.
-     *
-     * @return True if the user has been confirmed.
-     */
-    public boolean isConfirmed()
-    {
-        return ((String) getTemp(CONFIRM_VALUE, "")).equals(CONFIRM_DATA);
-    }
-
-    /**
-     * Increments the permanent hit counter for the user.
-     */
-    public void incrementAccessCounter()
-    {
-        setAccessCounter(getAccessCounter() + 1);
-    }
-
-    /**
-     * Increments the session hit counter for the user.
-     */
-    public void incrementAccessCounterForSession()
-    {
-        setAccessCounterForSession(getAccessCounterForSession() + 1);
-    }
-
-    /**
-     * Remove an object from temporary storage and return the object.
-     *
-     * @param name The name of the object to remove.
-     * @return An Object.
-     */
-    public Object removeTemp(String name)
-    {
-        return tempStorage.remove(name);
-    }
-
-    /**
-     * Sets the access counter for a user, saved in perm storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounter(int cnt)
-    {
-        setPerm(User.ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * Sets the session access counter for a user, saved in temp
-     * storage.
-     *
-     * @param cnt The new count.
-     */
-    public void setAccessCounterForSession(int cnt)
-    {
-        setTemp(User.SESSION_ACCESS_COUNTER, new Integer(cnt));
-    }
-
-    /**
-     * Set the users confirmed variable
-     *
-     * @param confirm The new confim value.
-     */
-    public void setConfirmed(String confirm)
-    {
-        getPerm(User.CONFIRM_VALUE, confirm);
-    }
-
-    /**
-     * Sets the last access date for this User. This is the last time
-     * that the user object was referenced.
-     */
-    public void setLastAccessDate()
-    {
-        lastAccessDate = new java.util.Date();
-    }
-
-    /**
-     * Sets the create date for this User. This is the time at which
-     * the user object was created.
-     *
-     * @param date The create date.
-     */
-    public void setCreateDate(java.util.Date date)
-    {
-        createDate = date;
-    }
-
-    /**
-     * Set the users Email
-     *
-     * @param email The new email.
-     */
-    public void setEmail(String email)
-    {
-        setPerm(User.EMAIL, email);
-    }
-
-    /**
-     * Set the users First Name
-     *
-     * @param fname The new firstname.
-     */
-    public void setFirstName(String fname)
-    {
-        setPerm(User.FIRST_NAME, fname);
-    }
-
-    /**
-     * Set last login date/time.
-     *
-     * @param date The last login date.
-     */
-    public void setLastLogin(java.util.Date date)
-    {
-        setPerm(User.LAST_LOGIN, date);
-    }
-
-    /**
-     * Set the users Last Name
-     * Sets the last name for this user.
-     *
-     * @param lname The new lastname.
-     */
-    public void setLastName(String lname)
-    {
-        setPerm(User.LAST_NAME, lname);
-    }
-
-    /**
-     * Set password.
-     *
-     * @param password The new password.
-     */
-    public void setPassword(String password)
-    {
-        setPerm(User.PASSWORD, password);
-    }
-
-    /**
-     * Put an object into permanent storage.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setPerm(String name, Object value)
-    {
-        permStorage.put(name, value);
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param stuff A Hashtable.
-     */
-    public void setPermStorage(Hashtable stuff)
-    {
-        this.permStorage = stuff;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @return A Hashtable.
-     */
-    public Hashtable getTempStorage()
-    {
-        if (this.tempStorage == null)
-        {
-            this.tempStorage = new Hashtable();
-        }
-        return this.tempStorage;
-    }
-
-    /**
-     * This should only be used in the case where we want to save the
-     * data to the database.
-     *
-     * @param storage A Hashtable.
-     */
-    public void setTempStorage(Hashtable storage)
-    {
-        this.tempStorage = storage;
-    }
-
-    /**
-     * This gets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value as a boolean.  This is private because you
-     * should use hasLoggedIn() instead.
-     *
-     * @return True if someone has logged in.
-     */
-    private Boolean getHasLoggedIn()
-    {
-        return (Boolean) getTemp(User.HAS_LOGGED_IN);
-    }
-
-    /**
-     * This sets whether or not someone has logged in.  hasLoggedIn()
-     * returns this value.
-     *
-     * @param value Whether someone has logged in or not.
-     */
-    public void setHasLoggedIn(Boolean value)
-    {
-        setTemp(User.HAS_LOGGED_IN, value);
-    }
-
-    /**
-     * Put an object into temporary storage.
-     *
-     * @param name The object's name.
-     * @param value The object.
-     */
-    public void setTemp(String name, Object value)
-    {
-        tempStorage.put(name, value);
-    }
-
-    /**
-     * A User object can have a variable Timeout which is defined in
-     * minutes.  If the user has been timed out, then the
-     * hasLoggedIn() value will return false.
-     *
-     * @param time The user's timeout.
-     */
-    public void setTimeout(int time)
-    {
-        this.timeout = time;
-    }
-
-
-
-    /**
-     * Updates the last login date in the database.
-     *
-     * @exception Exception a generic exception.
-     */
-    public void updateLastLogin() throws Exception
-    {
-        setPerm(User.LAST_LOGIN, new java.util.Date());
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Bound to the session.
-     *
-     * @param hsbe The HttpSessionBindingEvent.
-     */
-    public void valueBound(HttpSessionBindingEvent hsbe)
-    {
-        // Do not currently need this method.
-    }
-
-    /**
-     * Implement this method if you wish to be notified when the User
-     * has been Unbound from the session.
-     *
-     * @param hsbe The HttpSessionBindingEvent.
-     */
-    public void valueUnbound(HttpSessionBindingEvent hsbe)
-    {
-        try
-        {
-            if (hasLoggedIn())
-            {
-                TurbineSecurity.saveUser(this);
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("BaseUser.valueUnbobund(): "
-                    + e.getMessage());
-            log.error(e);
-
-            // To prevent messages being lost in case the logging system
-            // goes away before sessions get unbound on servlet container
-            // shutdown, print the stcktrace to the container's console.
-            ByteArrayOutputStream ostr = new ByteArrayOutputStream();
-
-            e.printStackTrace(new PrintWriter(ostr, true));
-            String stackTrace = ostr.toString();
-
-            System.out.println(stackTrace);
-        }
-    }
-
-    /**
-     * Returns the username for this user.  If this is defined, then
-     * the user is considered logged in.
-     *
-     * @return A String with the username.
-     */
-    public String getName()
-    {
-        String tmp = null;
-
-        tmp = (String) getPerm(User.USERNAME);
-        if (tmp != null && tmp.length() == 0)
-        {
-            tmp = null;
-        }
-        return tmp;
-    }
-
-    /**
-     * Set the users name.
-     * @param name the name of the User.
-     */
-    public void setName(String name)
-    {
-		setPerm(User.USERNAME, name);
-    }
-
-    /**
-     * Not implemented.
-     * @return 0
-     */
-    public int getId()
-    {
-        return 0;
-    }
-            
-    /**
-     * Not implemented.
-     * @return null
-     */
-    public Integer getIdAsObj()
-    {
-        return new Integer(0);
-    }
-
-    /**
-     * Not implemented.
-     *
-     * @param id The id of the User.
-     */
-    public void setId(int id)
-    {
-    }
-
-    /**
-     * Saves this object to the data store.
-     * @throws Exception if it cannot be saved
-     */
-    public void save()
-            throws Exception
-    {
-        if (TurbineSecurity.accountExists(this))
-        {
-            TurbineSecurity.saveUser(this);
-        }
-        else
-        {
-            TurbineSecurity.addUser(this, getPassword());
-        }
-    }
-
-    /**
-     * not implemented
-     *
-     * @param conn the database connection
-     * @throws Exception if there is an error
-     */
-    public void save(Connection conn) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-    /**
-     * not implemented
-     *
-     * @param dbname the database name
-     * @throws Exception if there is an error
-     */
-    public void save(String dbname) throws Exception
-    {
-        throw new Exception("not implemented");
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/security/ldap/LDAPUserManager.java b/src/java/org/apache/turbine/services/security/ldap/LDAPUserManager.java
deleted file mode 100644
index 63a7604..0000000
--- a/src/java/org/apache/turbine/services/security/ldap/LDAPUserManager.java
+++ /dev/null
@@ -1,587 +0,0 @@
-package org.apache.turbine.services.security.ldap;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.Hashtable;
-import java.util.Vector;
-
-import javax.naming.AuthenticationException;
-import javax.naming.Context;
-import javax.naming.NamingEnumeration;
-import javax.naming.NamingException;
-import javax.naming.directory.Attributes;
-import javax.naming.directory.DirContext;
-import javax.naming.directory.SearchControls;
-import javax.naming.directory.SearchResult;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.security.UserManager;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * A UserManager performs {@link org.apache.turbine.om.security.User}
- * object related tasks on behalf of the
- * {@link org.apache.turbine.services.security.SecurityService}.
- *
- * This implementation uses ldap for retrieving user data. It
- * expects that the User interface implementation will be castable to
- * {@link org.apache.turbine.om.BaseObject}.
- *
- * @author <a href="mailto:jon@collab.net">Jon S. Stevens</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:cberry@gluecode.com">Craig D. Berry</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:tadewunmi@gluecode.com">Tracy M. Adewunmi</a>
- * @author <a href="mailto:lflournoy@gluecode.com">Leonard J. Flournoy</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hhernandez@itweb.com.mx">Humberto Hernandez</a>
- * @version $Id$
- */
-public class LDAPUserManager implements UserManager
-{
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     */
-    public void init(Configuration conf)
-    {
-        // GNDN
-    }
-
-    /**
-     * Check wether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException Error accessing the data backend.
-     */
-    public boolean accountExists(User user) throws DataBackendException
-    {
-        return accountExists(user.getName());
-    }
-
-    /**
-     *
-     * Check wether a specified user's account exists.
-     * The login name is used for looking up the account.
-     *
-     * @param username The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException Error accessing the data backend.
-     */
-    public boolean accountExists(String username)
-            throws DataBackendException
-    {
-        try
-        {
-            User ldapUser = retrieve(username);
-        }
-        catch (UnknownEntityException ex)
-        {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param username the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException Error accessing the data backend.
-     */
-    public User retrieve(String username)
-            throws UnknownEntityException, DataBackendException
-    {
-        try
-        {
-            DirContext ctx = bindAsAdmin();
-
-            /*
-             * Define the search.
-             */
-            String userBaseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = LDAPSecurityConstants.getNameAttribute();
-
-            filter = "(" + filter + "=" + username + ")";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer =
-                    ctx.search(userBaseSearch, filter, ctls);
-
-            if (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                LDAPUser ldapUser = createLDAPUser();
-
-                ldapUser.setLDAPAttributes(attribs);
-                ldapUser.setTemp("turbine.user", ldapUser);
-
-                return ldapUser;
-            }
-            else
-            {
-                throw new UnknownEntityException("The given user: "
-                        + username + "\n does not exist.");
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "The LDAP server specified is unavailable", ex);
-        }
-    }
-
-    /**
-     * This is currently not implemented to behave as expected.  It
-     * ignores the Criteria argument and returns all the users.
-     *
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException Error accessing the data backend.
-     * @deprecated Use <a href="#retrieveList">retrieveList</a> instead.
-     */
-    public User[] retrieve(Criteria criteria)
-            throws DataBackendException
-    {
-        return (User []) retrieveList(criteria).toArray(new User[0]);
-    }
-
-    /**
-     * Retrieve a list of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of Torque implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List retrieveList(Criteria criteria)
-            throws DataBackendException
-    {
-        List users = new Vector(0);
-
-        try
-        {
-            DirContext ctx = bindAsAdmin();
-
-            String userBaseSearch = LDAPSecurityConstants.getBaseSearch();
-            String filter = LDAPSecurityConstants.getNameAttribute();
-
-            filter = "(" + filter + "=*)";
-
-            /*
-             * Create the default search controls.
-             */
-            SearchControls ctls = new SearchControls();
-
-            NamingEnumeration answer =
-                    ctx.search(userBaseSearch, filter, ctls);
-
-            while (answer.hasMore())
-            {
-                SearchResult sr = (SearchResult) answer.next();
-                Attributes attribs = sr.getAttributes();
-                LDAPUser ldapUser = createLDAPUser();
-
-                ldapUser.setLDAPAttributes(attribs);
-                ldapUser.setTemp("turbine.user", ldapUser);
-                users.add(ldapUser);
-            }
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "The LDAP server specified is unavailable", ex);
-        }
-        return users;
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param username the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException Error accessing the data backend.
-     */
-    public User retrieve(String username, String password)
-            throws PasswordMismatchException,
-            UnknownEntityException, DataBackendException
-    {
-        User user = retrieve(username);
-
-        authenticate(user, password);
-        return user;
-    }
-
-    /**
-     * Save a User object to persistent storage. User's account is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @throws UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @throws DataBackendException if there is an LDAP error
-     *
-     */
-    public void store(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '"
-                    + user.getName() + "' does not exist");
-        }
-
-        try
-        {
-            LDAPUser ldapUser = (LDAPUser) user;
-            Attributes attrs = ldapUser.getLDAPAttributes();
-            String name = ldapUser.getDN();
-
-            DirContext ctx = bindAsAdmin();
-
-            ctx.modifyAttributes(name, DirContext.REPLACE_ATTRIBUTE, attrs);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-    }
-
-    /**
-     * This method is not yet implemented.
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '" +
-                    user.getName() + "' does not exist");
-        }
-    }
-
-    /**
-     * Authenticate a User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user a User object to authenticate.
-     * @param password the user supplied password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException Error accessing the data backend.
-     */
-    public void authenticate(User user, String password)
-            throws PasswordMismatchException,
-            UnknownEntityException,
-            DataBackendException
-    {
-        LDAPUser ldapUser = (LDAPUser) user;
-
-        try
-        {
-            bind(ldapUser.getDN(), password);
-        }
-        catch (AuthenticationException ex)
-        {
-            throw new PasswordMismatchException(
-                    "The given password for: "
-                    + ldapUser.getDN() + " is invalid\n");
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException(
-                    "NamingException caught:", ex);
-        }
-    }
-
-    /**
-     * This method is not yet implemented
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param newPass the new password.
-     * @param oldPass the old password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException Error accessing the data backend.
-     */
-    public void changePassword(User user, String oldPass, String newPass)
-            throws PasswordMismatchException,
-            UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException(
-                "The method changePassword has no implementation.");
-    }
-
-    /**
-     * This method is not yet implemented
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed to be used by the administrator to change the forgotten
-     * or compromised passwords. Certain implementatations of this feature
-     * would require adminstrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException Error accessing the data backend.
-     */
-    public void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException(
-                "The method forcePassword has no implementation.");
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param initialPassword Not used yet.
-     * @throws DataBackendException Error accessing the data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void createAccount(User user, String initialPassword)
-            throws EntityExistsException, DataBackendException
-    {
-        if (accountExists(user))
-        {
-            throw new EntityExistsException("The account '"
-                    + user.getName() + "' already exist");
-        }
-
-        try
-        {
-            LDAPUser ldapUser = (LDAPUser) user;
-            Attributes attrs = ldapUser.getLDAPAttributes();
-            String name = ldapUser.getDN();
-
-            DirContext ctx = bindAsAdmin();
-
-            ctx.bind(name, null, attrs);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException Error accessing the data backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeAccount(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        if (!accountExists(user))
-        {
-            throw new UnknownEntityException("The account '"
-                    + user.getName() + "' does not exist");
-        }
-
-        try
-        {
-            LDAPUser ldapUser = (LDAPUser) user;
-            String name = ldapUser.getDN();
-
-            DirContext ctx = bindAsAdmin();
-
-            ctx.unbind(name);
-        }
-        catch (NamingException ex)
-        {
-            throw new DataBackendException("NamingException caught", ex);
-        }
-    }
-
-    /**
-     * Bind as the admin user.
-     *
-     * @throws NamingException when an error occurs with the named server.
-     * @return a new DirContext.
-     */
-    public static DirContext bindAsAdmin()
-            throws NamingException
-    {
-        String adminUser = LDAPSecurityConstants.getAdminUsername();
-        String adminPassword = LDAPSecurityConstants.getAdminPassword();
-
-        return bind(adminUser, adminPassword);
-    }
-
-    /**
-     * Creates an initial context.
-     *
-     * @param username admin username supplied in TRP.
-     * @param password admin password supplied in TRP
-     * @throws NamingException when an error occurs with the named server.
-     * @return a new DirContext.
-     */
-    public static DirContext bind(String username, String password)
-            throws NamingException
-    {
-        String host = LDAPSecurityConstants.getLDAPHost();
-        String port = LDAPSecurityConstants.getLDAPPort();
-        String providerURL = new String("ldap://" + host + ":" + port);
-        String ldapProvider = LDAPSecurityConstants.getLDAPProvider();
-        String authentication = LDAPSecurityConstants.getLDAPAuthentication();
-
-        /*
-         * creating an initial context using Sun's client
-         * LDAP Provider.
-         */
-        Hashtable env = new Hashtable();
-
-        env.put(Context.INITIAL_CONTEXT_FACTORY, ldapProvider);
-        env.put(Context.PROVIDER_URL, providerURL);
-        env.put(Context.SECURITY_AUTHENTICATION, authentication);
-        env.put(Context.SECURITY_PRINCIPAL, username);
-        env.put(Context.SECURITY_CREDENTIALS, password);
-
-        DirContext ctx = new javax.naming.directory.InitialDirContext(env);
-
-        return ctx;
-    }
-
-    /**
-     * Create a new instance of the LDAP User according to the value
-     * configured in TurbineResources.properties.
-     * @return a new instance of the LDAP User.
-     * @throws DataBackendException if there is an error creating the
-     */
-    private LDAPUser createLDAPUser()
-            throws DataBackendException
-    {
-        try
-        {
-            return (LDAPUser) TurbineSecurity.getUserInstance();
-        }
-        catch (ClassCastException ex)
-        {
-            throw new DataBackendException("ClassCastException:", ex);
-        }
-        catch (UnknownEntityException ex)
-        {
-            throw new DataBackendException("UnknownEntityException:", ex);
-        }
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/security/ldap/package.html b/src/java/org/apache/turbine/services/security/ldap/package.html
deleted file mode 100644
index e54bee5..0000000
--- a/src/java/org/apache/turbine/services/security/ldap/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-An LDAP based security service implementation.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/security/package.html b/src/java/org/apache/turbine/services/security/package.html
deleted file mode 100644
index fa7b4cf..0000000
--- a/src/java/org/apache/turbine/services/security/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The security service can be used to authenticate users based on database information.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/security/passive/PassiveUserManager.java b/src/java/org/apache/turbine/services/security/passive/PassiveUserManager.java
deleted file mode 100644
index 2dd0efd..0000000
--- a/src/java/org/apache/turbine/services/security/passive/PassiveUserManager.java
+++ /dev/null
@@ -1,329 +0,0 @@
-package org.apache.turbine.services.security.passive;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.UserManager;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * Void user manager can be used where no data storage is needed
- * by the application.
- * It's methods don't provide any useful functionality  except throwing
- * DataBackendExceptions. Security service will be still able to create
- * anonymous User objects when this UserManager is used.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PassiveUserManager implements UserManager
-{
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     */
-    public void init(Configuration conf)
-    {
-        // GNDN
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data backend.
-     */
-    public boolean accountExists(User user)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data backend.
-     */
-    public boolean accountExists(String userName)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param username the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String username)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     * @deprecated Use <a href="#retrieveList">retrieveList</a> instead.
-     */
-    public User[] retrieve(Criteria criteria)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List retrieveList(Criteria criteria)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param username the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String username, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Save an User object to persistent storage. User's record is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void store(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support saving user data");
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support saving user data");
-    }
-
-    /**
-     * Authenticate an User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user an User object to authenticate.
-     * @param password the user supplied password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void authenticate(User user, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param initialPassword The password to use for the object creation
-     *
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void createAccount(User user, String initialPassword)
-            throws EntityExistsException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support"
-                + " creating accounts");
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeAccount(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support removing accounts");
-    }
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password supplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void changePassword(User user, String oldPassword,
-                               String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support setting passwords");
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support setting passwords");
-    }
-}
diff --git a/src/java/org/apache/turbine/services/security/passive/package.html b/src/java/org/apache/turbine/services/security/passive/package.html
deleted file mode 100644
index 11f2d52..0000000
--- a/src/java/org/apache/turbine/services/security/passive/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Dummy Service to be used if no security is required.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/servlet/ServletService.java b/src/java/org/apache/turbine/services/servlet/ServletService.java
deleted file mode 100644
index 1ad62fb..0000000
--- a/src/java/org/apache/turbine/services/servlet/ServletService.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package org.apache.turbine.services.servlet;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-import java.net.URL;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.turbine.services.Service;
-
-/**
- * <p>This interface exposes methods of the runner context in order
- * resolve or get access to external resources</p>
- *
- * @author <a href="mailto:ekkerbj@netscape.net">Jeff Brekke</a>
- * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @version $Id$
- */
-public interface ServletService extends Service
-{
-    /**
-     * The service identifier
-     */
-    String SERVICE_NAME = "ServletService";
-
-    /**
-     * Returns an URL object for a given URI string.
-     *
-     * @param uri the URI to resolve as an URL
-     * @return an URL object or null is the uri is malformed or
-     * can't be resolved
-     */
-    URL getResource(String uri);
-
-    /**
-     * Same as getResource except that it returns an InputStream
-     *
-     * @param uri the URI to resolve
-     * @return an InputStream on the URI content or null
-     */
-    InputStream getResourceAsStream(String uri);
-
-    /**
-     * Returns the complete filesystem path for a
-     * given URI
-     *
-     * @param uri the URI to resolve
-     * @return the full system path of this URI
-     */
-    String getRealPath(String uri);
-
-    /**
-     * Returns the servlet config used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet config
-     */
-    ServletConfig getServletConfig();
-
-    /**
-     * Returns the servlet context used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet context
-     */
-    ServletContext getServletContext();
-
-    /**
-     * Returns the server scheme for this
-     * Turbine application. This will either
-     * be http or https.
-     *
-     * @return String
-     */
-    String getServerScheme();
-
-    /**
-     * Returns the server name that this
-     * Turbine application is running
-     * on.
-     *
-     * @return String
-     */
-    String getServerName();
-
-    /**
-     * Returns the port that this Turbine
-     * application is running through
-     * on the server.
-     *
-     * @return String
-     */
-    String getServerPort();
-
-    /**
-     * Returns the context path for this
-     * Turbine application.
-     *
-     * @return String
-     */
-    String getContextPath();
-}
diff --git a/src/java/org/apache/turbine/services/servlet/TurbineServlet.java b/src/java/org/apache/turbine/services/servlet/TurbineServlet.java
deleted file mode 100644
index 96f355b..0000000
--- a/src/java/org/apache/turbine/services/servlet/TurbineServlet.java
+++ /dev/null
@@ -1,192 +0,0 @@
-package org.apache.turbine.services.servlet;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-import java.net.URL;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * Simple static accessor to the EngineContextService
- *
- * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
- * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
- * @author <a href="mailto:ekkerbj@netscape.net">Jeff Brekke</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @version $Id$
- */
-public class TurbineServlet
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a ServletService implementation instance
-     */
-    protected static ServletService getService()
-    {
-        return (ServletService) TurbineServices
-                .getInstance().getService(ServletService.SERVICE_NAME);
-    }
-
-    /**
-     * Returns an URL object for a given URI string.
-     * This URI is considered relative to the context.
-     *
-     * @param uri the URI to resolve as an URL
-     * @return an URL object or null is the uri is malformed or can't be resolved
-     */
-    public static URL getResource(String uri)
-    {
-        return getService().getResource(uri);
-    }
-
-    /**
-     * Same as getResource except that it returns an InputStream
-     *
-     * @see javax.servlet.ServletContext#getResourceAsStream
-     * @param uri the URI to resolve
-     * @return an InputStream on the URI content or null
-     */
-    public static InputStream getResourceAsStream(String uri)
-    {
-        return getService().getResourceAsStream(uri);
-    }
-
-    /**
-     * Returns the complete filesystem path for a
-     * given URI
-     *
-     * @see javax.servlet.ServletContext#getRealPath
-     * @param uri the URI to resolve
-     * @return the full system path of this URI
-     */
-    public static String getRealPath(String path)
-    {
-        return getService().getRealPath(path);
-    }
-
-    /**
-     * Returns the servlet config used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet config
-     */
-    public static ServletConfig getServletConfig()
-    {
-        return getService().getServletConfig();
-    }
-
-    /**
-     * Returns the servlet context used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet context
-     */
-    public static ServletContext getServletContext()
-    {
-        return getService().getServletContext();
-    }
-
-    /**
-     * Returns the server scheme for this
-     * Turbine application. This will either
-     * be http or https.
-     *
-     * @return String
-     */
-    public static String getServerScheme()
-    {
-        return getService().getServerScheme();
-    }
-
-    /**
-     * Returns the server name that this
-     * Turbine application is running
-     * on.
-     *
-     * @return String
-     */
-    public static String getServerName()
-    {
-        return getService().getServerName();
-    }
-
-    /**
-     * Returns the port that this Turbine
-     * application is running through
-     * on the server.
-     *
-     * @return String
-     */
-    public static String getServerPort()
-    {
-        return getService().getServerPort();
-    }
-
-    /**
-     * Returns the context path for this
-     * Turbine application.
-     *
-     * @return String
-     */
-    public static String getContextPath()
-    {
-        return getService().getContextPath();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/servlet/TurbineServletService.java b/src/java/org/apache/turbine/services/servlet/TurbineServletService.java
deleted file mode 100644
index 8b9b7cb..0000000
--- a/src/java/org/apache/turbine/services/servlet/TurbineServletService.java
+++ /dev/null
@@ -1,288 +0,0 @@
-package org.apache.turbine.services.servlet;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.ServletUtils;
-
-/**
- * <p>This class provides a context service when the application
- * is run in a ServletContainer. It is mainly a wrapper around
- * the ServletContext API.</p>
- * <p>This class requires Servlet API 2.1 or better.</p>
- *
- * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
- * @author <a href="mailto:raphael@apache.org">Raphaël Luta</a>
- * @author <a href="mailto:ekkerbj@netscape.net">Jeff Brekke</a>
- * @author <a href="mailto:sgala@hisitech.com">Santiago Gala</a>
- * @author <a href="mailto:jvanzyl@periapt.com.com">Jason van Zyl</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @version $Id$
- */
-public class TurbineServletService
-        extends TurbineBaseService implements ServletService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineServletService.class);
-
-    /** The servlet context for this servlet */
-    private ServletContext servletContext = null;
-
-    /** The servlet configuration for this servlet */
-    private ServletConfig servletConfig = null;
-
-    /**
-     * Load all configured components and initialize them. This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     */
-    public void init()
-    {
-        this.servletConfig = Turbine.getTurbineServletConfig();
-        try
-        {
-            this.servletContext = servletConfig.getServletContext();
-
-            log.debug("Initializing with ServletConfig");
-        }
-        catch (Exception e)
-        {
-            log.error("Cannot initialize TurbineServletService.", e);
-        }
-        setInit(true);
-    }
-
-    /**
-     * Called during Turbine.init()
-     *
-     * @param servletConfig A ServletConfig.
-     *
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig servletConfig)
-    {
-        init();
-    }
-
-    /**
-     * Returns an URL object for a given URI string.
-     * This URI is considered relative to the context.
-     *
-     * @see javax.servlet.ServletContext#getResource
-     * @param uri the URI to resolve as an URL
-     * @return an URL object or null is the uri is malformed or
-     * can't be resolved
-     */
-    public URL getResource(String uri)
-    {
-        if (servletContext == null)
-        {
-            return null;
-        }
-
-        URL url = null;
-
-        try
-        {
-            url = getServletContext().getResource(uri);
-            // work-around for Websphere 3.52
-            if (url != null && url.toString().startsWith("classloader:"))
-            {
-                url = new URL("file:" + url.toString().substring(12));
-            }
-            else if (url == null)
-            {
-                url = new URL("file:" + getServletContext().getRealPath(uri));
-            }
-        }
-        catch (MalformedURLException e)
-        {
-            //if the URL is wrong, return null
-        }
-
-        return url;
-    }
-
-    /**
-     * Same as getResource except that it returns an InputStream
-     *
-     * @see javax.servlet.ServletContext#getResourceAsStream
-     * @param uri the URI to resolve
-     * @return an InputStream on the URI content or null
-     */
-    public InputStream getResourceAsStream(String uri)
-    {
-        if (servletContext == null)
-        {
-            return null;
-        }
-
-        InputStream is = null;
-        is = servletContext.getResourceAsStream(uri);
-        return is;
-    }
-
-    /**
-     * Returns the complete filesystem path for a
-     * given URI
-     *
-     * @see javax.servlet.ServletContext#getRealPath
-     * @param uri the URI to resolve
-     * @return the full system path of this URI
-     */
-    public String getRealPath(String uri)
-    {
-        if (getServletContext() == null || uri == null)
-        {
-            return null;
-        }
-        else
-        {
-            return getServletContext().getRealPath(uri);
-        }
-    }
-
-    /**
-     * Returns the servlet config used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet config
-     */
-    public ServletConfig getServletConfig()
-    {
-        return servletConfig;
-    }
-
-    /**
-     * Returns the servlet context used by this
-     * Turbine web application.
-     *
-     * @return turbine servlet context
-     */
-    public ServletContext getServletContext()
-    {
-        return servletContext;
-    }
-
-    /**
-     * Returns the server scheme for this
-     * Turbine application. This will either
-     * be http or https.
-     *
-     * @return String
-     */
-    public String getServerScheme()
-    {
-        return Turbine.getServerScheme();
-    }
-
-    /**
-     * Returns the server name that this
-     * Turbine application is running
-     * on.
-     *
-     * @return String
-     */
-    public String getServerName()
-    {
-        return Turbine.getServerName();
-    }
-
-    /**
-     * Returns the port that this Turbine
-     * application is running through
-     * on the server.
-     *
-     * @return String
-     */
-    public String getServerPort()
-    {
-        return Turbine.getServerPort();
-    }
-
-    /**
-     * Returns the context path for this
-     * Turbine application.
-     *
-     * @return String
-     */
-    public String getContextPath()
-    {
-        return Turbine.getContextPath();
-    }
-
-    /**
-     * Expands a string that points to a relative path or path list,
-     * leaving it as an absolute path based on the servlet context.
-     * It will return null if the text is empty or the config object
-     * is null.
-     *
-     * @param path The String containing a path or path list.
-     * @return A String with the expanded path or path list.
-     */
-    public String expandRelative(String path)
-    {
-        return ServletUtils.expandRelative(getServletConfig(), path);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/servlet/package.html b/src/java/org/apache/turbine/services/servlet/package.html
deleted file mode 100644
index 9ae9723..0000000
--- a/src/java/org/apache/turbine/services/servlet/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Provides access to various resources from the web container.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/session/SessionListener.java b/src/java/org/apache/turbine/services/session/SessionListener.java
deleted file mode 100644
index ea683f3..0000000
--- a/src/java/org/apache/turbine/services/session/SessionListener.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package org.apache.turbine.services.session;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-import javax.servlet.http.HttpSessionActivationListener;
-import javax.servlet.http.HttpSessionEvent;
-import javax.servlet.http.HttpSessionListener;
-
-/**
- * This class is a listener for both session creation and destruction,
- * and for session activation and passivation.  It must be configured
- * via your web application's <code>web.xml</code> deployment
- * descriptor as follows for the container to call it:
- *
- * <blockquote><code><pre>
- * &lt;listener&gt;
- *   &lt;listener-class&gt;
- *     org.apache.turbine.session.SessionListener
- *   &lt;/listener-class&gt;
- * &lt;/listener&gt;
- * </pre></code></blockquote>
- *
- * <code>&lt;listener&gt;</code> elemements can occur between
- * <code>&lt;context-param&gt;</code> and <code>&lt;servlet&gt;</code>
- * elements in your deployment descriptor.
- *
- * The {@link #sessionCreated(HttpSessionEvent)} callback will
- * automatically add an instance of this listener to any newly created
- * <code>HttpSession</code> for detection of session passivation and
- * re-activation.
- *
- * @since 2.3
- * @version $Id$
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:dlr@apache.org">Daniel Rall</a>
- * @see javax.servlet.http.HttpSessionListener
- */
-public class SessionListener
-        implements HttpSessionListener, HttpSessionActivationListener, Serializable
-{
-    // ---- HttpSessionListener implementation -----------------------------
-
-    /**
-     * Called by the servlet container when a new session is created
-     *
-     * @param event Session creation event.
-     */
-    public void sessionCreated(HttpSessionEvent event)
-    {
-        TurbineSession.addSession(event.getSession());
-        event.getSession().setAttribute(getClass().getName(), this);
-    }
-
-    /**
-     * Called by the servlet container when a session is destroyed
-     *
-     * @param event Session destruction event.
-     */
-    public void sessionDestroyed(HttpSessionEvent event)
-    {
-        TurbineSession.removeSession(event.getSession());
-    }
-
-
-    // ---- HttpSessionActivationListener implementation -------------------
-
-    /**
-     * Called by the servlet container when an existing session is
-     * (re-)activated.
-     *
-     * @param event Session activation event.
-     */
-    public void sessionDidActivate(HttpSessionEvent event)
-    {
-        TurbineSession.addSession(event.getSession());
-    }
-
-    /**
-     * Called by the servlet container when a an existing session is
-     * passivated.
-     *
-     * @param event Session passivation event.
-     */
-    public void sessionWillPassivate(HttpSessionEvent event)
-    {
-        TurbineSession.removeSession(event.getSession());
-    }
-}
diff --git a/src/java/org/apache/turbine/services/session/SessionService.java b/src/java/org/apache/turbine/services/session/SessionService.java
deleted file mode 100644
index 05f8b81..0000000
--- a/src/java/org/apache/turbine/services/session/SessionService.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.apache.turbine.services.session;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.Service;
-
-/**
- * The SessionService allows access to the current sessions of the current context.
- * The session objects that are cached by this service are obtained through
- * a listener.  The listener must be configured in your web.xml file.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @since 2.3
- * @see org.apache.turbine.services.session.SessionListener
- * @version $Id$
- */
-public interface SessionService extends Service
-{
-
-    /**
-     * The key under which this service is stored in TurbineServices.
-     */
-    static final String SERVICE_NAME = "SessionService";
-
-    /**
-     * Gets all active sessions
-     *
-     * @return Collection of HttpSession objects
-     */
-    Collection getActiveSessions();
-
-    /**
-     * Adds a session to the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to add
-     */
-    void addSession(HttpSession session);
-
-    /**
-     * Removes a session from the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to remove
-     */
-    void removeSession(HttpSession session);
-
-    /**
-     * Determines if a given user is currently logged in.  The actual
-     * implementation of the User object must implement the equals()
-     * method.  By default, Torque based objects (liek TurbineUser)
-     * have an implementation of equals() that will compare the
-     * result of getPrimaryKey().
-     *
-     * @param user User to check for
-     * @return true if the user is logged in on one of the
-     * active sessions.
-     */
-    boolean isUserLoggedIn(User user);
-
-    /**
-     * Gets a collection of all user objects representing the users currently
-     * logged in.  This will exclude any instances of anonymous user that
-     * Turbine will use before the user actually logs on.
-     *
-     * @return collection of org.apache.turbine.om.security.User objects
-     */
-    Collection getActiveUsers();
-
-    /**
-     * Gets the User object of the the specified HttpSession.
-     *
-     * @param session The session from which to extract a user.
-     * @return The Turbine User object.
-     */
-    User getUserFromSession(HttpSession session);
-
-    /**
-     * Gets the HttpSession by the session identifier
-     *
-     * @param sessionId The unique session identifier.
-     * @return The session keyed by the specified identifier.
-     */
-    HttpSession getSession(String sessionId);
-
-    /**
-     * Get a collection of all session on which the given user
-     * is logged in.
-     *
-     * @param user the user
-     * @return Collection of HtttSession objects
-     */
-    Collection getSessionsForUser(User user);
-
-}
diff --git a/src/java/org/apache/turbine/services/session/SessionTool.java b/src/java/org/apache/turbine/services/session/SessionTool.java
deleted file mode 100644
index 5bd5e7d..0000000
--- a/src/java/org/apache/turbine/services/session/SessionTool.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package org.apache.turbine.services.session;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.pull.ApplicationTool;
-
-/**
- * A pull tool for accessing the SessionService from a velocity template.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class SessionTool
-        implements ApplicationTool
-{
-    public void init(Object o)
-    {
-    }
-
-    public void refresh()
-    {
-    }
-
-    /**
-     * Gets a list of the active sessions
-     *
-     * @return List of HttpSession objects
-     */
-    public Collection getActiveSessions()
-    {
-        return TurbineSession.getActiveSessions();
-    }
-
-    /**
-     * Adds a session to the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to add
-     */
-    public void addSession(HttpSession session)
-    {
-        TurbineSession.addSession(session);
-    }
-
-    /**
-     * Removes a session from the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to remove
-     */
-    public void removeSession(HttpSession session)
-    {
-        TurbineSession.removeSession(session);
-    }
-
-    /**
-     * Determines if a given user is currently logged in.  The actual
-     * implementation of the User object must implement the equals()
-     * method.  By default, Torque based objects (liek TurbineUser)
-     * have an implementation of equals() that will compare the
-     * result of getPrimaryKey().
-     *
-     * @param user User to check for
-     * @return true if the user is logged in on one of the
-     * active sessions.
-     */
-    public boolean isUserLoggedIn(User user)
-    {
-        return TurbineSession.isUserLoggedIn(user);
-    }
-
-    /**
-     * Gets a collection of all user objects representing the users currently
-     * logged in.  This will exclude any instances of anonymous user that
-     * Turbine will use before the user actually logs on.
-     *
-     * @return collection of org.apache.turbine.om.security.User objects
-     */
-    public Collection getActiveUsers()
-    {
-        return TurbineSession.getActiveUsers();
-    }
-
-    /**
-     * Gets the User object of the the specified HttpSession.
-     *
-     * @param session
-     * @return
-     */
-    public User getUserFromSession(HttpSession session)
-    {
-        return TurbineSession.getUserFromSession(session);
-    }
-
-    /**
-     * Get a collection of all session on which the given user
-     * is logged in.
-     *
-     * @param user the user
-     * @return Collection of HtttSession objects
-     */
-    public Collection getSessionsForUser(User user)
-    {
-        return TurbineSession.getSessionsForUser(user);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/session/TurbineSession.java b/src/java/org/apache/turbine/services/session/TurbineSession.java
deleted file mode 100644
index 29a232b..0000000
--- a/src/java/org/apache/turbine/services/session/TurbineSession.java
+++ /dev/null
@@ -1,179 +0,0 @@
-package org.apache.turbine.services.session;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * This is a conveience class provided to allow access to the SessionService
- * through static methods.  The SessionService should ALWAYS be accessed
- * through this class.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- * @see org.apache.turbine.services.session.SessionService
- */
-public abstract class TurbineSession
-{
-    /**
-     * Gets a list of the active sessions
-     *
-     * @return List of HttpSession objects
-     */
-    public static Collection getActiveSessions()
-    {
-        return getService().getActiveSessions();
-    }
-
-    /**
-     * Adds a session to the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to add
-     */
-    public static void addSession(HttpSession session)
-    {
-        getService().addSession(session);
-    }
-
-    /**
-     * Removes a session from the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to remove
-     */
-    public static void removeSession(HttpSession session)
-    {
-        getService().removeSession(session);
-    }
-
-    /**
-     * Determines if a given user is currently logged in.  The actual
-     * implementation of the User object must implement the equals()
-     * method.  By default, Torque based objects (liek TurbineUser)
-     * have an implementation of equals() that will compare the
-     * result of getPrimaryKey().
-     *
-     * @param user User to check for
-     * @return true if the user is logged in on one of the
-     * active sessions.
-     */
-    public static boolean isUserLoggedIn(User user)
-    {
-        return getService().isUserLoggedIn(user);
-    }
-
-    /**
-     * Gets a collection of all user objects representing the users currently
-     * logged in.  This will exclude any instances of anonymous user that
-     * Turbine will use before the user actually logs on.
-     *
-     * @return collection of org.apache.turbine.om.security.User objects
-     */
-    public static Collection getActiveUsers()
-    {
-        return getService().getActiveUsers();
-    }
-
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a IntakeService implementation instance
-     */
-    private static SessionService getService()
-    {
-        return (SessionService) TurbineServices
-                .getInstance().getService(SessionService.SERVICE_NAME);
-    }
-
-    /**
-     * Gets the User object of the the specified HttpSession.
-     *
-     * @param session
-     * @return
-     */
-    public static User getUserFromSession(HttpSession session)
-    {
-        return getService().getUserFromSession(session);
-    }
-
-    /**
-     * Gets the HttpSession by the session identifier
-     *
-     * @param sessionId
-     * @return
-     */
-    public static HttpSession getSession(String sessionId)
-    {
-        return getService().getSession(sessionId);
-    }
-
-    /**
-     * Get a collection of all session on which the given user
-     * is logged in.
-     *
-     * @param user the user
-     * @return Collection of HtttSession objects
-     */
-    public static Collection getSessionsForUser(User user)
-    {
-        return getService().getSessionsForUser(user);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/session/TurbineSessionService.java b/src/java/org/apache/turbine/services/session/TurbineSessionService.java
deleted file mode 100644
index 09e4f3c..0000000
--- a/src/java/org/apache/turbine/services/session/TurbineSessionService.java
+++ /dev/null
@@ -1,248 +0,0 @@
-package org.apache.turbine.services.session;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-import javax.servlet.http.HttpSession;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * The SessionService allows thread-safe access to the current
- * sessions of the current context.  The session objects that are
- * cached by this service are obtained through a listener, which must
- * be configured via your web application's <code>web.xml</code>
- * deployement descriptor as follows:
- *
- * <blockquote><code><pre>
- * &lt;listener&gt;
- *   &lt;listener-class&gt;
- *     org.apache.turbine.session.SessionListener
- *   &lt;/listener-class&gt;
- * &lt;/listener&gt;
- * </pre></code></blockquote>
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @since 2.3
- * @version $Id$
- * @see org.apache.turbine.services.session.TurbineSession
- * @see org.apache.turbine.services.session.SessionListener
- */
-public class TurbineSessionService
-        extends TurbineBaseService
-        implements SessionService
-{
-    /** Map of active sessions */
-    private Map activeSessions;
-
-    /**
-     * Gets a list of the active sessions.
-     *
-     * @return A copy of the list of <code>HttpSession</code> objects.
-     */
-    public Collection getActiveSessions()
-    {
-        // Sync externally to allow ArrayList's ctor to iterate
-        // activeSessions' values in a thread-safe fashion.
-        synchronized (activeSessions)
-        {
-            return new ArrayList(activeSessions.values());
-        }
-    }
-
-    /**
-     * Adds a session to the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to add
-     */
-    public void addSession(HttpSession session)
-    {
-        activeSessions.put(session.getId(), session);
-    }
-
-    /**
-     * Removes a session from the current list.  This method should only be
-     * called by the listener.
-     *
-     * @param session Session to remove
-     */
-    public void removeSession(HttpSession session)
-    {
-        activeSessions.remove(session.getId());
-    }
-
-    /**
-     * Determines if a given user is currently logged in.  The actual
-     * implementation of the User object must implement the equals()
-     * method.  By default, Torque based objects (liek TurbineUser)
-     * have an implementation of equals() that will compare the
-     * result of getPrimaryKey().
-     *
-     * @param user User to check for
-     * @return true if the user is logged in on one of the
-     * active sessions.
-     */
-    public boolean isUserLoggedIn(User user)
-    {
-        return getActiveUsers().contains(user);
-    }
-
-    /**
-     * Gets a collection of all user objects representing the users currently
-     * logged in.  This will exclude any instances of anonymous user that
-     * Turbine will use before the user actually logs on.
-     *
-     * @return A set of {@link org.apache.turbine.om.security.User} objects.
-     */
-    public Collection getActiveUsers()
-    {
-        Collection users;
-        synchronized (activeSessions)
-        {
-            // Pre-allocate a list which won't need expansion more
-            // than once.
-            users = new ArrayList((int) (activeSessions.size() * 0.7));
-            for (Iterator i = activeSessions.values().iterator(); i.hasNext();)
-            {
-                User u = getUserFromSession((HttpSession) i.next());
-                if (u != null && u.hasLoggedIn())
-                {
-                    users.add(u);
-                }
-            }
-        }
-
-        return users;
-    }
-
-    /**
-     * Gets the User object of the the specified HttpSession.
-     *
-     * @param session The session from which to extract a user.
-     * @return The Turbine User object.
-     */
-    public User getUserFromSession(HttpSession session)
-    {
-        return (User) session.getAttribute(User.SESSION_KEY);
-    }
-
-    /**
-     * Gets the HttpSession by the session identifier
-     *
-     * @param sessionId The unique session identifier.
-     * @return The session keyed by the specified identifier.
-     */
-    public HttpSession getSession(String sessionId)
-    {
-        return (HttpSession) this.activeSessions.get(sessionId);
-    }
-
-    /**
-     * Get a collection of all session on which the given user
-     * is logged in.
-     *
-     * @param user the user
-     * @return Collection of HtttSession objects
-     */
-    public Collection getSessionsForUser(User user)
-    {
-        Collection sessions = new ArrayList();
-        synchronized (activeSessions)
-        {
-            for (Iterator i = activeSessions.values().iterator(); i.hasNext();)
-            {
-                HttpSession session = (HttpSession) i.next();
-                User u = this.getUserFromSession(session);
-                if (user.equals(u))
-                {
-                    sessions.add(session);
-                }
-            }
-        }
-
-        return sessions;
-    }
-
-
-    // ---- Service initilization ------------------------------------------
-
-    /**
-     * Initializes the service
-     */
-    public void init()
-    {
-        this.activeSessions = new Hashtable();
-
-        setInit(true);
-    }
-
-    /**
-     * Returns to uninitialized state.
-     */
-    public void shutdown()
-    {
-        this.activeSessions = null;
-
-        setInit(false);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/session/package.html b/src/java/org/apache/turbine/services/session/package.html
deleted file mode 100644
index a7b79c0..0000000
--- a/src/java/org/apache/turbine/services/session/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The session service allows you to access session information of the servlet container.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java b/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
deleted file mode 100644
index 893f66b..0000000
--- a/src/java/org/apache/turbine/services/template/BaseTemplateEngineService.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.TurbineBaseService;
-
-/**
- * The base implementation of Turbine {@link
- * org.apache.turbine.services.template.TemplateEngineService}.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @version $Id$
- */
-public abstract class BaseTemplateEngineService
-    extends TurbineBaseService
-    implements TemplateEngineService
-{
-    /**
-     * A Map containing the configuration for the template
-     * engine service. The configuration contains:
-     *
-     * 1) template extensions
-     * 2) default page
-     * 3) default screen
-     * 4) default layout
-     * 5) default navigation
-     * 6) default error screen
-     */
-    private Hashtable configuration = new Hashtable();
-
-    /**
-     * @see org.apache.turbine.services.template.TemplateEngineService#registerConfiguration
-     */
-    public void registerConfiguration(String defaultExt)
-    {
-        initConfiguration(defaultExt);
-        TurbineTemplate.registerTemplateEngineService(this);
-    }
-
-    /**
-     * @see org.apache.turbine.services.template.TemplateEngineService#getTemplateEngineServiceConfiguration
-     */
-    public Hashtable getTemplateEngineServiceConfiguration()
-    {
-        return configuration;
-    }
-
-    /**
-     * @see org.apache.turbine.services.template.TemplateEngineService#getAssociatedFileExtensions
-     */
-    public String[] getAssociatedFileExtensions()
-    {
-        return (String[]) configuration.get(TEMPLATE_EXTENSIONS);
-    }
-
-    /**
-     * Initialize the Template Engine Service.
-     *
-     * Note engine file extension associations.  First attempts to
-     * pull a list of custom extensions from the property file value
-     * keyed by <code>template.extension</code>.  If none are defined,
-     * uses the value keyed by
-     * <code>template.default.extension</code>, defaulting to the
-     * emergency value supplied by <code>defaultExt</code>.
-     *
-     * @param defaultExt The default used when the default defined in the
-     *                   properties file is missing or misconfigured.
-     */
-    protected void initConfiguration(String defaultExt)
-    {
-        Configuration config = getConfiguration();
-
-        //
-        // Should modify the configuration class to take defaults
-        // here, should have to do this.
-        //
-        String[] fileExtensionAssociations =
-                config.getStringArray(TEMPLATE_EXTENSIONS);
-
-        if (fileExtensionAssociations == null ||
-            fileExtensionAssociations.length == 0)
-        {
-            fileExtensionAssociations = new String[1];
-            fileExtensionAssociations[0] = config.getString(
-                    DEFAULT_TEMPLATE_EXTENSION, defaultExt);
-        }
-
-        configuration.put(TEMPLATE_EXTENSIONS, fileExtensionAssociations);
-
-        /*
-         * We need some better error checking here and should probably
-         * throw an exception here if these things aren't set
-         * up correctly.
-         */
-
-        String[] copyParams = {
-            DEFAULT_PAGE,
-            DEFAULT_SCREEN,
-            DEFAULT_LAYOUT,
-            DEFAULT_NAVIGATION,
-            DEFAULT_ERROR_SCREEN,
-            DEFAULT_LAYOUT_TEMPLATE,
-            DEFAULT_SCREEN_TEMPLATE
-        };
-
-        for (int i = 0; i < copyParams.length; i++)
-        {
-            configuration.put(copyParams[i], config.getString(copyParams[i], ""));
-        }
-    }
-
-    /**
-     * @see org.apache.turbine.services.template.TemplateEngineService#templateExists
-     */
-    public abstract boolean templateExists(String template);
-}
diff --git a/src/java/org/apache/turbine/services/template/TemplateEngineService.java b/src/java/org/apache/turbine/services/template/TemplateEngineService.java
deleted file mode 100644
index f197425..0000000
--- a/src/java/org/apache/turbine/services/template/TemplateEngineService.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-
-/**
- * This is the interface that all template engine services must adhere
- * to. This includes the Velocity, WebMacro, FreeMarker, and JSP
- * services.
- *
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$ */
-public interface TemplateEngineService
-{
-    static final String TEMPLATE_EXTENSIONS = "template.extension";
-    static final String DEFAULT_TEMPLATE_EXTENSION = "template.default.extension";
-    static final String DEFAULT_PAGE = "default.page";
-    static final String DEFAULT_SCREEN = "default.screen";
-    static final String DEFAULT_LAYOUT = "default.layout";
-    static final String DEFAULT_NAVIGATION = "default.navigation";
-    static final String DEFAULT_ERROR_SCREEN = "default.error.screen";
-    static final String DEFAULT_LAYOUT_TEMPLATE = "default.layout.template";
-    static final String DEFAULT_SCREEN_TEMPLATE = "default.screen.template";
-    static final String DEFAULT_NAVIGATION_TEMPLATE = "default.navigation.template";
-
-    /**
-     * Return the configuration of the template engine in
-     * the form of a Hashtable.
-     */
-    Hashtable getTemplateEngineServiceConfiguration();
-
-    /**
-     * Initializes file extension associations and registers with the
-     * template service.
-     *
-     * @param defaultExt The default file extension association to use
-     *                   in case of properties file misconfiguration.
-     */
-    void registerConfiguration(String defaultExt);
-
-    /**
-     * Supplies the file extension to key this engine in {@link
-     * org.apache.turbine.services.template.TemplateService}'s
-     * registry with.
-     */
-    String[] getAssociatedFileExtensions();
-
-    /**
-     * Use the specific template engine to determine whether
-     * a given template exists. This allows Turbine the TemplateService
-     * to delegate the search for a template to the template
-     * engine being used for the view. This gives us the
-     * advantage of fully utilizing the capabilities of
-     * template engine with respect to retrieving templates
-     * from arbitrary sources.
-     *
-     * @param template The name of the template to check the existance of.
-     * @return         Whether the specified template exists.
-     */
-    boolean templateExists(String template);
-}
diff --git a/src/java/org/apache/turbine/services/template/TemplateService.java b/src/java/org/apache/turbine/services/template/TemplateService.java
deleted file mode 100644
index 7debf0b..0000000
--- a/src/java/org/apache/turbine/services/template/TemplateService.java
+++ /dev/null
@@ -1,349 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * This service provides a method for mapping templates to their
- * appropriate Screens or Navigations.  It also allows templates to
- * define a layout/navigations/screen modularization within the
- * template structure.  It also performs caching if turned on in the
- * properties file.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface TemplateService
-    extends Service
-{
-    /**
-     * The key under which this service is stored in TurbineServices.
-     */
-    static final String SERVICE_NAME = "TemplateService";
-
-    /** Default Template Name. */
-    String DEFAULT_TEMPLATE_KEY = "default.template";
-
-    /** Default value for the Template Name */
-    String DEFAULT_TEMPLATE_VALUE = "Default";
-
-    /** Default Extension for the template names. */
-    String DEFAULT_EXTENSION_KEY = "default.extension";
-
-    /** Default value of the Turbine Module Caching */
-    String DEFAULT_EXTENSION_VALUE = "";
-
-    /** Character that separates a Template Name from the Extension */
-    char EXTENSION_SEPARATOR = '.';
-
-    /** Character that separates the various Template Parts */
-    char TEMPLATE_PARTS_SEPARATOR = ',';
-
-    /** "Default" name for Classes and Templates */
-    String DEFAULT_NAME = "Default";
-
-    /**
-     * Returns true if the Template Service has caching activated
-     *
-     * @return true if Caching is active.
-     */
-    boolean isCaching();
-
-    /**
-     * Get the default template name extension specified
-     * in the template service properties.
-     *
-     * @return The default the extension.
-     */
-    String getDefaultExtension();
-
-    /**
-     * Return Extension for a supplied template
-     *
-     * @param template The template name
-     *
-     * @return extension The extension for the supplied template
-     */
-    String getExtension(String template);
-
-    /**
-     * Returns the Default Template Name with the Default Extension.
-     * If the extension is unset, return only the template name
-     *
-     * @return The default template Name
-     */
-    String getDefaultTemplate();
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default page module name.
-     */
-    String getDefaultPage();
-
-    /**
-     * Get the default screen module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default screen module name.
-     */
-    String getDefaultScreen();
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default layout module name.
-     */
-    String getDefaultLayout();
-
-    /**
-     * Get the default navigation module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default navigation module name.
-     */
-    String getDefaultNavigation();
-
-    /**
-     * Get the default layout template name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default layout template name.
-     */
-    String getDefaultLayoutTemplate();
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default page module name.
-     */
-    String getDefaultPageName(String template);
-
-    /**
-     * Get the default screen module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default screen module name.
-     */
-    String getDefaultScreenName(String template);
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout module name.
-     */
-    String getDefaultLayoutName(String template);
-
-    /**
-     * Get the default navigation module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default navigation module name.
-     */
-    String getDefaultNavigationName(String template);
-
-    /**
-     * Get the default layout template name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout template name.
-     */
-    String getDefaultLayoutTemplateName(String template);
-
-    /**
-     * Find the default page module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default page for.
-     * @return The default page module name.
-     */
-    String getDefaultPageName(RunData data);
-
-    /**
-     * Find the default layout module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default layout for.
-     * @return The default layout module name.
-     */
-    String getDefaultLayoutName(RunData data);
-
-    /**
-     * Locate and return the name of the screen module to be used
-     * with the named screen template.
-     *
-     * @param template The screen template name.
-     * @return The found screen module name.
-     * @exception Exception, a generic exception.
-     */
-    String getScreenName(String template)
-            throws Exception;
-
-    /**
-     * Locate and return the name of the layout module to be used
-     * with the named layout template.
-     *
-     * @param template The layout template name.
-     * @return The found layout module name.
-     * @exception Exception, a generic exception.
-     */
-    String getLayoutName(String template)
-            throws Exception;
-
-    /**
-     * Locate and return the name of the navigation module to be used
-     * with the named navigation template.
-     *
-     * @param template The navigation template name.
-     * @return The found navigation module name.
-     * @exception Exception, a generic exception.
-     */
-    String getNavigationName(String name)
-            throws Exception;
-
-    /**
-     * Locate and return the name of the screen template corresponding
-     * to the given template name parameter.
-     *
-     * @param template The template name parameter.
-     * @return The found screen template name.
-     * @exception Exception, a generic exception.
-     */
-    String getScreenTemplateName(String template)
-            throws Exception;
-
-    /**
-     * Locate and return the name of the layout template corresponding
-     * to the given screen template name parameter.
-     *
-     * @param template The template name parameter.
-     * @return The found screen template name.
-     * @exception Exception, a generic exception.
-     */
-    String getLayoutTemplateName(String template)
-            throws Exception;
-
-    /**
-     * Locate and return the name of the navigation template corresponding
-     * to the given template name parameter.
-     *
-     * @param template The template name parameter.
-     * @return The found navigation template name.
-     * @exception Exception, a generic exception.
-     */
-    String getNavigationTemplateName(String template)
-            throws Exception;
-
-    /**
-     * Translates the supplied template paths into their Turbine-canonical
-     * equivalent (probably absolute paths).
-     *
-     * @param templatePaths An array of template paths.
-     * @return An array of translated template paths.
-     * @deprecated Each template engine service should know how to translate
-     *             a request onto a file. 
-     */
-    String[] translateTemplatePaths(String[] templatePaths);
-
-    /**
-     * Delegates to the appropriate {@link
-     * org.apache.turbine.services.template.TemplateEngineService} to
-     * check the existance of the specified template.
-     *
-     * @param template      The template to check for the existance of.
-     * @param templatePaths The paths to check for the template.
-     * @deprecated Use templateExists from the various Templating Engines
-     */
-    boolean templateExists(String template,
-                           String[] templatePaths);
-
-
-    /**
-     * The {@link org.apache.turbine.services.template.TemplateEngineService}
-     * associated with the specified template's file extension.
-     *
-     * @param template The template name.
-     * @return The template engine service.
-     */
-    TemplateEngineService getTemplateEngineService(String template);
-
-    /**
-     * Registers the provided template engine for use by the
-     * <code>TemplateService</code>.
-     *
-     * @param service The <code>TemplateEngineService</code> to register.
-     */
-    void registerTemplateEngineService(TemplateEngineService service);
-}
diff --git a/src/java/org/apache/turbine/services/template/TurbineTemplate.java b/src/java/org/apache/turbine/services/template/TurbineTemplate.java
deleted file mode 100644
index 140bcbd..0000000
--- a/src/java/org/apache/turbine/services/template/TurbineTemplate.java
+++ /dev/null
@@ -1,399 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * This is a simple static accessor to common TemplateService tasks such as
- * getting a Screen that is associated with a screen template.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @version $Id$
- */
-public abstract class TurbineTemplate
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a TemplateService implementation instance
-     */
-    public static TemplateService getService()
-    {
-        return (TemplateService) TurbineServices
-            .getInstance().getService(TemplateService.SERVICE_NAME);
-    }
-
-    /**
-     * Returns true if the Template Service has caching activated
-     *
-     * @return true if Caching is active.
-     */
-    public static final boolean isCaching()
-    {
-        return getService().isCaching();
-    }
-
-    /**
-     * Get the default extension given in the properties file.
-     *
-     * @return A String with the extension.
-     */
-    public static final String getDefaultExtension()
-    {
-        return getService().getDefaultExtension();
-    }
-
-    /**
-     * Return Extension for a supplied template
-     *
-     * @param template The template name
-     *
-     * @return extension The extension for the supplied template
-     */
-    public static final String getExtension(String template)
-    {
-        return getService().getExtension(template);
-    }
-
-    /**
-     * Returns the Default Template Name with the Default Extension.
-     * If the extension is unset, return only the template name
-     *
-     * @return The default template Name
-     */
-    public static final String getDefaultTemplate()
-    {
-        return getService().getDefaultTemplate();
-    }
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default page module name.
-     */
-    public static final String getDefaultPage()
-    {
-        return getService().getDefaultPage();
-    }
-
-    /**
-     * Get the Screen template given in the properties file.
-     *
-     * @return A String which is the value of the TemplateService
-     * default.screen property.
-     */
-    public static final String getDefaultScreen()
-    {
-        return getService().getDefaultScreen();
-    }
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default layout module name.
-     */
-    public static final String getDefaultLayout()
-    {
-        return getService().getDefaultLayout();
-    }
-
-    /**
-     * Get the default Navigation given in the properties file.
-     *
-     * @return A String which is the value of the TemplateService
-     * default.navigation property.
-     */
-    public static final String getDefaultNavigation()
-    {
-        return getService().getDefaultNavigation();
-    }
-
-    /**
-     * Get the default layout template given in the properties file.
-     *
-     * @return A String which is the value of the TemplateService
-     * default.layout.template property.
-     */
-    public static final String getDefaultLayoutTemplate()
-    {
-        return getService().getDefaultLayoutTemplate();
-    }
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default page module name.
-     */
-    public static final String getDefaultPageName(String template)
-    {
-        return getService().getDefaultPageName(template);
-    }
-
-    /**
-     * Get the default screen module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default screen module name.
-     */
-    public static final String getDefaultScreenName(String template)
-    {
-        return getService().getDefaultScreenName(template);
-    }
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout module name.
-     */
-    public static final String getDefaultLayoutName(String template)
-    {
-        return getService().getDefaultLayoutName(template);
-    }
-
-    /**
-     * Get the default navigation module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default navigation module name.
-     */
-    public static final String getDefaultNavigationName(String template)
-    {
-        return getService().getDefaultNavigationName(template);
-    }
-
-    /**
-     * Get the default layout template name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout template name.
-     */
-    public static final String getDefaultLayoutTemplateName(String template)
-    {
-        return getService().getDefaultLayoutTemplateName(template);
-    }
-
-    /**
-     * Find the default page module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default page for.
-     * @return The default page module name.
-     */
-    public static final String getDefaultPageName(RunData data)
-    {
-        return getService().getDefaultPageName(data);
-    }
-
-    /**
-     * Find the default layout module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default layout for.
-     * @return The default layout module name.
-     */
-    public static final String getDefaultLayoutName(RunData data)
-    {
-        return getService().getDefaultLayoutName(data);
-    }
-
-    /**
-     * Locate and return the name of a Screen module.
-     *
-     * @param name A String with the name of the template.
-     * @return A String with the name of the screen.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getScreenName(String name)
-        throws Exception
-    {
-        return getService().getScreenName(name);
-    }
-
-    /**
-     * Locate and return the name of the layout module to be used
-     * with the named layout template.
-     *
-     * @param template The layout template name.
-     * @return The found layout module name.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getLayoutName(String template)
-        throws Exception
-    {
-        return getService().getLayoutName(template);
-    }
-
-    /**
-     * Locate and return the name of the navigation module to be used
-     * with the named navigation template.
-     *
-     * @param template The navigation template name.
-     * @return The found navigation module name.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getNavigationName(String template)
-        throws Exception
-    {
-        return getService().getNavigationName(template);
-    }
-
-    /**
-     * Locate and return the name of a screen template.
-     *
-     * @param key A String which is the key to the template.
-     * @return A String with the screen template path.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getScreenTemplateName(String key)
-        throws Exception
-    {
-        return getService().getScreenTemplateName(key);
-    }
-
-    /**
-     * Locate and return the name of a layout template.
-     *
-     * @param name A String with the name of the template.
-     * @return A String with the layout template path.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getLayoutTemplateName(String name)
-        throws Exception
-    {
-        return getService().getLayoutTemplateName(name);
-    }
-
-    /**
-     * Locate and return the name of a navigation template.
-     *
-     * @param key A String which is the key to the template.
-     * @return A String with the navigation template path.
-     * @exception Exception, a generic exception.
-     */
-    public static final String getNavigationTemplateName(String key)
-        throws Exception
-    {
-        return getService().getNavigationTemplateName(key);
-    }
-
-    /**
-     * Translates the supplied template paths into their Turbine-canonical
-     * equivalent (probably absolute paths).
-     *
-     * @param templatePaths An array of template paths.
-     * @return An array of translated template paths.
-     * @deprecated Each template engine service should know how to translate
-     *             a request onto a file. 
-     */
-    public static final String[] translateTemplatePaths(String[] templatePaths)
-    {
-        return getService().translateTemplatePaths(templatePaths);
-    }
-
-    /**
-     * Delegates to the appropriate {@link
-     * org.apache.turbine.services.template.TemplateEngineService} to
-     * check the existance of the specified template.
-     *
-     * @param template The template to check for the existance of.
-     * @param templatePaths The paths to check for the template.
-     * @deprecated Use templateExists from the various Templating Engines
-     */
-    public static final boolean templateExists(String template, String[] templatePaths)
-    {
-        return getService().templateExists(template, templatePaths);
-    }
-
-    /**
-     * Registers the provided template engine for use by the
-     * <code>TemplateService</code>.
-     *
-     * @param service The <code>TemplateEngineService</code> to register.
-     */
-    public static final void registerTemplateEngineService(TemplateEngineService service)
-    {
-        getService().registerTemplateEngineService(service);
-    }
-
-    /**
-     * The {@link org.apache.turbine.services.template.TemplateEngineService}
-     * associated with the specified template's file extension.
-     *
-     * @param template The template name.
-     * @return The template engine service.
-     */
-    public static final TemplateEngineService getTemplateEngineService(String template)
-    {
-        return getService().getTemplateEngineService(template);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/TurbineTemplateService.java b/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
deleted file mode 100644
index 2f256d4..0000000
--- a/src/java/org/apache/turbine/services/template/TurbineTemplateService.java
+++ /dev/null
@@ -1,833 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.LayoutLoader;
-import org.apache.turbine.modules.Loader;
-import org.apache.turbine.modules.NavigationLoader;
-import org.apache.turbine.modules.PageLoader;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.factory.TurbineFactory;
-import org.apache.turbine.services.servlet.TurbineServlet;
-import org.apache.turbine.services.template.mapper.BaseTemplateMapper;
-import org.apache.turbine.services.template.mapper.ClassMapper;
-import org.apache.turbine.services.template.mapper.DirectMapper;
-import org.apache.turbine.services.template.mapper.DirectTemplateMapper;
-import org.apache.turbine.services.template.mapper.LayoutTemplateMapper;
-import org.apache.turbine.services.template.mapper.Mapper;
-import org.apache.turbine.services.template.mapper.ScreenTemplateMapper;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.uri.URIConstants;
-
-/**
- * This service provides a method for mapping templates to their
- * appropriate Screens or Navigations.  It also allows templates to
- * define a layout/navigations/screen modularization within the
- * template structure.  It also performs caching if turned on in the
- * properties file.
- *
- * This service is not bound to a specific templating engine but we
- * will use the Velocity templating engine for the examples. It is
- * available by using the VelocityService.
- *
- * This assumes the following properties in the Turbine configuration:
- *
- * <pre>
- * # Register the VelocityService for the "vm" extension.
- * services.VelocityService.template.extension=vm
- *
- * # Default Java class for rendering a Page in this service
- * # (must be found on the class path (org.apache.turbine.modules.page.VelocityPage))
- * services.VelocityService.default.page = VelocityPage
- *
- * # Default Java class for rendering a Screen in this service
- * # (must be found on the class path (org.apache.turbine.modules.screen.VelocityScreen))
- * services.VelocityService.default.screen=VelocityScreen
- *
- * # Default Java class for rendering a Layout in this service
- * # (must be found on the class path (org.apache.turbine.modules.layout.VelocityOnlyLayout))
- * services.VelocityService.default.layout = VelocityOnlyLayout
- *
- * # Default Java class for rendering a Navigation in this service
- * # (must be found on the class path (org.apache.turbine.modules.navigation.VelocityNavigation))
- * services.VelocityService.default.navigation=VelocityNavigation
- *
- * # Default Template Name to be used as Layout. If nothing else is
- * # found, return this as the default name for a layout
- * services.VelocityService.default.layout.template = Default.vm
- * </pre>
- * If you want to render a template, a search path is used to find
- * a Java class which might provide information for the context of
- * this template.
- *
- * If you request e.g. the template screen
- *
- * about,directions,Driving.vm
- *
- * then the following class names are searched (on the module search
- * path):
- *
- * 1. about.directions.Driving     &lt;- direct matching the template to the class name
- * 2. about.directions.Default     &lt;- matching the package, class name is Default
- * 3. about.Default                &lt;- stepping up in the package hierarchy, looking for Default
- * 4. Default                      &lt;- Class called "Default" without package
- * 5. VelocityScreen               &lt;- The class configured by the Service (VelocityService) to
- *
- * And if you have the following module packages configured:
- *
- * module.packages = org.apache.turbine.modules, com.mycorp.modules
- *
- * then the class loader will look for
- *
- * org.apache.turbine.modules.screens.about.directions.Driving
- * com.mycorp.modules.screens.about.directions.Driving
- * org.apache.turbine.modules.screens.about.directions.Default
- * com.mycorp.modules.screens.about.directions.Default
- * org.apache.turbine.modules.screens.about.Default
- * com.mycorp.modules.screens.about.Default
- * org.apache.turbine.modules.screens.Default
- * com.mycorp.modules.screens.Default
- * org.apache.turbine.modules.screens.VelocityScreen
- * com.mycorp.modules.screens.VelocityScreen
- *
- * Most of the times, you don't have any backing Java class for a
- * template screen, so the first match will be
- * org.apache.turbine.modules.screens.VelocityScreen
- * which then renders your screen.
- *
- * Please note, that your Screen Template (Driving.vm) must exist!
- * If it does not exist, the Template Service will report an error.
- *
- * Once the screen is found, the template service will look for
- * the Layout and Navigation templates of your Screen. Here, the
- * template service looks for matching template names!
- *
- * Consider our example:  about,directions,Driving.vm (Screen Name)
- *
- * Now the template service will look for the following Navigation
- * and Layout templates:
- *
- * 1. about,directions,Driving.vm      &lt;- exact match
- * 2. about,directions,Default.vm      &lt;- package match, Default name
- * 3. about,Default.vm                 &lt;- stepping up in the hierarchy
- * 4. Default.vm                       &lt;- The name configured as default.layout.template
- *                                        in the Velocity service.
- *
- * And now Hennings' two golden rules for using templates:
- *
- * Many examples and docs from older Turbine code show template pathes
- * with a slashes. Repeat after me: "TEMPLATE NAMES NEVER CONTAIN SLASHES!"
- *
- * Many examples and docs from older Turbine code show templates that start
- * with "/". This is not only a violation of the rule above but actively breaks
- * things like loading templates from a jar with the velocity jar loader. Repeat
- * after me: "TEMPLATE NAMES ARE NOT PATHES. THEY'RE NOT ABSOLUTE AND HAVE NO
- * LEADING /".
- *
- * If you now wonder how a template name is mapped to a file name: This is
- * scope of the templating engine. Velocity e.g. has this wonderful option to
- * load templates from jar archives. There is no single file but you tell
- * velocity "get about,directions,Driving.vm" and it returns the rendered
- * template. This is not the job of the Templating Service but of the Template
- * rendering services like VelocityService.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineTemplateService
-    extends TurbineBaseService
-    implements TemplateService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineTemplateService.class);
-
-    /** Represents Page Objects */
-    public static final int PAGE_KEY = 0;
-
-    /** Represents Page Objects */
-    public static final String PAGE_NAME = "page";
-
-    /** Represents Screen Objects */
-    public static final int SCREEN_KEY = 1;
-
-    /** Represents Screen Objects */
-    public static final String SCREEN_NAME = "screen";
-
-    /** Represents Layout Objects */
-    public static final int LAYOUT_KEY = 2;
-
-    /** Represents Layout Objects */
-    public static final String LAYOUT_NAME = "layout";
-
-    /** Represents Navigation Objects */
-    public static final int NAVIGATION_KEY = 3;
-
-    /** Represents Navigation Objects */
-    public static final String NAVIGATION_NAME = "navigation";
-
-    /** Represents Layout Template Objects */
-    public static final int LAYOUT_TEMPLATE_KEY = 4;
-
-    /** Represents Layout Template Objects */
-    public static final String LAYOUT_TEMPLATE_NAME = "layout.template";
-
-    /** Represents Screen Template Objects */
-    public static final int SCREEN_TEMPLATE_KEY = 5;
-
-    /** Represents Screen Template Objects */
-    public static final String SCREEN_TEMPLATE_NAME = "screen.template";
-
-    /** Represents Navigation Template Objects */
-    public static final int NAVIGATION_TEMPLATE_KEY = 6;
-
-    /** Represents Navigation Template Objects */
-    public static final String NAVIGATION_TEMPLATE_NAME = "navigation.template";
-
-    /** Number of different Template Types that we know of */
-    public static final int TEMPLATE_TYPES = 7;
-
-    /** Here we register the mapper objects for our various object types */
-    private Mapper [] mapperRegistry = null;
-
-    /**
-     * The default file extension used as a registry key when a
-     * template's file extension cannot be determined.
-     *
-     * @deprecated. Use TemplateService.DEFAULT_EXTENSION_VALUE.
-     */
-    protected static final String NO_FILE_EXT = TemplateService.DEFAULT_EXTENSION_VALUE;
-
-
-    /** Flag set if cache is to be used. */
-    private boolean useCache = false;
-
-    /** Default extension for templates. */
-    private String defaultExtension;
-
-    /** Default template without the default extension. */
-    private String defaultTemplate;
-
-    /**
-     * The mappings of template file extensions to {@link
-     * org.apache.turbine.services.template.TemplateEngineService}
-     * implementations. Implementing template engines can locate
-     * templates within the capability of any resource loaders they
-     * may possess, and other template engines are stuck with file
-     * based template hierarchy only.
-     */
-    private Map templateEngineRegistry = null;
-
-    /**
-     * C'tor
-     */
-    public TurbineTemplateService()
-    {
-    }
-
-    /**
-     * Called the first time the Service is used.
-     *
-     * @exception InitializationException Something went wrong when
-     *                                     setting up the Template Service.
-     */
-    public void init()
-        throws InitializationException
-    {
-        // Get the configuration for the template service.
-        Configuration config = getConfiguration();
-
-        // Get the default extension to use if nothing else is applicable.
-        defaultExtension = config.getString(TemplateService.DEFAULT_EXTENSION_KEY,
-            TemplateService.DEFAULT_EXTENSION_VALUE);
-
-        defaultTemplate =  config.getString(TemplateService.DEFAULT_TEMPLATE_KEY,
-            TemplateService.DEFAULT_TEMPLATE_VALUE);
-
-        // Check to see if we are going to be caching modules.
-        // Aaargh, who moved this _out_ of the TemplateService package?
-        useCache = Turbine.getConfiguration().getBoolean(TurbineConstants.MODULE_CACHE_KEY,
-            TurbineConstants.MODULE_CACHE_DEFAULT);
-
-        log.debug("Default Extension: " + defaultExtension);
-        log.debug("Default Template:  " + defaultTemplate);
-        log.debug("Use Caching:       " + useCache);
-
-        templateEngineRegistry = Collections.synchronizedMap(new HashMap());
-
-        initMapper(config);
-        setInit(true);
-    }
-
-    /**
-     * Returns true if the Template Service has caching activated
-     *
-     * @return true if Caching is active.
-     */
-    public boolean isCaching()
-    {
-        return useCache;
-    }
-
-    /**
-     * Get the default template name extension specified
-     * in the template service properties. If no extension
-     * is defined, return the empty string.
-     *
-     * @return The default extension.
-     */
-    public String getDefaultExtension()
-    {
-        return StringUtils.isNotEmpty(defaultExtension) ? defaultExtension : "";
-    }
-
-    /**
-     * Return Extension for a supplied template
-     *
-     * @param template The template name
-     *
-     * @return extension The extension for the supplied template
-     */
-    public String getExtension(String template)
-    {
-        if (StringUtils.isEmpty(template))
-        {
-            return getDefaultExtension();
-        }
-
-        int dotIndex = template.indexOf(EXTENSION_SEPARATOR);
-
-        return (dotIndex < 0) ? getDefaultExtension() : template.substring(dotIndex + 1);
-    }
-
-
-    /**
-     * Returns the Default Template Name with the Default Extension.
-     * If the extension is unset, return only the template name
-     *
-     * @return The default template Name
-     */
-    public String getDefaultTemplate()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append(defaultTemplate);
-        if (StringUtils.isNotEmpty(defaultExtension))
-        {
-            sb.append(EXTENSION_SEPARATOR);
-            sb.append(getDefaultExtension());
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default page module name.
-     */
-    public String getDefaultPage()
-    {
-        return getDefaultPageName(getDefaultTemplate());
-    }
-
-    /**
-     * Get the default screen module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default screen module name.
-     */
-    public String getDefaultScreen()
-    {
-        return getDefaultScreenName(getDefaultTemplate());
-    }
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default layout module name.
-     */
-    public String getDefaultLayout()
-    {
-        return getDefaultLayoutName(getDefaultTemplate());
-    }
-
-    /**
-     * Get the default navigation module name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default navigation module name.
-     */
-    public String getDefaultNavigation()
-    {
-        return getDefaultNavigationName(getDefaultTemplate());
-    }
-
-    /**
-     * Get the default layout template name of the template engine
-     * service corresponding to the default template name extension.
-     *
-     * @return The default layout template name.
-     */
-    public String getDefaultLayoutTemplate()
-    {
-        return getDefaultLayoutTemplateName(getDefaultTemplate());
-    }
-
-    /**
-     * Get the default page module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default page module name.
-     */
-    public String getDefaultPageName(String template)
-    {
-        return ((Mapper) mapperRegistry[PAGE_KEY]).getDefaultName(template);
-    }
-
-    /**
-     * Get the default screen module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default screen module name.
-     */
-    public String getDefaultScreenName(String template)
-    {
-        return ((Mapper) mapperRegistry[SCREEN_KEY]).getDefaultName(template);
-    }
-
-    /**
-     * Get the default layout module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout module name.
-     */
-    public String getDefaultLayoutName(String template)
-    {
-        return ((Mapper) mapperRegistry[LAYOUT_KEY]).getDefaultName(template);
-    }
-
-    /**
-     * Get the default navigation module name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default navigation module name.
-     */
-    public String getDefaultNavigationName(String template)
-    {
-        return ((Mapper) mapperRegistry[NAVIGATION_KEY]).getDefaultName(template);
-    }
-
-    /**
-     * Get the default layout template name of the template engine
-     * service corresponding to the template name extension of
-     * the named template.
-     *
-     * @param template The template name.
-     * @return The default layout template name.
-     */
-    public String getDefaultLayoutTemplateName(String template)
-    {
-        return ((Mapper) mapperRegistry[LAYOUT_TEMPLATE_KEY]).getDefaultName(template);
-    }
-
-    /**
-     * Find the default page module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default page for.
-     * @return The default page module name.
-     */
-    public String getDefaultPageName(RunData data)
-    {
-        String template = data.getParameters().get(URIConstants.CGI_TEMPLATE_PARAM);
-        return (template != null) ?
-            getDefaultPageName(template) : getDefaultPage();
-    }
-
-    /**
-     * Find the default layout module name for the given request.
-     *
-     * @param data The encapsulation of the request to retrieve the
-     *             default layout for.
-     * @return The default layout module name.
-     */
-    public String getDefaultLayoutName(RunData data)
-    {
-        String template = data.getParameters().get(URIConstants.CGI_TEMPLATE_PARAM);
-        return (template != null) ?
-            getDefaultLayoutName(template) : getDefaultLayout();
-    }
-
-    /**
-     * Locate and return the name of the screen module to be used
-     * with the named screen template.
-     *
-     * @param template The screen template name.
-     * @return The found screen module name.
-     * @exception Exception, a generic exception.
-     */
-    public String getScreenName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[SCREEN_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Locate and return the name of the layout module to be used
-     * with the named layout template.
-     *
-     * @param template The layout template name.
-     * @return The found layout module name.
-     * @exception Exception, a generic exception.
-     */
-    public String getLayoutName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[LAYOUT_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Locate and return the name of the navigation module to be used
-     * with the named navigation template.
-     *
-     * @param template The navigation template name.
-     * @return The found navigation module name.
-     * @exception Exception, a generic exception.
-     */
-    public String getNavigationName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[NAVIGATION_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Locate and return the name of the screen template corresponding
-     * to the given template name parameter. This might return null if
-     * the screen is not found!
-     *
-     * @param template The template name parameter.
-     * @return The found screen template name.
-     * @exception Exception, a generic exception.
-     */
-    public String getScreenTemplateName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[SCREEN_TEMPLATE_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Locate and return the name of the layout template corresponding
-     * to the given screen template name parameter.
-     *
-     * @param template The template name parameter.
-     * @return The found screen template name.
-     * @exception Exception, a generic exception.
-     */
-    public String getLayoutTemplateName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[LAYOUT_TEMPLATE_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Locate and return the name of the navigation template corresponding
-     * to the given template name parameter. This might return null if
-     * the navigation is not found!
-     *
-     * @param template The template name parameter.
-     * @return The found navigation template name.
-     * @exception Exception, a generic exception.
-     */
-    public String getNavigationTemplateName(String template)
-        throws Exception
-    {
-        return ((Mapper) mapperRegistry[NAVIGATION_TEMPLATE_KEY]).getMappedName(template);
-    }
-
-    /**
-     * Translates the supplied template paths into their Turbine-canonical
-     * equivalent (probably absolute paths). This is used if the templating
-     * engine (e.g. JSP) does not provide any means to load a page but 
-     * the page path is passed to the servlet container.
-     *
-     * @param templatePaths An array of template paths.
-     * @return An array of translated template paths.
-     * @deprecated Each template engine service should know how to translate
-     *             a request onto a file. 
-     */
-    public String[] translateTemplatePaths(String[] templatePaths)
-    {
-        for (int i = 0; i < templatePaths.length; i++)
-        {
-            templatePaths[i] = TurbineServlet.getRealPath(templatePaths[i]);
-        }
-        return templatePaths;
-    }
-
-    /**
-     * Delegates to the appropriate {@link
-     * org.apache.turbine.services.template.TemplateEngineService} to
-     * check the existance of the specified template.
-     *
-     * @param template The template to check for the existance of.
-     * @param templatePaths The paths to check for the template.
-     * @deprecated Use templateExists from the various Templating Engines
-     */
-    public boolean templateExists(String template,
-        String[] templatePaths)
-    {
-        for (int i = 0; i < templatePaths.length; i++)
-        {
-            if (new File(templatePaths[i], template).exists())
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Registers the provided template engine for use by the
-     * <code>TemplateService</code>.
-     *
-     * @param service The <code>TemplateEngineService</code> to register.
-     */
-    public synchronized void registerTemplateEngineService(TemplateEngineService service)
-    {
-        String[] exts = service.getAssociatedFileExtensions();
-
-        for (int i = 0; i < exts.length; i++)
-        {
-            templateEngineRegistry.put(exts[i], service);
-        }
-    }
-
-    /**
-     * The {@link org.apache.turbine.services.template.TemplateEngineService}
-     * associated with the specified template's file extension.
-     *
-     * @param template The template name.
-     * @return The template engine service.
-     */
-    public TemplateEngineService getTemplateEngineService(String template)
-    {
-        return (TemplateEngineService) templateEngineRegistry.get(getExtension(template));
-    }
-
-    /**
-     * Register a template Mapper to the service. This Mapper
-     * performs the template mapping and searching for a specific
-     * object type which is managed by the TemplateService.
-     *
-     * @param templateKey  One of the _KEY constants for the Template object types.
-     * @param mapper  An object which implements the Mapper interface.
-     */
-    private void registerMapper(int templateKey, Mapper mapper)
-    {
-        mapper.init();
-        mapperRegistry[templateKey] = mapper;
-    }
-
-    /**
-     * Load and configure the Template mappers for
-     * the Template Service.
-     *
-     * @param conf The current configuration object.
-     * @throws InitializationException A problem occured trying to set up the mappers.
-     */
-    private void initMapper(Configuration conf)
-            throws InitializationException
-    {
-        // Create a registry with the number of Template Types managed by this service.
-        // We could use a List object here and extend the number of managed objects
-        // dynamically. However, by using an Object Array, we get much more performance
-        // out of the Template Service.
-        mapperRegistry = new Mapper [TEMPLATE_TYPES];
-
-        String [] mapperNames = new String [] {
-            PAGE_NAME,SCREEN_NAME, LAYOUT_NAME,
-            NAVIGATION_NAME, LAYOUT_TEMPLATE_NAME, SCREEN_TEMPLATE_NAME, NAVIGATION_TEMPLATE_NAME
-        };
-
-        String [] mapperClasses = new String [] {
-            DirectMapper.class.getName(),
-            ClassMapper.class.getName(),
-            ClassMapper.class.getName(),
-            ClassMapper.class.getName(),
-            LayoutTemplateMapper.class.getName(),
-            ScreenTemplateMapper.class.getName(),
-            DirectTemplateMapper.class.getName()
-        };
-
-        int [] mapperCacheSize = new int [] {
-            0,
-            conf.getInt(
-                    TurbineConstants.SCREEN_CACHE_SIZE_KEY,
-                    TurbineConstants.SCREEN_CACHE_SIZE_DEFAULT),
-            conf.getInt(
-                    TurbineConstants.LAYOUT_CACHE_SIZE_KEY,
-                    TurbineConstants.LAYOUT_CACHE_SIZE_DEFAULT),
-            conf.getInt(
-                    TurbineConstants.NAVIGATION_CACHE_SIZE_KEY,
-                    TurbineConstants.NAVIGATION_CACHE_SIZE_DEFAULT),
-            conf.getInt(
-                    TurbineConstants.LAYOUT_CACHE_SIZE_KEY,
-                    TurbineConstants.LAYOUT_CACHE_SIZE_DEFAULT),
-            conf.getInt(
-                    TurbineConstants.SCREEN_CACHE_SIZE_KEY,
-                    TurbineConstants.SCREEN_CACHE_SIZE_DEFAULT),
-            conf.getInt(
-                    TurbineConstants.NAVIGATION_CACHE_SIZE_KEY,
-                    TurbineConstants.NAVIGATION_CACHE_SIZE_DEFAULT)
-        };
-
-        String [] mapperDefaultProperty = new String [] {
-            TemplateEngineService.DEFAULT_PAGE,
-            TemplateEngineService.DEFAULT_SCREEN,
-            TemplateEngineService.DEFAULT_LAYOUT,
-            TemplateEngineService.DEFAULT_NAVIGATION,
-            TemplateEngineService.DEFAULT_LAYOUT_TEMPLATE,
-            TemplateEngineService.DEFAULT_SCREEN_TEMPLATE,
-            TemplateEngineService.DEFAULT_NAVIGATION_TEMPLATE
-        };
-
-        char [] mapperSeparator = new char [] { '.', '.', '.', '.', '/', '/', '/' };
-
-        Loader [] mapperLoader = new Loader [] { 
-            PageLoader.getInstance(),
-            ScreenLoader.getInstance(),
-            LayoutLoader.getInstance(),
-            NavigationLoader.getInstance(),
-            null, null, null};
-
-        String [] mapperPrefix = new String [] { 
-            null, null, null, null,
-            TurbineConstants.LAYOUT_PREFIX,
-            TurbineConstants.SCREEN_PREFIX,
-            TurbineConstants.NAVIGATION_PREFIX  };
-
-        for (int i = 0; i < TEMPLATE_TYPES; i++)
-        {
-            StringBuffer mapperProperty = new StringBuffer();
-            mapperProperty.append("mapper.");
-            mapperProperty.append(mapperNames[i]);
-            mapperProperty.append(".class");
-
-            String mapperClass = 
-                    conf.getString(mapperProperty.toString(), mapperClasses[i]);
-
-            log.info("Using " + mapperClass + " to map " + mapperNames[i] + " elements");
-
-            Mapper tm = null;
-
-            try
-            {
-                tm = (Mapper) TurbineFactory.getInstance(mapperClass);
-            }
-            catch (TurbineException te)
-            {
-                throw new InitializationException("", te);
-            }
-
-            tm.setUseCache(useCache);
-            tm.setCacheSize(mapperCacheSize[i]);
-            tm.setDefaultProperty(mapperDefaultProperty[i]);
-            tm.setSeparator(mapperSeparator[i]);
-
-            if ((mapperLoader[i] != null) && (tm instanceof ClassMapper))
-            {
-                ((ClassMapper) tm).setLoader(mapperLoader[i]);
-            }
-
-            if ((mapperPrefix[i] != null) && (tm instanceof BaseTemplateMapper))
-            {
-                ((BaseTemplateMapper) tm).setPrefix(mapperPrefix[i]);
-            }
-
-            registerMapper(i, tm);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java b/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
deleted file mode 100644
index 2502b6b..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/BaseMapper.java
+++ /dev/null
@@ -1,259 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.services.template.TemplateEngineService;
-
-/**
- * A base class for the various mappers which contains common
- * code.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class BaseMapper
-{
-    /** True if this mapper should cache template -> name mappings */
-    private boolean useCache = false;
-
-    /** Default cache size. Just a number out of thin air. Will be set at init time */
-    private int cacheSize = 5;
-
-    /** The internal template -> name mapping cache */
-    private Map templateCache = null;
-
-    /** The name of the default property to pull from the Template Engine Service if the default is requested */
-    protected String defaultProperty;
-
-    /** The separator used to concatenate the result parts for this mapper. */
-    protected char separator;
-
-    // Note: You might _not_ use TurbineTemplate.<xxx> in the C'tor and the init method.
-    // The service isn't configured yet and if you do, the Broker will try to reinit the
-    // Service which leads to an endless loop and a deadlock.
-
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public BaseMapper()
-    {
-    }
-
-    /**
-     * Get the CacheSize value.
-     * @return the CacheSize value.
-     */
-    public int getCacheSize()
-    {
-        return cacheSize;
-    }
-
-    /**
-     * Set the CacheSize value.
-     * @param cacheSize The new CacheSize value.
-     */
-    public void setCacheSize(int cacheSize)
-    {
-        this.cacheSize = cacheSize;
-    }
-
-    /**
-     * Get the UseCache value.
-     * @return the UseCache value.
-     */
-    public boolean isUseCache()
-    {
-        return useCache;
-    }
-
-    /**
-     * Set the UseCache value.
-     * @param newUseCache The new UseCache value.
-     */
-    public void setUseCache(boolean useCache)
-    {
-        this.useCache = useCache;
-    }
-
-    /**
-     * Get the DefaultProperty value.
-     * @return the DefaultProperty value.
-     */
-    public String getDefaultProperty()
-    {
-        return defaultProperty;
-    }
-
-    /**
-     * Set the DefaultProperty value.
-     * @param defaultProperty The new DefaultProperty value.
-     */
-    public void setDefaultProperty(String defaultProperty)
-    {
-        this.defaultProperty = defaultProperty;
-    }
-
-    /**
-     * Get the Separator value.
-     * @return the Separator value.
-     */
-    public char getSeparator()
-    {
-        return separator;
-    }
-
-    /**
-     * Set the Separator value.
-     * @param separator The new Separator value.
-     */
-    public void setSeparator(char separator)
-    {
-        this.separator = separator;
-    }
-
-    /**
-     * Initializes the Mapper. Must be called before the mapper might be used.
-     */
-    public void init()
-    {
-        if (useCache)
-        {
-            templateCache = new HashMap(cacheSize);
-        }
-    }
-
-    /**
-     * Returns the default name for the passed Template.
-     * If the passed template has no extension,
-     * the default extension is assumed.
-     * If the template is empty, the default template is
-     * returned.
-     *
-     * @param template The template name.
-     *
-     * @return the mapped default name for the template.
-     */
-
-    public String getDefaultName(String template)
-    {
-        // We might get a Name without an extension passed. If yes, then we use
-        // the Default extension
-
-        TemplateEngineService tes
-            = TurbineTemplate.getTemplateEngineService(template);
-
-        if (StringUtils.isEmpty(template) || (tes == null))
-        {
-            return TurbineTemplate.getDefaultTemplate();
-        }
-
-        String defaultName = (String) tes.getTemplateEngineServiceConfiguration()
-            .get(defaultProperty);
-
-        return StringUtils.isEmpty(defaultName)
-            ? TurbineTemplate.getDefaultTemplate()
-            : defaultName;
-    }
-
-    /**
-     * Return the first match name for the given template name.
-     *
-     * @param template The template name.
-     *
-     * @return The first matching class or template name.
-     */
-    public String getMappedName(String template)
-    {
-        if (StringUtils.isEmpty(template))
-        {
-            return null;
-        }
-
-        if (useCache && templateCache.containsKey(template))
-        {
-            return (String) templateCache.get(template);
-        }
-
-        String res = doMapping(template);
-
-        // Never cache "null" return values and empty Strings.
-        if (useCache && StringUtils.isNotEmpty(res))
-        {
-            templateCache.put(template, res);
-        }
-
-        return res;
-    }
-
-    /**
-     * The actual mapping implementation class. It
-     * is guaranteed that never an empty or null
-     * template name is passed to it. This might
-     * return null.
-     *
-     * @param template The template name.
-     * @return The mapped class or template name.
-     */
-    public abstract String doMapping(String template);
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
deleted file mode 100644
index a60506c..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/BaseTemplateMapper.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-/**
- * This is a mapper like the BaseMapper but it returns its
- * results with the extension of the template names passed or (if no
- * extension is passed), the default extension.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class BaseTemplateMapper
-    extends BaseMapper
-{
-    /** A prefix which is used to separate the various template types (screen, layouts, navigation) */
-    protected String prefix = "";
-
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public BaseTemplateMapper()
-    {
-        super();
-    }
-
-    /**
-     * Get the Prefix value.
-     * @return the Prefix value.
-     */
-    public String getPrefix()
-    {
-        return prefix;
-    }
-
-    /**
-     * Set the Prefix value.
-     * @param prefix The new Prefix value.
-     */
-    public void setPrefix(String prefix)
-    {
-        this.prefix = prefix;
-    }
-
-    /**
-     * Returns the default name for the passed Template.
-     * If the template has no extension, the default extension
-     * is added.
-     * If the template is empty, the default template is
-     * returned.
-     *
-     * @param template The template name.
-     *
-     * @return the mapped default name for the template.
-     */
-    public String getDefaultName(String template)
-    {
-        String res = super.getDefaultName(template);
-
-        // Does the Template Name component have an extension?
-        String [] components
-            = StringUtils.split(res, String.valueOf(separator));
-
-        if (components[components.length -1 ].indexOf(TemplateService.EXTENSION_SEPARATOR) < 0)
-        {
-            StringBuffer resBuf = new StringBuffer();
-            resBuf.append(res);
-            String [] templateComponents = StringUtils.split(template, String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
-
-            // Only the extension of the Template name component is interesting...
-            int dotIndex = templateComponents[templateComponents.length -1].lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
-            if (dotIndex < 0)
-            {
-                if (StringUtils.isNotEmpty(TurbineTemplate.getDefaultExtension()))
-                {
-                    resBuf.append(TemplateService.EXTENSION_SEPARATOR);
-                    resBuf.append(TurbineTemplate.getDefaultExtension());
-                }
-            }
-            else
-            {
-                resBuf.append(templateComponents[templateComponents.length -1].substring(dotIndex));
-            }
-            res = resBuf.toString();
-        }
-        return res;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java b/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java
deleted file mode 100644
index 01e7903..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/ClassMapper.java
+++ /dev/null
@@ -1,211 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.modules.Loader;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.template.TemplateService;
-
-/**
- * This mapper tries to map Template names to class names. If no direct match
- * is found, it tries matches "upwards" in the package hierarchy until either
- * a match is found or the root is hit. Then it returns the name of the
- * default class from the TemplateEngineService.
- *
- * 1. about.directions.Driving     &lt;- direct matching the template to the class name
- * 2. about.directions.Default     &lt;- matching the package, class name is Default
- * 3. about.Default                &lt;- stepping up in the package hierarchy, looking for Default
- * 4. Default                      &lt;- Class called "Default" without package
- * 5. VelocityScreen               &lt;- The class configured by the Service (VelocityService) to
- *
- * Please note, that no actual packages are searched. This is the scope of the
- * TemplateEngine Loader which is passed at construction time.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ClassMapper
-    extends BaseMapper
-    implements Mapper
-{
-    /** The loader for actually trying out the package names */
-    private Loader loader = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(ClassMapper.class);
-
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public ClassMapper()
-    {
-    }
-
-    /**
-     * Get the Loader value.
-     * @return the Loader value.
-     */
-    public Loader getLoader()
-    {
-        return loader;
-    }
-
-    /**
-     * Set the Loader value.
-     * @param loader The new Loader value.
-     */
-    public void setLoader(Loader loader)
-    {
-        this.loader = loader;
-        log.debug("Loader is " + this.loader);
-    }
-
-    /**
-     * Strip off a possible extension, replace all "," with "."
-     * Look through the given package path until a match is found.
-     *
-     * @param template The template name.
-     * @return A class name for the given template.
-     */
-    public String doMapping(String template)
-    {
-        log.debug("doMapping(" + template + ")");
-
-        // Copy our elements into an array
-        List components
-            = new ArrayList(Arrays.asList(StringUtils.split(
-                                              template,
-                                              String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
-        int componentSize = components.size() - 1 ;
-
-        // This method never gets an empty string passed.
-        // So this is never < 0
-        String className = (String) components.get(componentSize);
-        components.remove(componentSize--);
-
-        log.debug("className is " + className);
-
-        // Strip off a possible Extension
-        int dotIndex = className.lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
-        className = (dotIndex < 0) ? className : className.substring(0, dotIndex);
-
-        // This is an optimization. If the name we're looking for is
-        // already the default name for the template, don't do a "first run"
-        // which looks for an exact match.
-        boolean firstRun = !className.equals(TemplateService.DEFAULT_NAME);
-
-        for(;;)
-        {
-            String pkg = StringUtils.join(components.iterator(), String.valueOf(separator));
-            StringBuffer testName = new StringBuffer();
-
-            log.debug("classPackage is now: " + pkg);
-
-            if (!components.isEmpty())
-            {
-                testName.append(pkg);
-                testName.append(separator);
-            }
-
-            testName.append((firstRun)
-                ? className
-                : TemplateService.DEFAULT_NAME);
-
-            log.debug("Looking for " + testName);
-            try
-            {
-                loader.getAssembler(testName.toString());
-                log.debug("Found it, returning " + testName);
-                return testName.toString();
-            }
-            catch (Exception e)
-            {
-                // Not found. Go on.
-            }
-
-            if (firstRun)
-            {
-                firstRun = false;
-            }
-            else
-            {
-                if (components.isEmpty())
-                {
-                    break; // for(;;)
-                }
-                components.remove(componentSize--);
-            }
-        }
-
-        log.debug("Returning default");
-        return getDefaultName(template);
-    }
-}
-
-
-
-
diff --git a/src/java/org/apache/turbine/services/template/mapper/DirectMapper.java b/src/java/org/apache/turbine/services/template/mapper/DirectMapper.java
deleted file mode 100644
index 0f8c0e6..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/DirectMapper.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.template.TemplateService;
-
-/**
- * The most primitive mapper. It is used for the page objects in the
- * Template service. It never caches and simply returns what is given to it.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DirectMapper
-    extends BaseMapper
-    implements Mapper
-{
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public DirectMapper()
-    {
-    }
-
-    /**
-     * Strip off a possible extension, replace all "," with "."
-     *
-     * about,directions,Driving.vm --> about.directions.Driving
-     *
-     * @param template The template name.
-     * @return A class name for the given template.
-     */
-    public String doMapping(String template)
-    {
-        String [] components
-            = StringUtils.split(template, String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
-
-        String className = components[components.length - 1];
-
-        // Strip off a possible Extension
-        int dotIndex = className.lastIndexOf(TemplateService.EXTENSION_SEPARATOR);
-        className = (dotIndex < 0) ? className : className.substring(0, dotIndex);
-        components[components.length -1] = className;
-
-        // Class names are always separated by "."
-        return StringUtils.join(components, String.valueOf(separator));
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/DirectTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/DirectTemplateMapper.java
deleted file mode 100644
index f35beec..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/DirectTemplateMapper.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.template.TemplateService;
-
-/**
- * The most primitive templating mapper. It is used for the navigation template
- * objects. It never caches and simply returns what is given to it but keeps
- * the template extension.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DirectTemplateMapper
-    extends BaseTemplateMapper
-    implements Mapper
-{
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public DirectTemplateMapper()
-    {
-    }
-
-    /**
-     * Replace all "," with ".", but keep the extension.
-     *
-     * about,directions,Driving.vm --> about/directions/Driving.vm
-     *
-     * @param template The template name.
-     * @return A class name for the given template.
-     */
-    public String doMapping(String template)
-    {
-        String [] components
-            = StringUtils.split(template, String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
-
-        return StringUtils.join(components, String.valueOf(separator));
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
deleted file mode 100644
index 3745dbb..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/LayoutTemplateMapper.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.template.TemplateEngineService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-/**
- * This mapper is responsible for the lookup of templates for the Layout
- * It tries to look in various packages for a match:
- *
- * 1. about,directions,Driving.vm      &lt;- exact match
- * 2. about,directions,Default.vm      &lt;- package match, Default name
- * 3. about,Default.vm                 &lt;- stepping up in the hierarchy
- * 4. Default.vm                       &lt;- The name configured as default.layout.template
- *                                        in the corresponding Templating Engine
-
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class LayoutTemplateMapper
-    extends BaseTemplateMapper
-    implements Mapper
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(LayoutTemplateMapper.class);
-
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public LayoutTemplateMapper()
-    {
-    }
-
-    /**
-     * Look for a given Template, then try the
-     * defaults until we hit the root.
-     *
-     * @param template The template name.
-     * @return The parsed module name.
-     */
-    public String doMapping(String template)
-    {
-        log.debug("doMapping(" + template + ")");
-        // Copy our elements into an array
-        List components
-            = new ArrayList(Arrays.asList(StringUtils.split(
-                                              template,
-                                              String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
-        int componentSize = components.size() - 1 ;
-
-        // This method never gets an empty string passed.
-        // So this is never < 0
-        String templateName = (String) components.get(componentSize);
-        components.remove(componentSize--);
-
-        log.debug("templateName is " + templateName);
-
-        // Last element decides, which template Service to use...
-        TemplateEngineService tes = TurbineTemplate.getTemplateEngineService(templateName);
-
-        if (tes == null)
-        {
-            return null;
-        }
-
-        String defaultName =
-            TurbineTemplate.getDefaultLayoutTemplateName(templateName); // We're, after all, a Layout Template Mapper...
-
-        // This is an optimization. If the name we're looking for is
-        // already the default name for the template, don't do a "first run"
-        // which looks for an exact match.
-        boolean firstRun = !templateName.equals(defaultName);
-
-        for(;;)
-        {
-            String templatePackage = StringUtils.join(components.iterator(), String.valueOf(separator));
-
-            log.debug("templatePackage is now: " + templatePackage);
-
-            StringBuffer testName = new StringBuffer();
-
-            if (!components.isEmpty())
-            {
-                testName.append(templatePackage);
-                testName.append(separator);
-            }
-
-            testName.append((firstRun)
-                ? templateName
-                : defaultName);
-
-            // But the Templating service must look for the name with prefix
-            StringBuffer templatePath = new StringBuffer();
-            if (StringUtils.isNotEmpty(prefix))
-            {
-                templatePath.append(prefix);
-                templatePath.append(separator);
-            }
-            templatePath.append(testName);
-
-            log.debug("Looking for " + templatePath);
-
-            if (tes.templateExists(templatePath.toString()))
-            {
-                log.debug("Found it, returning " + testName);
-                return testName.toString();
-            }
-
-            if (firstRun)
-            {
-                firstRun = false;
-            }
-            else
-            {
-                // We're no longer on the first Run (so we
-                // already tested the "Default" template)
-                // and the package is empty (we've hit the
-                // root. So we now break the endless loop.
-                if (components.isEmpty())
-                {
-                    break; // for(;;)
-                }
-                // We still have components. Remove the
-                // last one and go through the loop again.
-                components.remove(componentSize--);
-            }
-        }
-
-        log.debug("Returning default");
-        return getDefaultName(template);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/Mapper.java b/src/java/org/apache/turbine/services/template/mapper/Mapper.java
deleted file mode 100644
index 28ea5ea..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/Mapper.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * To separate out the various map and search policies for class
- * names and template names, we use classes that implement this
- * interface.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface Mapper
-{
-    /**
-     * Mapper initialization.
-     */
-    void init();
-
-    /**
-     * Get the CacheSize value.
-     * @return the CacheSize value.
-     */
-    int getCacheSize();
-
-    /**
-     * Set the CacheSize value.
-     * @param cacheSize The new CacheSize value.
-     */
-    void setCacheSize(int cacheSize);
-
-    /**
-     * Get the UseCache value.
-     * @return the UseCache value.
-     */
-    boolean isUseCache();
-
-    /**
-     * Set the UseCache value.
-     * @param newUseCache The new UseCache value.
-     */
-    void setUseCache(boolean useCache);
-
-    /**
-     * Get the DefaultProperty value.
-     * @return the DefaultProperty value.
-     */
-    String getDefaultProperty();
-
-    /**
-     * Set the DefaultProperty value.
-     * @param defaultProperty The new DefaultProperty value.
-     */
-    void setDefaultProperty(String defaultProperty);
-
-    /**
-     * Get the Separator value.
-     * @return the Separator value.
-     */
-    char getSeparator();
-
-    /**
-     * Set the Separator value.
-     * @param separator The new Separator value.
-     */
-    void setSeparator(char separator);
-
-
-    /**
-     * Returns the default name for the supplied template
-     * name. Must never return null.
-     *
-     * @param template The template name.
-     *
-     * @return The default name for this template.
-     */
-    String getDefaultName(String template);
-
-    /**
-     * Return the first match name for the given template name.
-     * This method might return null if no possible match can
-     * be found.
-     *
-     * @param template The template name.
-     *
-     * @return The first matching class or template name.
-     */
-    String getMappedName(String template);
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
deleted file mode 100644
index 46902b1..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/ScreenDefaultTemplateMapper.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.template.TemplateEngineService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-/**
- * This is a pretty simple mapper which returns template pathes for
- * a supplied template name. If the path does not exist, it looks for
- * a templated called "Default" in the same package.
- * This path can be used by the TemplateEngine to access 
- * a certain resource to actually render the template.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ScreenDefaultTemplateMapper
-    extends BaseTemplateMapper
-    implements Mapper
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(ScreenDefaultTemplateMapper.class);
-
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public ScreenDefaultTemplateMapper()
-    {
-    }
-
-    /**
-     * Look for a given Template, then try the
-     * default.
-     *
-     * @param template The template name.
-     * @return The parsed module name.
-     */
-    public String doMapping(String template)
-    {
-        log.debug("doMapping(" + template + ")");
-        // Copy our elements into an array
-        List components
-            = new ArrayList(Arrays.asList(StringUtils.split(
-                                              template,
-                                              String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR))));
-        int componentSize = components.size() - 1 ;
-
-        // This method never gets an empty string passed.
-        // So this is never < 0
-        String templateName = (String) components.get(componentSize);
-        components.remove(componentSize--);
-
-        log.debug("templateName is " + templateName);
-
-        // Last element decides, which template Service to use...
-        TemplateEngineService tes = TurbineTemplate.getTemplateEngineService(templateName);
-
-        if (tes == null)
-        {
-            return null;
-        }
-
-        String defaultName = "Default.vm";
-
-        // This is an optimization. If the name we're looking for is
-        // already the default name for the template, don't do a "first run"
-        // which looks for an exact match.
-        boolean firstRun = !templateName.equals(defaultName);
-
-        for(;;)
-        {
-            String templatePackage = StringUtils.join(components.iterator(), String.valueOf(separator));
-
-            log.debug("templatePackage is now: " + templatePackage);
-
-            StringBuffer testName = new StringBuffer();
-
-            if (!components.isEmpty())
-            {
-                testName.append(templatePackage);
-                testName.append(separator);
-            }
-
-            testName.append((firstRun)
-                ? templateName
-                : defaultName);
-
-            // But the Templating service must look for the name with prefix
-            StringBuffer templatePath = new StringBuffer();
-            if (StringUtils.isNotEmpty(prefix))
-            {
-                templatePath.append(prefix);
-                templatePath.append(separator);
-            }
-            templatePath.append(testName);
-
-            log.debug("Looking for " + templatePath);
-
-            if (tes.templateExists(templatePath.toString()))
-            {
-                log.debug("Found it, returning " + testName);
-                return testName.toString();
-            }
-
-            if (firstRun)
-            {
-                firstRun = false;
-            }
-            else
-            {
-                // We run this loop only two times. The
-                // first time with the 'real' name and the
-                // second time with "Default". The second time
-                // we will end up here and break the for(;;) loop.
-                break;
-            }
-        }
-
-        log.debug("Returning default");
-        return getDefaultName(template);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java b/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
deleted file mode 100644
index 940f85c..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/ScreenTemplateMapper.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package org.apache.turbine.services.template.mapper;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.template.TemplateEngineService;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.services.template.TurbineTemplate;
-
-/**
- * This is a pretty simple mapper which returns template pathes for
- * a supplied template name. This path can be used by the TemplateEngine
- * to access a certain resource to actually render the template.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ScreenTemplateMapper
-    extends BaseTemplateMapper
-    implements Mapper
-{
-    /**
-     * Default C'tor. If you use this C'tor, you must use
-     * the bean setter to set the various properties needed for
-     * this mapper before first usage.
-     */
-    public ScreenTemplateMapper()
-    {
-    }
-
-    /**
-     * Check, whether the provided name exists. Returns null
-     * if the screen does not exist.
-     *
-     * @param template The template name.
-     * @return The matching screen name.
-     */
-    public String doMapping(String template)
-    {
-        String [] components = StringUtils.split(template, String.valueOf(TemplateService.TEMPLATE_PARTS_SEPARATOR));
-
-        // Last element decides, which template Service to use...
-        TemplateEngineService tes =
-            TurbineTemplate.getTemplateEngineService(components[components.length - 1]);
-
-        String templatePackage = StringUtils.join(components, String.valueOf(separator));
-
-        // But the Templating service must look for the name with prefix
-        StringBuffer testPath = new StringBuffer();
-        if (StringUtils.isNotEmpty(prefix))
-        {
-            testPath.append(prefix);
-            testPath.append(separator);
-        }
-        testPath.append(templatePackage);
-
-        return (tes != null && tes.templateExists(testPath.toString()))
-            ? templatePackage
-            : null;
-    }
-}
-
-
-
-
diff --git a/src/java/org/apache/turbine/services/template/mapper/package.html b/src/java/org/apache/turbine/services/template/mapper/package.html
deleted file mode 100644
index d908480..0000000
--- a/src/java/org/apache/turbine/services/template/mapper/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The various mappers used by the Template service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/template/package.html b/src/java/org/apache/turbine/services/template/package.html
deleted file mode 100644
index 783e126..0000000
--- a/src/java/org/apache/turbine/services/template/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Template Service maps template references to a view service and a template name.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueId.java b/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueId.java
deleted file mode 100644
index 59f42cd..0000000
--- a/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueId.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.apache.turbine.services.uniqueid;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * This is a facade class for {@link UniqueIdService}.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public abstract class TurbineUniqueId
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a UniqueIdService implementation instance
-     */
-    protected static UniqueIdService getService()
-    {
-        return (UniqueIdService) TurbineServices
-                .getInstance().getService(UniqueIdService.SERVICE_NAME);
-    }
-
-    /**
-     * <p> Returs an identifer of this Turbine instance that is unique
-     * both on the server and worldwide.
-     *
-     * @return A String with the instance identifier.
-     */
-    public static String getInstanceId()
-    {
-        return getService().getInstanceId();
-    }
-
-    /**
-     * <p> Returns an identifier that is unique within this turbine
-     * instance, but does not have random-like apearance.
-     *
-     * @return A String with the non-random looking instance
-     * identifier.
-     */
-    public static String getUniqueId()
-    {
-        return getService().getUniqueId();
-    }
-
-    /**
-     * <p> Returns a unique identifier that looks like random data.
-     *
-     * @return A String with the random looking instance identifier.
-     */
-    public static String getPseudorandomId()
-    {
-        return getService().getPseudorandomId();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueIdService.java b/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueIdService.java
deleted file mode 100644
index 7f6a8f4..0000000
--- a/src/java/org/apache/turbine/services/uniqueid/TurbineUniqueIdService.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.apache.turbine.services.uniqueid;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.security.MessageDigest;
-
-import org.apache.commons.codec.base64.Base64;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.GenerateUniqueId;
-
-/**
- * <p> This is an implementation of {@link UniqueIdService}.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineUniqueIdService
-        extends TurbineBaseService
-        implements UniqueIdService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineUniqueIdService.class);
-
-    /** The identifier of this instance of turbine. */
-    protected static String turbineId = "UNKNOWN";
-
-    protected static String turbineURL = "UNKNOWN";
-
-    protected static int counter;
-
-
-    /**
-     * <p> Initializes the service upon first Turbine.doGet()
-     * invocation.
-     */
-    public void init()
-            throws InitializationException
-    {
-        try
-        {
-            // This might be a problem if the unique Id Service runs
-            // before Turbine got its first request. In this case,
-            // getDefaultServerData will return just a dummy value
-            // which is the same for all instances of Turbine.
-            //
-            // @todo This needs definitely further working.
-            String url = Turbine.getDefaultServerData().toString();
-            
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            byte [] bytesId = md.digest(url.getBytes("UTF-8"));
-            turbineId = new String(Base64.encode(bytesId));
-            
-            log.info("This is Turbine instance running at: " + url);
-            log.info("The instance id is #" + turbineId);
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                    "Could not initialize TurbineUniqueId Service", e);
-        }
-    }
-
-    /**
-     * <p> Writes a message to the log upon system shutdown.
-     */
-    public void shutdown()
-    {
-        log.info("Turbine instance running at " + turbineURL + " shutting down.");
-    }
-
-    /**
-     * <p> Returns an identifier of this Turbine instance that is unique
-     * both on the server and worldwide.  This identifier is computed
-     * as an MD5 sum of the URL (including schema, address, port if
-     * different that 80/443 respecively, context and servlet name).
-     * There is an overwhelming probalility that this id will be
-     * different that all other Turbine instances online.
-     *
-     * @return A String with the instance identifier.
-     */
-    public String getInstanceId()
-    {
-        return turbineId;
-    }
-
-    /**
-     * <p> Returns an identifier that is unique within this turbine
-     * instance, but does not have random-like apearance.
-     *
-     * @return A String with the non-random looking instance
-     * identifier.
-     */
-    public String getUniqueId()
-    {
-        int current;
-        synchronized (TurbineUniqueIdService.class)
-        {
-            current = counter++;
-        }
-        String id = Integer.toString(current);
-
-        // If you manage to get more than 100 million of ids, you'll
-        // start getting ids longer than 8 characters.
-        if (current < 100000000)
-        {
-            id = ("00000000" + id).substring(id.length());
-        }
-        return id;
-    }
-
-    /**
-     * <p> Returns a unique identifier that looks like random data.
-     *
-     * @return A String with the random looking instance identifier.
-     */
-    public String getPseudorandomId()
-    {
-        return GenerateUniqueId.getIdentifier();
-    }
-}
diff --git a/src/java/org/apache/turbine/services/uniqueid/UniqueIdService.java b/src/java/org/apache/turbine/services/uniqueid/UniqueIdService.java
deleted file mode 100644
index 9cede27..0000000
--- a/src/java/org/apache/turbine/services/uniqueid/UniqueIdService.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package org.apache.turbine.services.uniqueid;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.Service;
-
-/**
- * <p> This service provides unique identifiers for the instance of
- * Turbine, and for objects it creates.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public interface UniqueIdService
-        extends Service
-{
-    String SERVICE_NAME = "UniqueIdService";
-
-    /**
-     * <p> Returs an identifer of this Turbine instance that is unique
-     * both on the server and worldwide.
-     *
-     * @return A String with the instance identifier.
-     */
-    String getInstanceId();
-
-    /**
-     * <p> Returns an identifier that is unique within this turbine
-     * instance, but does not have random-like apearance.
-     *
-     * <p> This method is intended to work fast; it can be used for
-     * creating names of temporary files.
-     *
-     * @return A String with the non-random looking instance
-     * identifier.
-     * */
-    String getUniqueId();
-
-    /**
-     * <p> Returns a unique identifier that looks like random data.
-     *
-     * <p> This method provides indentifiers in a way that makes it
-     * hard to guess or count, but still ensures their uniqueness
-     * within this instance of Turbine.  It can be used for generating
-     * cookies or other data that travels back and forth between
-     * server and browser, and is potentialy security sensitive.
-     *
-     * @return A String with the random looking instance identifier.
-     */
-    String getPseudorandomId();
-}
diff --git a/src/java/org/apache/turbine/services/uniqueid/package.html b/src/java/org/apache/turbine/services/uniqueid/package.html
deleted file mode 100644
index 7cb04cb..0000000
--- a/src/java/org/apache/turbine/services/uniqueid/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Returns unique identifiers for session tracking, cookies etc.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/upload/BaseUploadService.java b/src/java/org/apache/turbine/services/upload/BaseUploadService.java
deleted file mode 100644
index 626430b..0000000
--- a/src/java/org/apache/turbine/services/upload/BaseUploadService.java
+++ /dev/null
@@ -1,186 +0,0 @@
-package org.apache.turbine.services.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.servlet.TurbineServlet;
-import org.apache.turbine.util.ServletUtils;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * <p> This class is a base implementation of
- * {@link org.apache.turbine.services.upload.UploadService}.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public abstract class BaseUploadService
-        extends TurbineBaseService
-        implements UploadService
-{
-    /**
-     * A maximum lenght of a single header line that will be
-     * parsed. (1024 bytes).
-     */
-    public static final int MAX_HEADER_SIZE = 1024;
-
-    /**
-     * Initializes the service.
-     *
-     * This method processes the repository path, to make it relative to the
-     * web application root, if neccessary
-     */
-    public void init()
-    {
-        String path = getProperties()
-                .getProperty(UploadService.REPOSITORY_KEY,
-                        UploadService.REPOSITORY_DEFAULT.toString());
-        if (!path.startsWith("/"))
-        {
-            String realPath = TurbineServlet.getRealPath(path);
-            if (realPath != null)
-            {
-                path = realPath;
-            }
-        }
-        getProperties().setProperty(UploadService.REPOSITORY_KEY, path);
-        setInit(true);
-    }
-
-    /**
-     * <p> Processes an <a href="http://rf.cx/rfc1867.html">RFC
-     * 1867</a> compliant <code>multipart/form-data</code> stream.
-     *
-     * @param req The servlet request to be parsed.
-     * @param params The ParameterParser instance to insert form
-     * fields into.
-     * @param path The location where the files should be stored.
-     * @exception TurbineException If there are problems reading/parsing
-     * the request or storing files.
-     */
-    public abstract void parseRequest(HttpServletRequest req,
-                                      ParameterParser params,
-                                      String path)
-            throws TurbineException;
-
-    /**
-     * <p> Retrieves the value of <code>size.max</code> property of the
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The maximum upload size.
-     */
-    public long getSizeMax()
-    {
-        return getConfiguration().getLong(
-                UploadService.SIZE_MAX_KEY,
-                UploadService.SIZE_MAX_DEFAULT);
-    }
-
-    /**
-     * <p> Retrieves the value of <code>size.threshold</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The threshold beyond which files are written directly to disk.
-     */
-    public int getSizeThreshold()
-    {
-        return getConfiguration().getInt(
-                UploadService.SIZE_THRESHOLD_KEY,
-                UploadService.SIZE_THRESHOLD_DEFAULT);
-    }
-
-    /**
-     * <p> Retrieves the value of the <code>repository</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The repository.
-     */
-    public String getRepository()
-    {
-        // get the reposity value from TR.props
-        String tmpPath = getConfiguration().getString(
-                UploadService.REPOSITORY_KEY,
-                UploadService.REPOSITORY_DEFAULT);
-
-        // return the expanded path name
-        ServletConfig config = Turbine.getTurbineServletConfig();
-        return ServletUtils.expandRelative(config, tmpPath);
-
-    }
-
-    /**
-     * Retrieves the value of the 'automatic' property of {@link
-     * UploadService}. This reports whether the Parameter parser
-     * should allow "automatic" uploads if it is submitted to
-     * Turbine.
-     *
-     * @return The value of 'automatic' property of {@link
-     * UploadService}.
-     */
-    public boolean getAutomatic()
-    {
-        return getConfiguration().getBoolean(
-                UploadService.AUTOMATIC_KEY,
-                UploadService.AUTOMATIC_DEFAULT);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/upload/TurbineUpload.java b/src/java/org/apache/turbine/services/upload/TurbineUpload.java
deleted file mode 100644
index b0a1bd6..0000000
--- a/src/java/org/apache/turbine/services/upload/TurbineUpload.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.apache.turbine.services.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.turbine.services.InstantiationException;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * <p> This is a facade class for {@link UploadService}.
- *
- * <p> This class provides static methods that retrieve the configured
- * (in TurbineResource.properties) implementation of {@link
- * UploadService} and perform certain operations on it.  It uses
- * constants defined in {@link UploadService} interface for accessing
- * the service's properties and default values for them.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public abstract class TurbineUpload
-{
-    /**
-     * <p> Retrieves an instance of system's configured implementation
-     * of <code>UploadService</code>
-     *
-     * @return An instance of UploadService
-     */
-    public static UploadService getService()
-    {
-        return (UploadService) TurbineServices.getInstance().
-                getService(UploadService.SERVICE_NAME);
-    }
-
-    /**
-     * Checks whether an Upload Service is configured.
-     * This method is safe to call even with no Upload
-     * service installed.
-     *
-     * @return True if an upload Service is configured
-     */
-    public static boolean isAvailable()
-    {
-        UploadService upload = null;
-        try
-        {
-            upload = getService();
-        }
-        catch (InstantiationException ie)
-        {
-            // If the service couldn't be instantiated, it obviously
-            // isn't configured.
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Retrieves the value of the 'automatic' property of {@link
-     * UploadService}. This reports whether the Upload Service
-     * is available and (if yes), the Parameter parser should
-     * allow "automatic" uploads if it is submitted to Turbine.
-     *
-     * This method is safe to call even with no Upload Service
-     * configured.
-     *
-     * @return The value of 'automatic' property of {@link
-     * UploadService}.
-     */
-    public static boolean getAutomatic()
-    {
-        // Short circuit evaluation of the && operator!
-        return isAvailable() && getService().getAutomatic();
-    }
-
-    /**
-     * <p> Retrieves the value of 'size.max' property of {@link
-     * UploadService}.
-     *
-     * @return The value of 'size.max' property of {@link
-     * UploadService}.
-     */
-    public static long getSizeMax()
-    {
-        return getService().getSizeMax();
-    }
-
-    /**
-     * <p> Retrieves the value of <code>size.threshold</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The threshold beyond which files are written directly to disk.
-     */
-    public static int getSizeThreshold()
-    {
-        return getService().getSizeThreshold();
-    }
-
-    /**
-     * <p> Retrieves the value of the <code>repository</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The repository.
-     */
-    public static String getRepository()
-    {
-        return getService().getRepository();
-    }
-
-    /**
-     * <p> Performs parsing the request and storing files and form
-     * fields.  Default file repository is used.  This method is
-     * called by the {@link ParameterParser} if automatic upload is
-     * enabled.
-     *
-     * @param req The servlet request to be parsed.
-     * @param params The ParameterParser instance to insert form
-     * fields into.
-     * @exception TurbineException If there are problems reading/parsing
-     * the request or storing files.
-     */
-    public static void parseRequest(HttpServletRequest req,
-                                    ParameterParser params)
-            throws TurbineException
-    {
-        UploadService upload = getService();
-        upload.parseRequest(req, params, upload.getRepository());
-    }
-
-    /**
-     * <p> Performs parsing the request and storing files and form
-     * fields.  Custom file repository may be specified.  You can call
-     * this method in your file upload {@link
-     * org.apache.turbine.modules.Action} to if you need to specify a
-     * custom directory for storing files.
-     *
-     * @param req The servlet request to be parsed.
-     * @param params The ParameterParser instance to insert form
-     * fields into.
-     * @param path The location where the files should be stored.
-     * @exception TurbineException If there are problems reading/parsing
-     * the request or storing files.
-     */
-    public static void parseRequest(HttpServletRequest req,
-                                    ParameterParser params,
-                                    String path)
-            throws TurbineException
-    {
-        getService().parseRequest(req, params, path);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/upload/TurbineUploadService.java b/src/java/org/apache/turbine/services/upload/TurbineUploadService.java
deleted file mode 100644
index 2f47437..0000000
--- a/src/java/org/apache/turbine/services/upload/TurbineUploadService.java
+++ /dev/null
@@ -1,303 +0,0 @@
-package org.apache.turbine.services.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.UnsupportedEncodingException;
-
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.fileupload.DiskFileUpload;
-import org.apache.commons.fileupload.FileItem;
-import org.apache.commons.fileupload.FileUploadException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * <p> This class is an implementation of {@link UploadService}.
- *
- * <p> Files will be stored in temporary disk storage on in memory,
- * depending on request size, and will be available from the {@link
- * org.apache.turbine.util.ParameterParser} as {@link
- * org.apache.turbine.util.upload.FileItem}s.
- *
- * <p>This implementation of {@link UploadService} handles multiple
- * files per single html widget, sent using multipar/mixed encoding
- * type, as specified by RFC 1867.  Use {@link
- * org.apache.turbine.util.ParameterParser#getFileItems(String)} to
- * acquire an array of {@link
- * org.apache.turbine.util.upload.FileItem}s associated with given
- * html widget.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineUploadService
-        extends TurbineBaseService
-        implements UploadService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineUploadService.class);
-
-    /** A File Upload object for the actual uploading */
-    protected DiskFileUpload fileUpload = null;
-
-    /** Auto Upload yes? */
-    private boolean automatic;
-
-    /**
-     * Initializes the service.
-     *
-     * This method processes the repository path, to make it relative to the
-     * web application root, if neccessary
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        String repoPath = conf.getString(
-                UploadService.REPOSITORY_KEY,
-                UploadService.REPOSITORY_DEFAULT);
-
-        if (!repoPath.startsWith("/"))
-        {
-            // If our temporary directory is in the application
-            // space, try to create it. If this fails, throw
-            // an exception.
-            String testPath = Turbine.getRealPath(repoPath);
-            File testDir = new File(testPath);
-            if (!testDir.exists())
-            {
-                if (!testDir.mkdirs())
-                {
-                    throw new InitializationException(
-                            "Could not create target directory!");
-                }
-            }
-            repoPath = testPath;
-            conf.setProperty(UploadService.REPOSITORY_KEY, repoPath);
-        }
-
-        log.debug("Upload Path is now " + repoPath);
-
-        long sizeMax = conf.getLong(
-                UploadService.SIZE_MAX_KEY,
-                UploadService.SIZE_MAX_DEFAULT);
-
-        log.debug("Max Size " + sizeMax);
-
-        int sizeThreshold = conf.getInt(
-                UploadService.SIZE_THRESHOLD_KEY,
-                UploadService.SIZE_THRESHOLD_DEFAULT);
-
-        log.debug("Threshold Size " + sizeThreshold);
-
-        automatic = conf.getBoolean(
-                UploadService.AUTOMATIC_KEY,
-                UploadService.AUTOMATIC_DEFAULT);
-
-        log.debug("Auto Upload " + automatic);
-
-        fileUpload = new DiskFileUpload();
-        fileUpload.setSizeMax(sizeMax);
-        fileUpload.setSizeThreshold(sizeThreshold);
-        fileUpload.setRepositoryPath(repoPath);
-
-        setInit(true);
-    }
-
-    /**
-     * <p> Retrieves the value of <code>size.max</code> property of the
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The maximum upload size.
-     */
-    public long getSizeMax()
-    {
-        return fileUpload.getSizeMax();
-    }
-
-    /**
-     * <p> Retrieves the value of <code>size.threshold</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The threshold beyond which files are written directly to disk.
-     */
-    public int getSizeThreshold()
-    {
-        return fileUpload.getSizeThreshold();
-    }
-
-    /**
-     * Retrieves the value of the 'automatic' property of {@link
-     * UploadService}. This reports whether the Parameter parser
-     * should allow "automatic" uploads if it is submitted to
-     * Turbine.
-     *
-     * @return The value of 'automatic' property of {@link
-     * UploadService}.
-     */
-    public boolean getAutomatic()
-    {
-        return automatic;
-    }
-
-    /**
-     * <p> Retrieves the value of the <code>repository</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The repository.
-     */
-    public String getRepository()
-    {
-        return fileUpload.getRepositoryPath();
-    }
-
-    /**
-     * <p> Processes an <a href="http://rf.cx/rfc1867.html">RFC
-     * 1867</a> compliant <code>multipart/form-data</code> stream.
-     *
-     * @param req The servlet request to be parsed.
-     * @param params The ParameterParser instance to insert form
-     * fields into.
-     * @param path The location where the files should be stored.
-     * @exception TurbineException Problems reading/parsing the
-     * request or storing the uploaded file(s).
-     */
-    public void parseRequest(HttpServletRequest req,
-                             ParameterParser params,
-                             String path)
-            throws TurbineException
-    {
-        String contentType = req.getHeader(CONTENT_TYPE);
-        if (!contentType.startsWith(MULTIPART_FORM_DATA))
-        {
-            throw new TurbineException("the request doesn't contain a " +
-                    MULTIPART_FORM_DATA + " stream");
-        }
-        int requestSize = req.getContentLength();
-        if (requestSize == -1)
-        {
-            throw new TurbineException("the request was rejected because " +
-                    "it's size is unknown");
-        }
-        if (requestSize > getSizeMax())
-        {
-            throw new TurbineException("the request was rejected because " +
-                    "it's size exceeds allowed range");
-        }
-
-        try
-        {
-            List fileList = fileUpload
-                    .parseRequest(req, 
-                            getSizeThreshold(),
-                            getSizeMax(),
-                            path);
-
-            if (fileList != null)
-            {
-                for (Iterator it = fileList.iterator(); it.hasNext();)
-                {
-                    FileItem fi = (FileItem) it.next();
-                    if (fi.isFormField())
-                    {
-                        log.debug("Found an simple form field: " + fi.getFieldName() +", adding value " + fi.getString());
-                        
-                        String value = null;
-                        try
-                        {
-                            value = fi.getString(params.getCharacterEncoding());
-                        }
-                        catch (UnsupportedEncodingException e)
-                        {
-                            log.error(params.getCharacterEncoding()
-                                    + " encoding is not supported."
-                                    + "Used the default when reading form data.");
-                            value = fi.getString();
-                        }
-                        params.append(fi.getFieldName(), value);
-                    }
-                    else
-                    {
-                        log.debug("Found an uploaded file: " + fi.getFieldName());
-                        log.debug("It has " + fi.getSize() + " Bytes and is " + (fi.isInMemory() ? "" : "not ") + "in Memory");
-                        log.debug("Adding FileItem as " + fi.getFieldName() + " to the params");
-                        params.append(fi.getFieldName(), fi);
-                    }
-                }
-            }
-        }
-        catch (FileUploadException e)
-        {
-            throw new TurbineException(e);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/upload/UploadService.java b/src/java/org/apache/turbine/services/upload/UploadService.java
deleted file mode 100644
index 8199ac5..0000000
--- a/src/java/org/apache/turbine/services/upload/UploadService.java
+++ /dev/null
@@ -1,234 +0,0 @@
-package org.apache.turbine.services.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * <p> This service handles parsing <code>multipart/form-data</code>
- * POST requests and turing them into form fields and uploaded files.
- * This can be either performed automatically by the {@link
- * org.apache.turbine.util.ParameterParser} or manually by an user
- * definded {@link org.apache.turbine.modules.Action}.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @version $Id$
- */
-public interface UploadService
-        extends Service
-{
-    /**
-     * HTTP header.
-     */
-    String CONTENT_TYPE = "Content-type";
-
-    /**
-     * HTTP header.
-     */
-    String CONTENT_DISPOSITION = "Content-disposition";
-
-    /**
-     * HTTP header base type.
-     */
-    String MULTIPART = "multipart";
-
-    /**
-     * HTTP header base type modifier.
-     */
-    String FORM_DATA = "form-data";
-
-    /**
-     * HTTP header base type modifier.
-     */
-    String MIXED = "mixed";
-
-    /**
-     * HTTP header.
-     */
-    String MULTIPART_FORM_DATA =
-            MULTIPART + '/' + FORM_DATA;
-
-    /**
-     * HTTP header.
-     */
-    String MULTIPART_MIXED = MULTIPART + '/' + MIXED;
-
-    /**
-     * The key in the TurbineResources.properties that references this
-     * service.
-     */
-    String SERVICE_NAME = "UploadService";
-
-    /**
-     * The key in UploadService properties in
-     * TurbineResources.properties 'automatic' property.
-     */
-    String AUTOMATIC_KEY = "automatic";
-
-    /**
-     * <p> The default value of 'automatic' property
-     * (<code>false</code>).  If set to <code>true</code>, parsing the
-     * multipart request will be performed automaticaly by {@link
-     * org.apache.turbine.util.ParameterParser}.  Otherwise, an {@link
-     * org.apache.turbine.modules.Action} may decide to to parse the
-     * request by calling {@link #parseRequest(HttpServletRequest,
-     * ParameterParser, String) parseRequest} manually.
-     */
-    boolean AUTOMATIC_DEFAULT = false;
-
-    /**
-     * The request parameter name for overriding 'repository' property
-     * (path).
-     */
-    String REPOSITORY_PARAMETER = "path";
-
-    /**
-     * The key in UploadService properties in
-     * TurbineResources.properties 'repository' property.
-     */
-    String REPOSITORY_KEY = "repository";
-
-    /**
-     * <p> The default value of 'repository' property (.).  This is
-     * the directory where uploaded fiels will get stored temporarily.
-     * Note that "."  is whatever the servlet container chooses to be
-     * it's 'current directory'.
-     */
-    String REPOSITORY_DEFAULT = ".";
-
-    /**
-     * The key in UploadService properties in
-     * TurbineResources.properties 'size.max' property.
-     */
-    String SIZE_MAX_KEY = "size.max";
-
-    /**
-     * <p> The default value of 'size.max' property (1 megabyte =
-     * 1048576 bytes).  This is the maximum size of POST request that
-     * will be parsed by the uploader.  If you need to set specific
-     * limits for your users, set this property to the largest limit
-     * value, and use an action + no auto upload to enforce limits.
-     *
-     */
-    long SIZE_MAX_DEFAULT = 1048576;
-
-    /**
-     * The key in UploadService properties in
-     * TurbineResources.properties 'size.threshold' property.
-     */
-    String SIZE_THRESHOLD_KEY = "size.threshold";
-
-    /**
-     * <p> The default value of 'size.threshold' property (10
-     * kilobytes = 10240 bytes).  This is the maximum size of a POST
-     * request that will have it's components stored temporarily in
-     * memory, instead of disk.
-     */
-    int SIZE_THRESHOLD_DEFAULT = 10240;
-
-    /**
-     * <p> This method performs parsing the request, and storing the
-     * acquired information in apropriate places.
-     *
-     * @param req The servlet request to be parsed.
-     * @param params The ParameterParser instance to insert form
-     * fields into.
-     * @param path The location where the files should be stored.
-     * @exception TurbineException Problems reading/parsing the
-     * request or storing the uploaded file(s).
-     */
-    void parseRequest(HttpServletRequest req,
-                      ParameterParser params,
-                      String path)
-            throws TurbineException;
-
-    /**
-     * <p> Retrieves the value of <code>size.max</code> property of the
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The maximum upload size.
-     */
-    long getSizeMax();
-
-    /**
-     * <p> Retrieves the value of <code>size.threshold</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The threshold beyond which files are written directly to disk.
-     */
-    int getSizeThreshold();
-
-    /**
-     * <p> Retrieves the value of the <code>repository</code> property of
-     * {@link org.apache.turbine.services.upload.UploadService}.
-     *
-     * @return The repository.
-     */
-    String getRepository();
-
-    /**
-     * <p> Retrieves the value of 'automatic' property of {@link
-     * UploadService}.
-     *
-     * @return The value of 'automatic' property of {@link
-     * UploadService}.
-     */
-    boolean getAutomatic();
-}
diff --git a/src/java/org/apache/turbine/services/upload/package.html b/src/java/org/apache/turbine/services/upload/package.html
deleted file mode 100644
index 42f08e8..0000000
--- a/src/java/org/apache/turbine/services/upload/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The upload service processes data uploaded by the user from the browser.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/velocity/TurbineVelocity.java b/src/java/org/apache/turbine/services/velocity/TurbineVelocity.java
deleted file mode 100644
index 25da7b2..0000000
--- a/src/java/org/apache/turbine/services/velocity/TurbineVelocity.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package org.apache.turbine.services.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.OutputStream;
-import java.io.Writer;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This is a simple static accessor to common Velocity tasks such as
- * getting an instance of a context as well as handling a request for
- * processing a template.
- * <pre>
- * Context context = TurbineVelocity.getContext(data);
- * context.put("message", "Hello from Turbine!");
- * String results = TurbineVelocity.handleRequest(context, "helloWorld.vm");
- * data.getPage().getBody().addElement(results);
- * </pre>
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com.com">Jason van Zyl</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class TurbineVelocity
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a VelocityService implementation instance
-     */
-    public static VelocityService getService()
-    {
-        return (VelocityService) TurbineServices
-                .getInstance().getService(VelocityService.SERVICE_NAME);
-    }
-
-    /**
-     * This allows you to pass in a context and a path to a template
-     * file and then grabs an instance of the velocity service and
-     * processes the template and returns the results as a String
-     * object.
-     *
-     * @param context A Context.
-     * @param template The path for the template files.
-     * @return A String.
-     * @exception Exception a generic exception.
-     */
-    public static String handleRequest(Context context, String template)
-            throws Exception
-    {
-        return getService().handleRequest(context, template);
-    }
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param template A String with the filename of the template.
-     * @param out A OutputStream where we will write the process template as
-     * a String.
-     * @exception Exception a generic exception.
-     */
-    public static void handleRequest(Context context, String template,
-                                     OutputStream out)
-            throws Exception
-    {
-        getService().handleRequest(context, template, out);
-    }
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param template A String with the filename of the template.
-     * @param writer A Writer where we will write the process template as
-     * a String.
-     * @exception Exception a generic exception.
-     */
-    public static void handleRequest(Context context,
-                                     String template,
-                                     Writer writer)
-            throws Exception
-    {
-        getService().handleRequest(context, template, writer);
-    }
-
-    /**
-     * This returns a Context that you can pass into handleRequest
-     * once you have populated it with information that the template
-     * will know about.
-     * @deprecated Use the PipelineData version instead.
-     * @param data A Turbine RunData.
-     * @return A Context.
-     */
-    public static Context getContext(RunData data)
-    {
-        return getService().getContext(data);
-    }
-    
-    /**
-     * This returns a Context that you can pass into handleRequest
-     * once you have populated it with information that the template
-     * will know about.
-     *
-     * @param data A Turbine RunData.
-     * @return A Context.
-     */
-    public static Context getContext(PipelineData pipelineData)
-    {
-        return getService().getContext(pipelineData);
-    }
-
-    /**
-     * This method returns a blank Context object, which
-     * also contains the global context object. Do not use
-     * this method if you need an empty context object! Use
-     * getNewContext for this.
-     *
-     * @return A WebContext.
-     */
-    public static Context getContext()
-    {
-        return getService().getContext();
-    }
-
-    /**
-     * This method returns a new, empty Context object.
-     *
-     * @return A WebContext.
-     */
-    public static Context getNewContext()
-    {
-        return getService().getNewContext();
-    }
-
-    /**
-     * Performs post-request actions (releases context
-     * tools back to the object pool).
-     *
-     * @param context a Velocity Context
-     */
-    public static void requestFinished(Context context)
-    {
-        getService().requestFinished(context);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java b/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
deleted file mode 100644
index f03b222..0000000
--- a/src/java/org/apache/turbine/services/velocity/TurbineVelocityService.java
+++ /dev/null
@@ -1,703 +0,0 @@
-package org.apache.turbine.services.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.collections.ExtendedProperties;
-import org.apache.commons.configuration.Configuration;
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.pull.PullService;
-import org.apache.turbine.services.pull.TurbinePull;
-import org.apache.turbine.services.template.BaseTemplateEngineService;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-import org.apache.velocity.VelocityContext;
-import org.apache.velocity.app.Velocity;
-import org.apache.velocity.app.event.EventCartridge;
-import org.apache.velocity.app.event.MethodExceptionEventHandler;
-import org.apache.velocity.context.Context;
-import org.apache.velocity.runtime.log.SimpleLog4JLogSystem;
-
-/**
- * This is a Service that can process Velocity templates from within a
- * Turbine Screen. It is used in conjunction with the templating service
- * as a Templating Engine for templates ending in "vm". It registers
- * itself as translation engine with the template service and gets
- * accessed from there. After configuring it in your properties, it
- * should never be necessary to call methods from this service directly.
- *
- * Here's an example of how you might use it from a
- * screen:<br>
- *
- * <code>
- * Context context = TurbineVelocity.getContext(data);<br>
- * context.put("message", "Hello from Turbine!");<br>
- * String results = TurbineVelocity.handleRequest(context,"helloWorld.vm");<br>
- * data.getPage().getBody().addElement(results);<br>
- * </code>
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:sean@informage.ent">Sean Legassick</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a> 
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class TurbineVelocityService
-        extends BaseTemplateEngineService
-        implements VelocityService,
-                   MethodExceptionEventHandler
-{
-    /** The generic resource loader path property in velocity.*/
-    private static final String RESOURCE_LOADER_PATH = ".resource.loader.path";
-    
-    /** Default character set to use if not specified in the RunData object. */
-    private static final String DEFAULT_CHAR_SET = "ISO-8859-1";
-
-    /** The prefix used for URIs which are of type <code>jar</code>. */
-    private static final String JAR_PREFIX = "jar:";
-
-    /** The prefix used for URIs which are of type <code>absolute</code>. */
-    private static final String ABSOLUTE_PREFIX = "file://";
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineVelocityService.class);
-
-    /** Is the pullModelActive? */
-    private boolean pullModelActive = false;
-
-    /** Shall we catch Velocity Errors and report them in the log file? */
-    private boolean catchErrors = true;
-
-    /** Internal Reference to the pull Service */
-    private PullService pullService = null;
-
-
-    /**
-     * Load all configured components and initialize them. This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        try
-        {
-            initVelocity();
-
-            // We can only load the Pull Model ToolBox
-            // if the Pull service has been listed in the TR.props
-            // and the service has successfully been initialized.
-            if (TurbinePull.isRegistered())
-            {
-                pullModelActive = true;
-
-                pullService = TurbinePull.getService();
-
-                log.debug("Activated Pull Tools");
-            }
-
-            // Register with the template service.
-            registerConfiguration(VelocityService.VELOCITY_EXTENSION);
-
-            setInit(true);
-        }
-        catch (Exception e)
-        {
-            throw new InitializationException(
-                "Failed to initialize TurbineVelocityService", e);
-        }
-    }
-
-
-    /**
-     * Inits the service using servlet parameters to obtain path to the
-     * configuration file.
-     *
-     * @param config The ServletConfiguration from Turbine
-     *
-     * @throws InitializationException Something went wrong when starting up.
-     * @deprecated use init() instead.
-     */
-    public void init(ServletConfig config)
-            throws InitializationException
-    {
-        init();
-    }
-
-
-    /**
-     * Create a Context object that also contains the globalContext.
-     *
-     * @return A Context object.
-     */
-    public Context getContext()
-    {
-        Context globalContext = 
-                pullModelActive ? pullService.getGlobalContext() : null;
-
-        Context ctx = new VelocityContext(globalContext);
-        return ctx;
-    }
-
-    /**
-     * This method returns a new, empty Context object.
-     *
-     * @return A Context Object.
-     */
-    public Context getNewContext()
-    {
-        Context ctx = new VelocityContext();
-
-        // Attach an Event Cartridge to it, so we get exceptions
-        // while invoking methods from the Velocity Screens
-        EventCartridge ec = new EventCartridge();
-        ec.addEventHandler(this);
-        ec.attachToContext(ctx);
-        return ctx;
-    }
-
-    /**
-     * MethodException Event Cartridge handler
-     * for Velocity.
-     *
-     * It logs an execption thrown by the velocity processing
-     * on error level into the log file
-     *
-     * @param clazz The class that threw the exception
-     * @param method The Method name that threw the exception
-     * @param e The exception that would've been thrown
-     * @return A valid value to be used as Return value
-     * @throws Exception We threw the exception further up
-     */
-    public Object methodException(Class clazz, String method, Exception e)
-            throws Exception
-    {
-        log.error("Class " + clazz.getName() + "." + method + " threw Exception", e);
-
-        if (!catchErrors)
-        {
-            throw e;
-        }
-
-        return "[Turbine caught an Error here. Look into the turbine.log for further information]";
-    }
-
-    /**
-     * Create a Context from the RunData object.  Adds a pointer to
-     * the RunData object to the VelocityContext so that RunData
-     * is available in the templates.
-     * @deprecated. Use PipelineData version.
-     * @param data The Turbine RunData object.
-     * @return A clone of the WebContext needed by Velocity.
-     */
-    public Context getContext(RunData data)
-    {
-        // Attempt to get it from the data first.  If it doesn't
-        // exist, create it and then stuff it into the data.
-        Context context = (Context)
-            data.getTemplateInfo().getTemplateContext(VelocityService.CONTEXT);
-
-        if (context == null)
-        {
-            context = getContext();
-            context.put(VelocityService.RUNDATA_KEY, data);
-
-            if (pullModelActive)
-            {
-                // Populate the toolbox with request scope, session scope
-                // and persistent scope tools (global tools are already in
-                // the toolBoxContent which has been wrapped to construct
-                // this request-specific context).
-                pullService.populateContext(context, data);
-            }
-
-            data.getTemplateInfo().setTemplateContext(
-                VelocityService.CONTEXT, context);
-        }
-        return context;
-    }
-
-    /**
-     * Create a Context from the PipelineData object.  Adds a pointer to
-     * the RunData object to the VelocityContext so that RunData
-     * is available in the templates.
-     *
-     * @param data The Turbine RunData object.
-     * @return A clone of the WebContext needed by Velocity.
-     */
-    public Context getContext(PipelineData pipelineData)
-    {
-        //Map runDataMap = (Map)pipelineData.get(RunData.class);
-        RunData data = (RunData)pipelineData;
-        // Attempt to get it from the data first.  If it doesn't
-        // exist, create it and then stuff it into the data.
-        Context context = (Context)
-            data.getTemplateInfo().getTemplateContext(VelocityService.CONTEXT);
-
-        if (context == null)
-        {
-            context = getContext();
-            context.put(VelocityService.RUNDATA_KEY, data);
-            // we will add both data and pipelineData to the context.
-            context.put(VelocityService.PIPELINEDATA_KEY, pipelineData);
-
-            if (pullModelActive)
-            {
-                // Populate the toolbox with request scope, session scope
-                // and persistent scope tools (global tools are already in
-                // the toolBoxContent which has been wrapped to construct
-                // this request-specific context).
-                pullService.populateContext(context, pipelineData);
-            }
-
-            data.getTemplateInfo().setTemplateContext(
-                VelocityService.CONTEXT, context);
-        }
-        return context;
-    }
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context  The populated context.
-     * @param filename The file name of the template.
-     * @return The process template as a String.
-     *
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    public String handleRequest(Context context, String filename)
-        throws TurbineException
-    {
-        String results = null;
-        ByteArrayOutputStream bytes = null;
-        OutputStreamWriter writer = null;
-        String charset = getCharSet(context);
-
-        try
-        {
-            bytes = new ByteArrayOutputStream();
-
-            writer = new OutputStreamWriter(bytes, charset);
-
-            executeRequest(context, filename, writer);
-            writer.flush();
-            results = bytes.toString(charset);
-        }
-        catch (Exception e)
-        {
-            renderingError(filename, e);
-        }
-        finally
-        {
-            try
-            {
-                if (bytes != null)
-                {
-                    bytes.close();
-                }
-            }
-            catch (IOException ignored)
-            {
-                // do nothing.
-            }
-        }
-        return results;
-    }
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param filename A String with the filename of the template.
-     * @param output A OutputStream where we will write the process template as
-     * a String.
-     *
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    public void handleRequest(Context context, String filename,
-                              OutputStream output)
-            throws TurbineException
-    {
-        String charset  = getCharSet(context);
-        OutputStreamWriter writer = null;
-
-        try
-        {
-            writer = new OutputStreamWriter(output, charset);
-            executeRequest(context, filename, writer);
-        }
-        catch (Exception e)
-        {
-            renderingError(filename, e);
-        }
-        finally
-        {
-            try
-            {
-                if (writer != null)
-                {
-                    writer.flush();
-                }
-            }
-            catch (Exception ignored)
-            {
-                // do nothing.
-            }
-        }
-    }
-
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param filename A String with the filename of the template.
-     * @param writer A Writer where we will write the process template as
-     * a String.
-     *
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    public void handleRequest(Context context, String filename, Writer writer)
-            throws TurbineException
-    {
-        try
-        {
-            executeRequest(context, filename, writer);
-        }
-        catch (Exception e)
-        {
-            renderingError(filename, e);
-        }
-        finally
-        {
-            try
-            {
-                if (writer != null)
-                {
-                    writer.flush();
-                }
-            }
-            catch (Exception ignored)
-            {
-                // do nothing.
-            }
-        }
-    }
-
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context. Apply the character and template
-     * encodings from RunData to the result.
-     *
-     * @param context A Context.
-     * @param filename A String with the filename of the template.
-     * @param writer A OutputStream where we will write the process template as
-     * a String.
-     *
-     * @throws Exception A problem occured.
-     */
-    private void executeRequest(Context context, String filename,
-                                Writer writer)
-            throws Exception
-    {
-        String encoding = getEncoding(context);
-
-        if (encoding == null)
-        {
-          encoding = DEFAULT_CHAR_SET;
-        }
-		Velocity.mergeTemplate(filename, encoding, context, writer);
-    }
-
-    /**
-     * Retrieve the required charset from the Turbine RunData in the context
-     *
-     * @param context A Context.
-     * @return The character set applied to the resulting String.
-     */
-    private String getCharSet(Context context)
-    {
-        String charset = null;
-
-        Object data = context.get(VelocityService.RUNDATA_KEY);
-        if ((data != null) && (data instanceof RunData))
-        {
-            charset = ((RunData) data).getCharSet();
-        }
-
-        return (StringUtils.isEmpty(charset)) ? DEFAULT_CHAR_SET : charset;
-    }
-
-    /**
-     * Retrieve the required encoding from the Turbine RunData in the context
-     *
-     * @param context A Context.
-     * @return The encoding applied to the resulting String.
-     */
-    private String getEncoding(Context context)
-    {
-        String encoding = null;
-
-        Object data = context.get(VelocityService.RUNDATA_KEY);
-        if ((data != null) && (data instanceof RunData))
-        {
-            encoding = ((RunData) data).getTemplateEncoding();
-        }
-
-        return encoding;
-    }
-
-    /**
-     * Macro to handle rendering errors.
-     *
-     * @param filename The file name of the unrenderable template.
-     * @param e        The error.
-     *
-     * @exception TurbineException Thrown every time.  Adds additional
-     *                             information to <code>e</code>.
-     */
-    private static final void renderingError(String filename, Exception e)
-            throws TurbineException
-    {
-        String err = "Error rendering Velocity template: " + filename;
-        log.error(err, e);
-        throw new TurbineException(err, e);
-    }
-
-    /**
-     * Setup the velocity runtime by using a subset of the
-     * Turbine configuration which relates to velocity.
-     *
-     * @exception Exception An Error occured.
-     */
-    private synchronized void initVelocity()
-        throws Exception
-    {
-        // Get the configuration for this service.
-        Configuration conf = getConfiguration();
-
-        catchErrors = conf.getBoolean(CATCH_ERRORS_KEY, CATCH_ERRORS_DEFAULT);
-        
-        conf.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM_CLASS,
-                SimpleLog4JLogSystem.class.getName());
-        conf.setProperty(Velocity.RUNTIME_LOG_LOGSYSTEM
-                + ".log4j.category", "velocity");
-        
-        Velocity.setExtendedProperties(createVelocityProperties(conf));
-        Velocity.init();
-    }
-
-
-    /**
-     * This method generates the Extended Properties object necessary
-     * for the initialization of Velocity. It also converts the various
-     * resource loader pathes into webapp relative pathes. It also
-     *
-     * @param conf The Velocity Service configuration
-     *
-     * @return An ExtendedProperties Object for Velocity
-     *
-     * @throws Exception If a problem occured while converting the properties.
-     */
-
-    public ExtendedProperties createVelocityProperties(Configuration conf)
-            throws Exception
-    {
-        // This bugger is public, because we want to run some Unit tests
-        // on it.
-
-        ExtendedProperties veloConfig = new ExtendedProperties();
-
-        // Fix up all the template resource loader pathes to be
-        // webapp relative. Copy all other keys verbatim into the
-        // veloConfiguration.
-
-        for (Iterator i = conf.getKeys(); i.hasNext();)
-        {
-            String key = (String) i.next();
-            if (!key.endsWith(RESOURCE_LOADER_PATH))
-            {
-                Object value = conf.getProperty(key);
-                if (value instanceof List) {
-                    for (Iterator itr = ((List)value).iterator(); itr.hasNext();)
-                    {
-                        veloConfig.addProperty(key, itr.next());
-                    }
-                } 
-                else
-                {
-                    veloConfig.addProperty(key, value);
-                }
-                continue; // for()
-            }
-
-            List paths = conf.getList(key, null);
-            if (paths == null)
-            {
-                // We don't copy this into VeloProperties, because
-                // null value is unhealthy for the ExtendedProperties object...
-                continue; // for()
-            }
-
-            Velocity.clearProperty(key);
-
-            // Translate the supplied pathes given here.
-            // the following three different kinds of
-            // pathes must be translated to be webapp-relative
-            //
-            // jar:file://path-component!/entry-component
-            // file://path-component
-            // path/component
-            for (Iterator j = paths.iterator(); j.hasNext();)
-            {
-                String path = (String) j.next();
-
-                log.debug("Translating " + path);
-
-                if (path.startsWith(JAR_PREFIX))
-                {
-                    // skip jar: -> 4 chars
-                    if (path.substring(4).startsWith(ABSOLUTE_PREFIX))
-                    {
-                        // We must convert up to the jar path separator
-                        int jarSepIndex = path.indexOf("!/");
-
-                        // jar:file:// -> skip 11 chars
-                        path = (jarSepIndex < 0)
-                            ? Turbine.getRealPath(path.substring(11))
-                        // Add the path after the jar path separator again to the new url.
-                            : (Turbine.getRealPath(path.substring(11, jarSepIndex)) + path.substring(jarSepIndex));
-
-                        log.debug("Result (absolute jar path): " + path);
-                    }
-                }
-                else if(path.startsWith(ABSOLUTE_PREFIX))
-                {
-                    // skip file:// -> 7 chars
-                    path = Turbine.getRealPath(path.substring(7));
-
-                    log.debug("Result (absolute URL Path): " + path);
-                }
-                // Test if this might be some sort of URL that we haven't encountered yet.
-                else if(path.indexOf("://") < 0)
-                {
-                    path = Turbine.getRealPath(path);
-
-                    log.debug("Result (normal fs reference): " + path);
-                }
-
-                log.debug("Adding " + key + " -> " + path);
-                // Re-Add this property to the configuration object
-                veloConfig.addProperty(key, path);
-            }
-        }
-        return veloConfig;
-    }
-
-    /**
-     * Find out if a given template exists. Velocity
-     * will do its own searching to determine whether
-     * a template exists or not.
-     *
-     * @param template String template to search for
-     * @return True if the template can be loaded by Velocity
-     */
-    public boolean templateExists(String template)
-    {
-        return Velocity.templateExists(template);
-    }
-
-    /**
-     * Performs post-request actions (releases context
-     * tools back to the object pool).
-     *
-     * @param context a Velocity Context
-     */
-    public void requestFinished(Context context)
-    {
-        if (pullModelActive)
-        {
-            pullService.releaseTools(context);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/velocity/VelocityService.java b/src/java/org/apache/turbine/services/velocity/VelocityService.java
deleted file mode 100644
index 4d4b932..0000000
--- a/src/java/org/apache/turbine/services/velocity/VelocityService.java
+++ /dev/null
@@ -1,184 +0,0 @@
-package org.apache.turbine.services.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.OutputStream;
-import java.io.Writer;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-import org.apache.velocity.context.Context;
-
-/**
- * Implementations of the VelocityService interface.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public interface VelocityService
-        extends Service
-{
-    /** The Service Name */
-    String SERVICE_NAME = "VelocityService";
-
-    /** Key for storing the Context in the RunData object */
-    String CONTEXT = "VELOCITY_CONTEXT";
-
-    /** The default extension of Velocity Pages */
-    String VELOCITY_EXTENSION = "vm";
-
-    /** The Key for storing the RunData Object in the Context */
-    String RUNDATA_KEY = "data";
-
-    /** The Key for storing the PipelineData Object in the Context */
-    String PIPELINEDATA_KEY = "pipelineData";
-    
-    /** Shall we catch Velocity Errors and report them? */
-    String CATCH_ERRORS_KEY = "catch.errors";
-
-    /** Default: Yes */
-    boolean CATCH_ERRORS_DEFAULT = true;
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param template A String with the filename of the template.
-     * @return The process template as a String.
-     * @exception Exception a generic exception.
-     */
-    String handleRequest(Context context, String template)
-            throws Exception;
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param filename A String with the filename of the template.
-     * @param out A OutputStream where we will write the process template as
-     *        a String.
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    void handleRequest(Context context, String filename, OutputStream out)
-            throws TurbineException;
-
-    /**
-     * Process the request and fill in the template with the values
-     * you set in the Context.
-     *
-     * @param context A Context.
-     * @param filename A String with the filename of the template.
-     * @param writer A Writer where we will write the process template as
-     *        a String.
-     * @throws TurbineException Any exception trown while processing will be
-     *         wrapped into a TurbineException and rethrown.
-     */
-    void handleRequest(Context context, String filename, Writer writer)
-            throws TurbineException;
-
-    /**
-     * Create an empty WebContext object.
-     *
-     * @return An empty WebContext object.
-     */
-    Context getContext();
-
-    /**
-     * This method returns a new, empty Context object.
-     *
-     * @return A WebContext.
-     */
-    Context getNewContext();
-
-    /**
-     * Create a Context from the RunData object.  Adds a pointer to
-     * the RunData object to the Context so that RunData is available in
-     * the templates.
-     *
-     * @param data The Turbine RunData object.
-     * @return A clone of the Context needed by Velocity.
-     */
-    Context getContext(RunData data);
-
-    /**
-     * Create a Context from the RunData object.  Adds a pointer to
-     * the RunData object to the Context so that RunData is available in
-     * the templates.
-     *
-     * @param data The Turbine RunData object.
-     * @return A clone of the Context needed by Velocity.
-     */
-    Context getContext(PipelineData pipelineData);
-
-    
-    
-    /**
-     * Performs post-request actions (releases context
-     * tools back to the object pool).
-     *
-     * @param context a Velocity Context
-     */
-    void requestFinished(Context context);
-}
diff --git a/src/java/org/apache/turbine/services/velocity/package.html b/src/java/org/apache/turbine/services/velocity/package.html
deleted file mode 100644
index e9ba957..0000000
--- a/src/java/org/apache/turbine/services/velocity/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Velocity Service is used to provide Turbine with a Velocity based view. 
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpc.java b/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpc.java
deleted file mode 100644
index 9123cfb..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpc.java
+++ /dev/null
@@ -1,383 +0,0 @@
-package org.apache.turbine.services.xmlrpc;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-
-import java.net.URL;
-
-import java.util.Vector;
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This is a static accesor class for {@link XmlRpcService}.
- *
- * @author <a href="mailto:magnus@handtolvur.is">Magnús Þór Torfason</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- */
-public abstract class TurbineXmlRpc
-{
-    /**
-     * Returns system's configured implementation of {@link XmlRpcService}.
-     *
-     * @return an implementaion of <code>XmlRpcService</code>
-     */
-    public static XmlRpcService getService()
-    {
-        return (XmlRpcService) TurbineServices.getInstance()
-                .getService(XmlRpcService.SERVICE_NAME);
-    }
-
-    /**
-     * Execute a remote procedure call.
-     *
-     * @param url A URL.
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @exception TurbineException
-     */
-    public static Object executeRpc(URL url, String methodName, Vector params)
-            throws TurbineException
-    {
-        return getService().executeRpc(url, methodName, params);
-    }
-
-    /**
-     * Execute a remote procedure call taht requires authentication
-     *
-     * @param url A URL.
-     * @param username The username to try and authenticate with
-     * @param password The password to try and authenticate with
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @exception TurbineException
-     */
-    public static Object executeAuthenticatedRpc(URL url, String username,
-            String password, String methodName, Vector params)
-            throws TurbineException
-    {
-        return getService().executeAuthenticatedRpc(url, username, password,
-                methodName, params);
-    }
-
-    /**
-     * Register an object as a handler for the XmlRpc Server part.
-     *
-     * @param handlerName The name under which we want
-     * to register the service
-     * @param handler The handler object
-     */
-    public static void registerHandler(String handlerName, Object handler)
-    {
-        getService().registerHandler(handlerName, handler);
-    }
-
-    /**
-     * Register an object as a the default handler for
-     * the XmlRpc Server part.
-     *
-     * @param handler The handler object
-     */
-    public static void registerHandler(Object handler)
-    {
-        getService().registerHandler(handler);
-    }
-
-    /**
-     * Unregister a handler.
-     *
-     * @param handlerName The name of the handler to unregister.
-     */
-    public static void unregisterHandler(String handlerName)
-    {
-        getService().unregisterHandler(handlerName);
-    }
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * @param is the stream to read request data from.
-     * @return the response body that needs to be sent to the client.
-     */
-    public static byte[] handleRequest(InputStream is)
-    {
-        return getService().handleRequest(is);
-    }
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server with user
-     * authentication.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * <p> Note that the handlers need to implement AuthenticatedXmlRpcHandler
-     * interface to access the authentication infomration.
-     *
-     * @param is the stream to read request data from.
-     * @param user the user that is making the request.
-     * @param password the password given by user.
-     * @return the response body that needs to be sent to the client.
-     */
-    public static byte[] handleRequest(InputStream is, String user, String password)
-    {
-        return getService().handleRequest(is, user, password);
-    }
-
-    /**
-     * Method to allow a client to send a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void send(String serverURL,
-                            String sourceLocationProperty,
-                            String sourceFileName,
-                            String destinationLocationProperty,
-                            String destinationFileName)
-            throws TurbineException
-    {
-        getService().send(serverURL,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to send a file to a server that
-     * requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void send(String serverURL,
-                            String username,
-                            String password,
-                            String sourceLocationProperty,
-                            String sourceFileName,
-                            String destinationLocationProperty,
-                            String destinationFileName)
-            throws TurbineException
-    {
-        getService().send(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to get a file from a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void get(String serverURL,
-                           String sourceLocationProperty,
-                           String sourceFileName,
-                           String destinationLocationProperty,
-                           String destinationFileName)
-            throws TurbineException
-    {
-        getService().get(serverURL,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to get a file to a server that
-     * requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void get(String serverURL,
-                           String username,
-                           String password,
-                           String sourceLocationProperty,
-                           String sourceFileName,
-                           String destinationLocationProperty,
-                           String destinationFileName)
-            throws TurbineException
-    {
-        getService().get(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * the server
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void remove(String serverURL,
-                              String sourceLocationProperty,
-                              String sourceFileName)
-            throws TurbineException
-    {
-        getService().remove(serverURL,
-                sourceLocationProperty,
-                sourceFileName);
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * a server that requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public static void remove(String serverURL,
-                              String username,
-                              String password,
-                              String sourceLocationProperty,
-                              String sourceFileName)
-            throws TurbineException
-    {
-        getService().remove(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName);
-    }
-
-    /**
-     * Switch client filtering on/off.
-     * @see #acceptClient(java.lang.String)
-     * @see #denyClient(java.lang.String)
-     */
-    public static void setParanoid(boolean state)
-    {
-        getService().setParanoid(state);
-    }
-
-    /**
-     * Add an IP address to the list of accepted clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must
-     * call setParanoid(true) in order for this to have
-     * any effect.
-     *
-     * @see #denyClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    public static void acceptClient(String address)
-    {
-        getService().acceptClient(address);
-    }
-
-    /**
-     * Add an IP address to the list of denied clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must call
-     * setParanoid(true) in order for this to have any effect.
-     *
-     * @see #acceptClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    public static void denyClient(String address)
-    {
-        getService().denyClient(address);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpcService.java b/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpcService.java
deleted file mode 100644
index 60b8e35..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/TurbineXmlRpcService.java
+++ /dev/null
@@ -1,743 +0,0 @@
-package org.apache.turbine.services.xmlrpc;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-
-import java.net.InetAddress;
-import java.net.Socket;
-import java.net.URL;
-import java.net.UnknownHostException;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-import org.apache.turbine.services.xmlrpc.util.FileTransfer;
-import org.apache.turbine.util.TurbineException;
-
-import org.apache.xerces.parsers.SAXParser;
-
-import org.apache.xmlrpc.WebServer;
-import org.apache.xmlrpc.XmlRpc;
-import org.apache.xmlrpc.XmlRpcClient;
-import org.apache.xmlrpc.XmlRpcServer;
-import org.apache.xmlrpc.secure.SecureWebServer;
-
-/**
- * This is a service which will make an xml-rpc call to a remote
- * server.
- *
- * Here's an example of how it would be done:
- * <blockquote><code><pre>
- * XmlRpcService xs =
- *   (XmlRpcService)TurbineServices.getInstance()
- *   .getService(XmlRpcService.XMLRPC_SERVICE_NAME);
- * Vector vec = new Vector();
- * vec.addElement(new Integer(5));
- * URL url = new URL("http://betty.userland.com/RPC2");
- * String name = (String)xs.executeRpc(url, "examples.getStateName", vec);
- * </pre></code></blockquote>
- *
- * <p>TODO: Handle XmlRpc.setDebug(boolean)</p>
- *
- * @author <a href="mailto:josh@stonecottage.com">Josh Lucas</a>
- * @author <a href="mailto:magnus@handtolvur.is">Magnús Þór Torfason</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineXmlRpcService
-        extends TurbineBaseService
-        implements XmlRpcService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineXmlRpcService.class);
-
-    /**
-     * Whether a version of Apache's XML-RPC library greater than 1.1
-     * is available.
-     */
-    protected boolean isModernVersion = false;
-
-    /** The standalone xmlrpc server. */
-    protected WebServer webserver = null;
-
-    /** The encapsulated xmlrpc server. */
-    protected XmlRpcServer server = null;
-
-    /**
-     * The address to listen on.  The default of <code>null</code>
-     * indicates all network interfaces on a multi-homed host.
-     */
-    private InetAddress address = null;
-
-    /** The port to listen on. */
-    protected int port = 0;
-
-    /**
-     * This function initializes the XmlRpcService.This is
-     * a zero parameter variant which queries the Turbine Servlet
-     * for its config.
-     *
-     * @throws InitializationException Something went wrong in the init
-     *         stage
-     */
-    public void init()
-            throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        try
-        {
-            server = new XmlRpcServer();
-
-            // setup JSSE System properties from secure.server.options
-            Configuration secureServerOptions =
-                    conf.subset("secure.server.option");
-
-            if (secureServerOptions != null)
-            {
-                setSystemPropertiesFromConfiguration(secureServerOptions);
-            }
-
-            // Host and port information for the WebServer
-            String addr = conf.getString("address", "0.0.0.0");
-            port = conf.getInt("port", 0);
-
-            if (port != 0)
-            {
-                if (addr != null && addr.length() > 0)
-                {
-                    try
-                    {
-                        address = InetAddress.getByName(addr);
-                    }
-                    catch (UnknownHostException useDefault)
-                    {
-                        address = null;
-                    }
-                }
-
-                log.debug("Port: " + port + ", Address: " + address);
-
-                if (conf.getBoolean("secure.server", false))
-                {
-                    webserver = new SecureWebServer(port, address);
-                }
-                else
-                {
-                    webserver = new WebServer(port, address);
-                }
-            }
-
-            // Set the XML driver to the correct SAX parser class
-            String saxParserClass = 
-                    conf.getString("parser", SAXParser.class.getName());
-
-            XmlRpc.setDriver(saxParserClass);
-
-            // Check if there are any handlers to register at startup
-            for (Iterator keys = conf.getKeys("handler"); keys.hasNext();)
-            {
-                String handler      = (String) keys.next();
-                String handlerName  = handler.substring(handler.indexOf('.')+1);
-                String handlerClass = conf.getString(handler);
-
-                log.debug("Found Handler " + handler + " as " + handlerName + " / " + handlerClass);
-
-                registerHandler(handlerName, handlerClass);
-            }
-
-            // Turn on paranoia for the webserver if requested.
-            boolean stateOfParanoia =
-                    conf.getBoolean("paranoid", false);
-
-            if (stateOfParanoia)
-            {
-                webserver.setParanoid(stateOfParanoia);
-                log.info(XmlRpcService.SERVICE_NAME +
-                        ": Operating in a state of paranoia");
-
-                // Only set the accept/deny client lists if we
-                // are in a state of paranoia as they will just
-                // be ignored so there's no point in setting them.
-
-                // Set the list of clients that can connect
-                // to the xmlrpc server. The accepted client list
-                // will only be consulted if we are paranoid.
-                List acceptedClients =
-                        conf.getList("acceptClient");
-
-                for (int i = 0; i < acceptedClients.size(); i++)
-                {
-                    String acceptClient = (String) acceptedClients.get(i);
-
-                    if (StringUtils.isNotEmpty(acceptClient))
-                    {
-                        webserver.acceptClient(acceptClient);
-                        log.info(XmlRpcService.SERVICE_NAME +
-                                ": Accepting client -> " + acceptClient);
-                    }
-                }
-
-                // Set the list of clients that can connect
-                // to the xmlrpc server. The denied client list
-                // will only be consulted if we are paranoid.
-                List deniedClients = conf.getList("denyClient");
-
-                for (int i = 0; i < deniedClients.size(); i++)
-                {
-                    String denyClient = (String) deniedClients.get(i);
-
-                    if (StringUtils.isNotEmpty(denyClient))
-                    {
-                        webserver.denyClient(denyClient);
-                        log.info(XmlRpcService.SERVICE_NAME +
-                                ": Denying client -> " + denyClient);
-                    }
-                }
-            }
-            // If we have a XML-RPC JAR whose version is greater than the
-            // 1.1 series, the WebServer must be explicitly start()'d.
-            try
-            {
-                Class.forName("org.apache.xmlrpc.XmlRpcRequest");
-                isModernVersion = true;
-                webserver.start();
-            }
-            catch (ClassNotFoundException ignored)
-            {
-                // XmlRpcRequest does not exist in versions 1.1 and lower.
-                // Assume that our WebServer was already started.
-            }
-            log.debug(XmlRpcService.SERVICE_NAME + ": Using " +
-                    "Apache XML-RPC version " +
-                    (isModernVersion ?
-                    "greater than 1.1" : "1.1 or lower"));
-        }
-        catch (Exception e)
-        {
-            String errorMessage = "XMLRPCService failed to initialize";
-            log.error(errorMessage, e);
-            throw new InitializationException(errorMessage, e);
-        }
-
-        setInit(true);
-    }
-
-    /**
-     * This function initializes the XmlRpcService.
-     *
-     * @deprecated Use init() instead.
-     */
-    public void init(ServletConfig config) throws InitializationException
-    {
-        init();
-    }
-
-    /**
-     * Create System properties using the key-value pairs in a given
-     * Configuration.  This is used to set system properties and the
-     * URL https connection handler needed by JSSE to enable SSL
-     * between XML-RPC client and server.
-     *
-     * @param configuration the Configuration defining the System
-     * properties to be set
-     */
-    private void setSystemPropertiesFromConfiguration(Configuration configuration)
-    {
-        for (Iterator i = configuration.getKeys(); i.hasNext();)
-        {
-            String key = (String) i.next();
-            String value = configuration.getString(key);
-
-            log.debug("JSSE option: " + key + " => " + value);
-
-            System.setProperty(key, value);
-        }
-    }
-
-    /**
-     * Register an Object as a default handler for the service.
-     *
-     * @param handler The handler to use.
-     */
-    public void registerHandler(Object handler)
-    {
-        registerHandler("$default", handler);
-    }
-
-    /**
-     * Register an Object as a handler for the service.
-     *
-     * @param handlerName The name the handler is registered under.
-     * @param handler The handler to use.
-     */
-    public void registerHandler(String handlerName,
-                                Object handler)
-    {
-        if (webserver != null)
-        {
-            webserver.addHandler(handlerName, handler);
-        }
-
-        server.addHandler(handlerName, handler);
-        
-        log.debug("Registered Handler " + handlerName + " as " 
-                + handler.getClass().getName() 
-                + ", Server: " + server 
-                + ", Webserver: " + webserver);
-    }
-
-    /**
-     * A helper method that tries to initialize a handler and register it.
-     * The purpose is to check for all the exceptions that may occur in
-     * dynamic class loading and throw an InitializationException on
-     * error.
-     *
-     * @param handlerName The name the handler is registered under.
-     * @param handlerClass The name of the class to use as a handler.
-     * @exception TurbineException Couldn't instantiate handler.
-     */
-    public void registerHandler(String handlerName, String handlerClass)
-            throws TurbineException
-    {
-        try
-        {
-            Object handler = Class.forName(handlerClass).newInstance();
-
-            if (webserver != null)
-            {
-                webserver.addHandler(handlerName, handler);
-            }
-
-            server.addHandler(handlerName, handler);
-        }
-                // those two errors must be passed to the VM
-        catch (ThreadDeath t)
-        {
-            throw t;
-        }
-        catch (OutOfMemoryError t)
-        {
-            throw t;
-        }
-
-        catch (Throwable t)
-        {
-            throw new TurbineException
-                    ("Failed to instantiate " + handlerClass, t);
-        }
-    }
-
-    /**
-     * Unregister a handler.
-     *
-     * @param handlerName The name of the handler to unregister.
-     */
-    public void unregisterHandler(String handlerName)
-    {
-        if (webserver != null)
-        {
-            webserver.removeHandler(handlerName);
-        }
-
-        server.removeHandler(handlerName);
-    }
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * @param is the stream to read request data from.
-     * @return the response body that needs to be sent to the client.
-     */
-    public byte[] handleRequest(InputStream is)
-    {
-        return server.execute(is);
-    }
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server with user
-     * authentication.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * <p> Note that the handlers need to implement AuthenticatedXmlRpcHandler
-     * interface to access the authentication infomration.
-     *
-     * @param is the stream to read request data from.
-     * @param user the user that is making the request.
-     * @param password the password given by user.
-     * @return the response body that needs to be sent to the client.
-     */
-    public byte[] handleRequest(InputStream is, String user, String password)
-    {
-        return server.execute(is, user, password);
-    }
-
-    /**
-     * Client's interface to XML-RPC.
-     *
-     * The return type is Object which you'll need to cast to
-     * whatever you are expecting.
-     *
-     * @param url A URL.
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @exception TurbineException
-     */
-    public Object executeRpc(URL url,
-                             String methodName,
-                             Vector params)
-            throws TurbineException
-    {
-        try
-        {
-            XmlRpcClient client = new XmlRpcClient(url);
-            return client.execute(methodName, params);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException("XML-RPC call failed", e);
-        }
-    }
-
-    /**
-     * Client's Authenticated interface to XML-RPC.
-     *
-     * The return type is Object which you'll need to cast to
-     * whatever you are expecting.
-     *
-     * @param url A URL.
-     * @param username The username to try and authenticate with
-     * @param password The password to try and authenticate with
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @throws TurbineException
-     */
-    public Object executeAuthenticatedRpc(URL url,
-                                          String username,
-                                          String password,
-                                          String methodName,
-                                          Vector params)
-            throws TurbineException
-    {
-        try
-        {
-            XmlRpcClient client = new XmlRpcClient(url);
-            client.setBasicAuthentication(username, password);
-            return client.execute(methodName, params);
-        }
-        catch (Exception e)
-        {
-            throw new TurbineException("XML-RPC call failed", e);
-        }
-    }
-
-    /**
-     * Method to allow a client to send a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void send(String serverURL,
-                     String sourceLocationProperty,
-                     String sourceFileName,
-                     String destinationLocationProperty,
-                     String destinationFileName)
-            throws TurbineException
-    {
-        FileTransfer.send(serverURL,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to send a file to a server that
-     * requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void send(String serverURL,
-                     String username,
-                     String password,
-                     String sourceLocationProperty,
-                     String sourceFileName,
-                     String destinationLocationProperty,
-                     String destinationFileName)
-            throws TurbineException
-    {
-        FileTransfer.send(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to get a file from a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void get(String serverURL,
-                    String sourceLocationProperty,
-                    String sourceFileName,
-                    String destinationLocationProperty,
-                    String destinationFileName)
-            throws TurbineException
-    {
-        FileTransfer.get(serverURL,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to get a file from a server that
-     * requires authentication.
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void get(String serverURL,
-                    String username,
-                    String password,
-                    String sourceLocationProperty,
-                    String sourceFileName,
-                    String destinationLocationProperty,
-                    String destinationFileName)
-            throws TurbineException
-    {
-        FileTransfer.get(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName,
-                destinationLocationProperty,
-                destinationFileName);
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * the server
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void remove(String serverURL,
-                       String sourceLocationProperty,
-                       String sourceFileName)
-            throws TurbineException
-    {
-        FileTransfer.remove(serverURL,
-                sourceLocationProperty,
-                sourceFileName);
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * a server that requires authentication.
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    public void remove(String serverURL,
-                       String username,
-                       String password,
-                       String sourceLocationProperty,
-                       String sourceFileName)
-            throws TurbineException
-    {
-        FileTransfer.remove(serverURL,
-                username,
-                password,
-                sourceLocationProperty,
-                sourceFileName);
-    }
-
-    /**
-     * Switch client filtering on/off.
-     *
-     * @param state Whether to filter clients.
-     *
-     * @see #acceptClient(java.lang.String)
-     * @see #denyClient(java.lang.String)
-     */
-    public void setParanoid(boolean state)
-    {
-        webserver.setParanoid(state);
-    }
-
-    /**
-     * Add an IP address to the list of accepted clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must
-     * call setParanoid(true) in order for this to have
-     * any effect.
-     *
-     * @param address The address to add to the list.
-     *
-     * @see #denyClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    public void acceptClient(String address)
-    {
-        webserver.acceptClient(address);
-    }
-
-    /**
-     * Add an IP address to the list of denied clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must call
-     * setParanoid(true) in order for this to have any effect.
-     *
-     * @param address The address to add to the list.
-     *
-     * @see #acceptClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    public void denyClient(String address)
-    {
-        webserver.denyClient(address);
-    }
-
-    /**
-     * Shuts down this service, stopping running threads.
-     */
-    public void shutdown()
-    {
-        // Stop the XML RPC server.
-        webserver.shutdown();
-
-        if (!isModernVersion)
-        {
-            // org.apache.xmlrpc.WebServer used to block in a call to
-            // ServerSocket.accept() until a socket connection was made.
-            try
-            {
-                Socket interrupt = new Socket(address, port);
-                interrupt.close();
-            }
-            catch (Exception notShutdown)
-            {
-                // It's remotely possible we're leaving an open listener
-                // socket around.
-                log.warn(XmlRpcService.SERVICE_NAME +
-                        "It's possible the xmlrpc server was not " +
-                        "shutdown: " + notShutdown.getMessage());
-            }
-        }
-
-        setInit(false);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xmlrpc/XmlRpcService.java b/src/java/org/apache/turbine/services/xmlrpc/XmlRpcService.java
deleted file mode 100644
index 7cc6e9f..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/XmlRpcService.java
+++ /dev/null
@@ -1,320 +0,0 @@
-package org.apache.turbine.services.xmlrpc;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.InputStream;
-
-import java.net.URL;
-
-import java.util.Vector;
-
-import org.apache.turbine.services.Service;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * The interface an XmlRpcService implements.
- *
- * @author <a href="mailto:josh@stonecottage.com">Josh Lucas</a>
- * @author <a href="mailto:magnus@handtolvur.is">Magnús Þór Torfason</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="jvanzyl@periapt.com">Jason van Zyl</a>
- * @version $Id$
- */
-public interface XmlRpcService
-        extends Service
-{
-    /** TurbineXmlRpcService. */
-    String SERVICE_NAME = "XmlRpcService";
-
-    /**
-     * Execute a remote procedure call.
-     *
-     * @param url A URL.
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @exception TurbineException
-     */
-    Object executeRpc(URL url,
-            String methodName,
-            Vector params)
-            throws TurbineException;
-
-    /**
-     * Execute a remote procedure call taht requires
-     * authentication.
-     *
-     * @param url A URL.
-     * @param username The username to authenticate with
-     * @param password The password to authenticate with
-     * @param methodName A String with the method name.
-     * @param params A Vector with the parameters.
-     * @return An Object.
-     * @exception TurbineException
-     */
-    Object executeAuthenticatedRpc(URL url,
-            String username,
-            String password,
-            String methodName,
-            Vector params)
-            throws TurbineException;
-
-    /**
-     * Register an object as a handler for the XmlRpc Server part.
-     *
-     * @param handlerName The name under which we want
-     * to register the service
-     * @param handler The handler object
-     */
-    void registerHandler(String handlerName, Object handler);
-
-    /**
-     * Register an object as a the default handler for
-     * the XmlRpc Server part.
-     *
-     * @param handler The handler object
-     */
-    void registerHandler(Object handler);
-
-    /**
-     * Unregister a handler.
-     *
-     * @param handlerName The name of the handler to unregister.
-     */
-    void unregisterHandler(String handlerName);
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * @param is the stream to read request data from.
-     * @return the response body that needs to be sent to the client.
-     */
-    byte[] handleRequest(InputStream is);
-
-    /**
-     * Handle an XML-RPC request using the encapsulated server with user
-     * authentication.
-     *
-     * You can use this method to handle a request from within
-     * a Turbine screen.
-     *
-     * <p> Note that the handlers need to implement AuthenticatedXmlRpcHandler
-     * interface to access the authentication infomration.
-     *
-     * @param is the stream to read request data from.
-     * @param user the user that is making the request.
-     * @param password the password given by user.
-     * @return the response body that needs to be sent to the client.
-     */
-    byte[] handleRequest(InputStream is, String user, String password);
-
-    /**
-     * Method to allow a client to send a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void send(String serverURL,
-            String sourceLocationProperty,
-            String sourceFileName,
-            String destinationLocationProperty,
-            String destinationFileName)
-            throws TurbineException;
-
-    /**
-     * Method to allow a client to send a file to a server that
-     * requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void send(String serverURL,
-            String username,
-            String password,
-            String sourceLocationProperty,
-            String sourceFileName,
-            String destinationLocationProperty,
-            String destinationFileName)
-            throws TurbineException;
-
-    /**
-     * Method to allow a client to send a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void get(String serverURL,
-            String sourceLocationProperty,
-            String sourceFileName,
-            String destinationLocationProperty,
-            String destinationFileName)
-            throws TurbineException;
-
-    /**
-     * Method to allow a client to send a file to a server that
-     * requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void get(String serverURL,
-            String username,
-            String password,
-            String sourceLocationProperty,
-            String sourceFileName,
-            String destinationLocationProperty,
-            String destinationFileName)
-            throws TurbineException;
-
-    /**
-     * Method to allow a client to remove a file from
-     * the server
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void remove(String serverURL,
-            String sourceLocationProperty,
-            String sourceFileName)
-            throws TurbineException;
-
-    /**
-     * Method to allow a client to remove a file from
-     * a server that requires authentication
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @throws TurbineException
-     * @deprecated This is not scope of the Service itself but of an
-     *             application which uses the service.
-     */
-    void remove(String serverURL,
-            String username,
-            String password,
-            String sourceLocationProperty,
-            String sourceFileName)
-            throws TurbineException;
-
-    /**
-     * Switch client filtering on/off.
-     *
-     * @param state
-     * @see #acceptClient(java.lang.String)
-     * @see #denyClient(java.lang.String)
-     */
-    void setParanoid(boolean state);
-
-    /**
-     * Add an IP address to the list of accepted clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must
-     * call setParanoid(true) in order for this to have
-     * any effect.
-     *
-     * @param address
-     * @see #denyClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    void acceptClient(String address);
-
-    /**
-     * Add an IP address to the list of denied clients. The parameter can
-     * contain '*' as wildcard character, e.g. "192.168.*.*". You must call
-     * setParanoid(true) in order for this to have any effect.
-     *
-     * @param address
-     * @see #acceptClient(java.lang.String)
-     * @see #setParanoid(boolean)
-     */
-    void denyClient(String address);
-
-}
diff --git a/src/java/org/apache/turbine/services/xmlrpc/package.html b/src/java/org/apache/turbine/services/xmlrpc/package.html
deleted file mode 100644
index 811a6cc..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The XML-RPC Service can be used to communicate with a remote application.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/services/xmlrpc/util/AuthenticatedFileHandler.java b/src/java/org/apache/turbine/services/xmlrpc/util/AuthenticatedFileHandler.java
deleted file mode 100644
index 11e6fa4..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/util/AuthenticatedFileHandler.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.apache.turbine.services.xmlrpc.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.TurbineException;
-
-import org.apache.xmlrpc.AuthenticatedXmlRpcHandler;
-
-/**
- * An authenticated Handler for use with the XML-RPC service that will deal
- * with clients sending file to the server (Turbine application)
- * and clients getting files from the server (Turbine application).
- *
- * usage in TurbineResources.properties is:
- * services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.AuthenticatedFileHandler
- *
- * See the FileHandler class for further documentation.
- *
- * @author <a href="mailto:john@zenplex.com">John Thorhauer</a>
- * @deprecated This is not scope of the Service itself but of an
- *             application which uses the service. This class shouldn't
- *             be part of Turbine but of an addon application.
- */
-public class AuthenticatedFileHandler
-        extends FileHandler
-        implements AuthenticatedXmlRpcHandler
-{
-    /**
-     * Default Constructor
-     */
-    public AuthenticatedFileHandler()
-    {
-    }
-
-    /**
-     * Handles all requests for an Authenticated file transfer.
-     */
-    public Object execute(String method, Vector params, String username, String password)
-            throws TurbineException
-    {
-        Object obj = null;
-
-        // Authenticate the user and get the object.
-        User user = null;
-        user = TurbineSecurity.getAuthenticatedUser(username, password);
-
-        if (user != null)
-        {
-            if (method.equals("send"))
-            {
-                obj = new Boolean(this.send((String) params.elementAt(0),
-                        (String) params.elementAt(1),
-                        (String) params.elementAt(2)));
-            }
-
-            if (method.equals("get"))
-            {
-                obj = this.get((String) params.elementAt(0),
-                        (String) params.elementAt(1));
-            }
-
-            if (method.equals("remove"))
-            {
-                AuthenticatedFileHandler.remove((String) params.elementAt(0),
-                        (String) params.elementAt(1));
-                obj = new Boolean("true");
-            }
-        }
-        else
-        {
-            obj = new Boolean("false");
-        }
-
-        return (Object) obj;
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xmlrpc/util/FileHandler.java b/src/java/org/apache/turbine/services/xmlrpc/util/FileHandler.java
deleted file mode 100644
index 724b419..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/util/FileHandler.java
+++ /dev/null
@@ -1,396 +0,0 @@
-package org.apache.turbine.services.xmlrpc.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.StringWriter;
-
-import javax.mail.internet.MimeUtility;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-
-import org.apache.turbine.services.servlet.TurbineServlet;
-
-/**
- * A Handler for use with the XML-RPC service that will deal
- * with clients sending file to the server (Turbine application)
- * and clients getting files from the server (Turbine application).
- *
- * 1) In the first case where the client sends a file to the server,
- * the client has encoded the file contents and passes those
- * encoded file contents on to the server:
- *
- * Client --------> encoded file contents -------------> Server
- *
- * The server must then decode the file contents and write the
- * decoded file contents to disk.
- *
- * 2) In the second case where the client gets a file from the
- * the server, the server has encoded the file contents and
- * passes those encoded file contents on to the client:
- *
- * Client <-------  encoded file contents <------------- Server
- *
- * The client must then decode the file contents and write the
- * decoded file contents to disk.
- *
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated This is not scope of the Service itself but of an
- *             application which uses the service. This class shouldn't
- *             be part of Turbine but of an addon application.
- */
-public class FileHandler
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(FileHandler.class);
-
-    /**
-     * Default Constructor
-     */
-    public FileHandler()
-    {
-    }
-
-    /**
-     * The client has indicated that it would like
-     * to send a file to the server and have it
-     * stored in a certain location on the server.
-     *
-     * So a client Turbine application might use the
-     * following bit of code to send a file to a server
-     * Turbine application:
-     *
-     * TurbineXmlRpc.executeRpc("file.send", params)
-     *
-     * Where:
-     *
-     * params.get(0) = contents of the file as a string.
-     * params.get(1) = the name the file should have when it lands.
-     * params.get(2) = property describing where the file should land.
-     *
-     * @param fileContents The contents of the file to store. It
-     *    is assumed that any xml content is properly encoded!
-     *
-     * @param fileName Name to give the file created to store
-     *    the contents.
-     *
-     * @param targetLocationProperty storage location of this file
-     *    is controlled by this property that is specified in
-     *    the TR.props file or an included properties file.
-     */
-    public boolean send(String fileContents,
-                        String targetLocationProperty,
-                        String fileName)
-    {
-        /*
-         * Simply take the file contents that have been sent
-         * by the client and write them to disk in the
-         * specified location: targetLocationProperty specifies
-         * the directory in which to place the fileContents
-         * with the name fileName.
-         */
-        return writeFileContents(fileContents, targetLocationProperty,
-                fileName);
-    }
-
-    /**
-     * The client has indicated that it would like
-     * to get a file from the server.
-     *
-     * So a client Turbine application might use the
-     * following bit of code to get a file from a server
-     * Turbine application:
-     *
-     * TurbineXmlRpc.executeRpc("file.get", params)
-     *
-     * Where:
-     *
-     * params.get(0) = the name the file should have when it lands.
-     * params.get(1) = property describing where the file should land.
-     *
-     * @param fileName Name to give the file created to store
-     *    the contents.
-     *
-     * @param targetLocationProperty storage location of this file
-     *    is controlled by this property that is specified in
-     *    the TR.props file or an included properties file.
-     *
-     * @return the file contents encoded with base64.
-     */
-    public String get(String targetLocationProperty,
-                      String fileName)
-    {
-        /*
-         * Place the contents of the file with the name
-         * fileName in the directory specified by
-         * targetLocationProperty.
-         */
-        return readFileContents(targetLocationProperty, fileName);
-    }
-
-    /**
-     * Return the content of file encoded for transfer
-     *
-     * @param targetLocationProperty path to file to encode.
-     * @param fileName file to encode
-     * @return String encoded contents of the requested file.
-     */
-    public static String readFileContents(String targetLocationProperty,
-                                          String fileName)
-    {
-        String location =
-          Turbine.getConfiguration().getString(targetLocationProperty);
-
-        if (StringUtils.isEmpty(location))
-        {
-          log.error("Could not load Property for location "
-              + targetLocationProperty);
-          return null;
-        }
-
-        File tmpF = new File(".");
-
-        StringBuffer sb = new StringBuffer();
-        sb.append(location);
-        sb.append(File.separator);
-        sb.append(fileName);
-
-        String file = TurbineServlet.getRealPath(sb.toString());
-
-        StringWriter sw = null;
-        BufferedReader reader = null;
-        try
-        {
-            /*
-             * This little routine was borrowed from the
-             * velocity ContentResource class.
-             */
-
-            sw = new StringWriter();
-
-            reader = new BufferedReader(
-                    new InputStreamReader(
-                            new FileInputStream(file)));
-
-            char buf[] = new char[1024];
-            int len = 0;
-
-            while ((len = reader.read(buf, 0, 1024)) != -1)
-            {
-                sw.write(buf, 0, len);
-            }
-
-            return MimeUtility.encodeText(sw.toString(), "UTF-8", "B");
-        }
-        catch (IOException ioe)
-        {
-            log.error("[FileHandler] Unable to encode the contents " +
-                    "of the request file.", ioe);
-
-            return null;
-        }
-        finally
-        {
-            try
-            {
-                if (sw != null)
-                {
-                    sw.close();
-                }
-                if (reader != null)
-                {
-                    reader.close();
-                }
-            }
-            catch (Exception e)
-            {
-            }
-        }
-    }
-
-    public static boolean writeFileContents(String fileContents,
-                                            String targetLocationProperty,
-                                            String fileName)
-    {
-        String location =
-          Turbine.getConfiguration().getString(targetLocationProperty);
-
-        if (StringUtils.isEmpty(location))
-        {
-          log.error("Could not load Property for location "
-              + targetLocationProperty);
-          return false;
-        }
-
-        /*
-         * The target location is always within the webapp to
-         * make the application fully portable. So use the TurbineServlet
-         * service to map the target location in the webapp space.
-         */
-
-        File targetLocation = new File(
-            TurbineServlet.getRealPath(location));
-
-        if (!targetLocation.exists())
-        {
-            /*
-             * If the target location doesn't exist then
-             * attempt to create the target location and any
-             * necessary parent directories as well.
-             */
-            if (!targetLocation.mkdirs())
-            {
-                log.error("[FileHandler] Could not create target location: " +
-                        targetLocation + ". Cannot transfer file from client.");
-
-                return false;
-            }
-            else
-            {
-                log.info("[FileHandler] Creating target location:" +
-                        targetLocation +
-                        " in order to complete file transfer from client.");
-            }
-        }
-
-        FileWriter fileWriter = null;
-        try
-        {
-            /*
-             * Try to create the target file and write it out
-             * to the target location.
-             */
-            fileWriter = new FileWriter(
-                    targetLocation + "/" + fileName);
-
-            /*
-             * It is assumed that the file has been encoded
-             * and therefore must be decoded before the
-             * contents of the file are stored to disk.
-             */
-            fileWriter.write(MimeUtility.decodeText(fileContents));
-
-            return true;
-        }
-        catch (IOException ioe)
-        {
-            log.error("[FileHandler] Could not write the decoded file " +
-                    "contents to disk for the following reason.", ioe);
-
-            return false;
-        }
-        finally
-        {
-            try
-            {
-                if (fileWriter != null)
-                {
-                    fileWriter.close();
-                }
-            }
-            catch (Exception e)
-            {
-            }
-        }
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * the server
-     *
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     */
-    public static void remove(String sourceLocationProperty,
-                              String sourceFileName)
-    {
-        String location =
-          Turbine.getConfiguration().getString(sourceLocationProperty);
-
-        if (StringUtils.isEmpty(location))
-        {
-          log.error("Could not load Property for location "
-              + sourceLocationProperty);
-          return;
-        }
-
-        /*
-         * The target location is always within the webapp to
-         * make the application fully portable. So use the TurbineServlet
-         * service to map the target location in the webapp space.
-         */
-        File sourceFile =
-            new File(TurbineServlet.getRealPath(sourceLocationProperty
-                         + "/" + sourceFileName));
-
-        if (sourceFile.exists())
-        {
-            sourceFile.delete();
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xmlrpc/util/FileTransfer.java b/src/java/org/apache/turbine/services/xmlrpc/util/FileTransfer.java
deleted file mode 100644
index f9f9c01..0000000
--- a/src/java/org/apache/turbine/services/xmlrpc/util/FileTransfer.java
+++ /dev/null
@@ -1,374 +0,0 @@
-package org.apache.turbine.services.xmlrpc.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URL;
-import java.util.Vector;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.services.xmlrpc.TurbineXmlRpc;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Test class for FileHandler.
- *
- * @deprecated This is not scope of the Service itself but of an
- *             application which uses the service. This class shouldn't
- *             be part of Turbine but of an addon application.
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @version $Id$
- */
-public class FileTransfer
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(FileTransfer.class);
-
-    /**
-     * Method to allow a client to send a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     */
-    public static void send(String serverURL,
-                            String sourceLocationProperty,
-                            String sourceFileName,
-                            String destinationLocationProperty,
-                            String destinationFileName)
-            throws TurbineException
-    {
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * fileContents
-             */
-            params.add(FileHandler.readFileContents(
-                    sourceLocationProperty, sourceFileName));
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(destinationLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(destinationFileName);
-
-            Boolean b = (Boolean) TurbineXmlRpc.executeRpc(
-                    new URL(serverURL), "file.send", params);
-
-        }
-        catch (Exception e)
-        {
-            log.error("Error sending file to server:", e);
-            throw new TurbineException(e);
-        }
-    }
-
-    /**
-     * Method to allow a client to send a file to a server
-     * that requires a user name and password.
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     */
-    public static void send(String serverURL,
-                            String username,
-                            String password,
-                            String sourceLocationProperty,
-                            String sourceFileName,
-                            String destinationLocationProperty,
-                            String destinationFileName)
-            throws TurbineException
-    {
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * fileContents
-             */
-            params.add(FileHandler.readFileContents(
-                    sourceLocationProperty, sourceFileName));
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(destinationLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(destinationFileName);
-
-            Boolean b = (Boolean) TurbineXmlRpc.executeAuthenticatedRpc(
-                    new URL(serverURL),
-                    username,
-                    password,
-                    "file.send",
-                    params);
-
-        }
-        catch (Exception e)
-        {
-            log.error("Error sending file to server:", e);
-            throw new TurbineException(e);
-        }
-    }
-
-    /**
-     * Method to allow a client to get a file to a server.
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     * @throws TurbineException
-     */
-    public static void get(String serverURL,
-                           String sourceLocationProperty,
-                           String sourceFileName,
-                           String destinationLocationProperty,
-                           String destinationFileName)
-            throws TurbineException
-    {
-
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(sourceLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(sourceFileName);
-
-            String fileContents = (String) TurbineXmlRpc.executeRpc(
-                    new URL(serverURL), "file.get", params);
-
-            /*
-             * Now we have the file contents, we can write
-             * them out to disk.
-             */
-            FileHandler.writeFileContents(fileContents,
-                    destinationLocationProperty, destinationFileName);
-        }
-        catch (Exception e)
-        {
-            log.error("Error getting file from server:", e);
-            throw new TurbineException(e);
-        }
-    }
-
-    /**
-     * Method to allow a client to get a file from a server
-     * that requires a user name and password.
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     * @param destinationLocationProperty
-     * @param destinationFileName
-     */
-    public static void get(String serverURL,
-                           String username,
-                           String password,
-                           String sourceLocationProperty,
-                           String sourceFileName,
-                           String destinationLocationProperty,
-                           String destinationFileName)
-            throws TurbineException
-    {
-
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(sourceLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(sourceFileName);
-
-            String fileContents = (String) TurbineXmlRpc.executeAuthenticatedRpc(
-                    new URL(serverURL),
-                    username,
-                    password,
-                    "file.get",
-                    params);
-
-            /*
-             * Now we have the file contents, we can write
-             * them out to disk.
-             */
-            FileHandler.writeFileContents(fileContents,
-                    destinationLocationProperty, destinationFileName);
-        }
-        catch (Exception e)
-        {
-            log.error("Error getting file from server:", e);
-            throw new TurbineException(e);
-        }
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * the server
-     *
-     * @param serverURL
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     */
-    public static void remove(String serverURL,
-                              String sourceLocationProperty,
-                              String sourceFileName)
-            throws TurbineException
-    {
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(sourceLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(sourceFileName);
-
-            TurbineXmlRpc.executeRpc(new URL(serverURL), "file.remove", params);
-        }
-        catch (Exception e)
-        {
-            log.error("Error removing file from server:", e);
-            throw new TurbineException(e);
-        }
-    }
-
-    /**
-     * Method to allow a client to remove a file from
-     * a server that requires a user name and password.
-     *
-     * @param serverURL
-     * @param username
-     * @param password
-     * @param sourceLocationProperty
-     * @param sourceFileName
-     */
-    public static void remove(String serverURL,
-                              String username,
-                              String password,
-                              String sourceLocationProperty,
-                              String sourceFileName)
-            throws TurbineException
-    {
-        try
-        {
-            Vector params = new Vector();
-
-            /*
-             * property in TR.props which refers to the directory
-             * where the fileContents should land.
-             */
-            params.add(sourceLocationProperty);
-
-            /*
-             * name to give the file contents.
-             */
-            params.add(sourceFileName);
-
-            TurbineXmlRpc.executeAuthenticatedRpc(new URL(serverURL),
-                    username,
-                    password,
-                    "file.remove",
-                    params);
-        }
-        catch (Exception e)
-        {
-            log.error("Error removing file from server:", e);
-            throw new TurbineException(e);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xslt/TurbineXSLT.java b/src/java/org/apache/turbine/services/xslt/TurbineXSLT.java
deleted file mode 100644
index 5927aad..0000000
--- a/src/java/org/apache/turbine/services/xslt/TurbineXSLT.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.apache.turbine.services.xslt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-import java.io.Writer;
-
-import org.apache.turbine.services.TurbineServices;
-
-import org.w3c.dom.Node;
-
-/**
- * This is a static accesor class for {@link XSLTService}.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- */
-public class TurbineXSLT
-{
-    /**
-     * Utility method for accessing the service
-     * implementation
-     *
-     * @return a XSLTService implementation instance
-     */
-    protected static XSLTService getService()
-    {
-        return (XSLTService) TurbineServices
-                .getInstance().getService(XSLTService.SERVICE_NAME);
-    }
-
-    public static void transform(String xslName, Reader in, Writer out)
-            throws Exception
-    {
-        getService().transform(xslName, in, out);
-    }
-
-    public static String transform(String xslName, Reader in)
-            throws Exception
-    {
-        return getService().transform(xslName, in);
-    }
-
-    public void transform(String xslName, Node in, Writer out)
-            throws Exception
-    {
-        getService().transform(xslName, in, out);
-    }
-
-    public String transform(String xslName, Node in)
-            throws Exception
-    {
-        return getService().transform(xslName, in);
-    }
-}
diff --git a/src/java/org/apache/turbine/services/xslt/TurbineXSLTService.java b/src/java/org/apache/turbine/services/xslt/TurbineXSLTService.java
deleted file mode 100644
index 7ef395c..0000000
--- a/src/java/org/apache/turbine/services/xslt/TurbineXSLTService.java
+++ /dev/null
@@ -1,291 +0,0 @@
-package org.apache.turbine.services.xslt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.io.Writer;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Templates;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.InitializationException;
-import org.apache.turbine.services.TurbineBaseService;
-
-import org.w3c.dom.Node;
-
-/**
- * Implementation of the Turbine XSLT Service.  It transforms xml with a given
- * xsl file.  XSL stylesheets are compiled and cached (if the property in
- * TurbineResources.properties is set) to improve speeds.
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:rubys@us.ibm.com">Sam Ruby</a>
- */
-public class TurbineXSLTService
-        extends TurbineBaseService
-        implements XSLTService
-
-{
-    /**
-     * Property to control the caching of StyleSheetRoots.
-     */
-    protected boolean caching = false;
-
-    /**
-     * Path to style sheets used for tranforming well-formed
-     * XML documents. The path is relative to the webapp context.
-     */
-    protected String path;
-
-    /**
-     * Cache of compiled StyleSheetRoots.
-     */
-    protected Map cache = new HashMap();
-
-    /**
-     * Factory for producing templates and null transformers
-     */
-    private static TransformerFactory tfactory;
-
-    /**
-     * Initialize the TurbineXSLT Service.  Load the path to search for
-     * xsl files and initiates the cache.
-     */
-    public void init()
-        throws InitializationException
-    {
-        Configuration conf = getConfiguration();
-
-        path = Turbine.getRealPath(conf.getString(STYLESHEET_PATH, null));
-
-        if (StringUtils.isNotEmpty(path))
-        {
-            if (!path.endsWith("/") && !path.endsWith ("\\"))
-            {
-                path = path + File.separator;
-            }
-        }
-
-        caching = conf.getBoolean(STYLESHEET_CACHING);
-
-        tfactory = TransformerFactory.newInstance();
-
-        setInit(true);
-    }
-
-    /**
-     * Get a valid and existing filename from a template name.
-     * The extension is removed and replaced with .xsl.  If this
-     * file does not exist the method attempts to find default.xsl.
-     * If it fails to find default.xsl it returns null.
-     */
-    protected String getFileName(String templateName)
-    {
-        // First we chop of the existing extension
-        int colon = templateName.lastIndexOf(".");
-        if (colon > 0)
-        {
-            templateName = templateName.substring(0, colon);
-        }
-
-        // Now we try to find the file ...
-        File f = new File(path + templateName + ".xsl");
-        if (f.exists())
-        {
-            return path + templateName + ".xsl";
-        }
-        else
-        {
-            // ... or the default file
-            f = new File(path + "default.xsl");
-            if (f.exists())
-            {
-                return path + "default.xsl";
-            }
-            else
-            {
-                return null;
-            }
-        }
-    }
-
-    /**
-     * Compile Templates from an input file.
-     */
-    protected Templates compileTemplates(String source) throws Exception
-    {
-        StreamSource xslin = new StreamSource(new File(source));
-        Templates root = tfactory.newTemplates(xslin);
-        return root;
-    }
-
-    /**
-     * Retrieves Templates.  If caching is switched on the
-     * first attempt is to load the Templates from the cache.
-     * If caching is switched of or if the Stylesheet is not found
-     * in the cache a new StyleSheetRoot is compiled from an input
-     * file.
-     * <p>
-     * This method is synchronized on the xsl cache so that a thread
-     * does not attempt to load a StyleSheetRoot from the cache while
-     * it is still being compiled.
-     */
-    protected Templates getTemplates(String xslName) throws Exception
-    {
-        synchronized (cache)
-        {
-            if (caching && cache.containsKey(xslName))
-            {
-                return (Templates) cache.get(xslName);
-            }
-
-            String fn = getFileName(xslName);
-
-            if (fn == null) return null;
-
-            Templates sr = compileTemplates(fn);
-
-            if (caching)
-            {
-                cache.put(xslName, sr);
-            }
-
-            return sr;
-        }
-
-    }
-
-    protected void transform(String xslName, Source xmlin, Result xmlout)
-            throws Exception
-    {
-        Templates sr = getTemplates(xslName);
-        Transformer transformer;
-
-
-        // If there is no stylesheet we just echo the xml
-        if (sr == null)
-        {
-            transformer = tfactory.newTransformer();
-        }
-        else
-        {
-            transformer = sr.newTransformer();
-        }
-
-        transformer.transform(xmlin, xmlout);
-    }
-
-    /**
-     * Execute an xslt
-     */
-    public void transform(String xslName, Reader in, Writer out)
-            throws Exception
-    {
-        Source xmlin = new StreamSource(in);
-        Result xmlout = new StreamResult(out);
-
-        transform(xslName, xmlin, xmlout);
-    }
-
-    /**
-     * Execute an xslt
-     */
-    public String transform(String xslName, Reader in) throws Exception
-    {
-        StringWriter sw = new StringWriter();
-        transform(xslName, in, sw);
-        return sw.toString();
-    }
-
-    /**
-     * Execute an xslt
-     */
-    public void transform (String xslName, Node in, Writer out)
-        throws Exception
-    {
-        Source xmlin = new DOMSource(in);
-        Result xmlout = new StreamResult(out);
-
-        transform(xslName, xmlin, xmlout);
-    }
-
-    /**
-     * Execute an xslt
-     */
-    public String transform (String xslName, Node in)
-        throws Exception
-    {
-        StringWriter sw = new StringWriter();
-        transform(xslName, in, sw);
-        return sw.toString();
-    }
-
-}
diff --git a/src/java/org/apache/turbine/services/xslt/XSLTService.java b/src/java/org/apache/turbine/services/xslt/XSLTService.java
deleted file mode 100644
index ae2ca19..0000000
--- a/src/java/org/apache/turbine/services/xslt/XSLTService.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package org.apache.turbine.services.xslt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-import java.io.Writer;
-
-import org.apache.turbine.services.Service;
-
-import org.w3c.dom.Node;
-
-/**
- * The Turbine XSLT Service is used to transform xml with a xsl stylesheet.
- * The service makes use of the Xalan xslt engine available from apache.
- *
- *
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- */
-public interface XSLTService
-        extends Service
-{
-    /** Service name */
-    String SERVICE_NAME = "XSLTService";
-
-    /** Name of the Style sheet path property */
-    String STYLESHEET_PATH = "path";
-
-    /** Property for caching the stylesheets */
-    String STYLESHEET_CACHING = "cache";
-
-    /**
-     * Uses an xsl file to transform xml input from a reader and writes the
-     * output to a writer.
-     *
-     * @param xslName The name of the file that contains the xsl stylesheet.
-     * @param in The reader that passes the xml to be transformed
-     * @param out The writer for the transformed output
-     */
-    void transform(String xslName, Reader in, Writer out) throws Exception;
-
-    /**
-     * Uses an xsl file to transform xml input from a reader and returns a
-     * string containing the transformed output.
-     *
-     * @param xslName The name of the file that contains the xsl stylesheet.
-     * @param in The reader that passes the xml to be transformed
-     */
-    String transform(String xslName, Reader in) throws Exception;
-
-    /**
-     * Uses an xsl file to transform xml input from a DOM note and writes the
-     * output to a writer.
-     *
-     * @param xslName The name of the file that contains the xsl stylesheet.
-     * @param in The DOM Node to be transformed
-     * @param out The writer for the transformed output
-     */
-    void transform(String xslName, Node in, Writer out) throws Exception;
-
-    /**
-     * Uses an xsl file to transform xml input from a DOM note and returns a
-     * string containing the transformed output.
-     *
-     * @param xslName The name of the file that contains the xsl stylesheet.
-     * @param out The writer for the transformed output
-     */
-    String transform(String xslName, Node in) throws Exception;
-}
diff --git a/src/java/org/apache/turbine/services/xslt/package.html b/src/java/org/apache/turbine/services/xslt/package.html
deleted file mode 100644
index 73f493f..0000000
--- a/src/java/org/apache/turbine/services/xslt/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-The XSLT Service can be used to translate XML documents into various output formats.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/BrowserDetector.java b/src/java/org/apache/turbine/util/BrowserDetector.java
deleted file mode 100644
index 30aa42b..0000000
--- a/src/java/org/apache/turbine/util/BrowserDetector.java
+++ /dev/null
@@ -1,366 +0,0 @@
-package org.apache.turbine.util;
-
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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 class parses the user agent string and sets javasciptOK and
- * cssOK following the rules described below.  If you want to check
- * for specific browsers/versions then use this class to parse the
- * user agent string and use the accessor methods in this class.
- *
- * JavaScriptOK means that the browser understands JavaScript on the
- * same level the Navigator 3 does.  Specifically, it can use named
- * images.  This allows easier rollovers.  If a browser doesn't do
- * this (Nav 2 or MSIE 3), then we just assume it can't do any
- * JavaScript.  Referencing images by load order is too hard to
- * maintain.
- *
- * CSSOK is kind of sketchy in that Nav 4 and MSIE work differently,
- * but they do seem to have most of the functionality.  MSIE 4 for the
- * Mac has buggy CSS support, so we let it do JavaScript, but no CSS.
- *
- * Ported from Leon's PHP code at
- * http://www.working-dogs.com/freetrade by Frank.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:leon@clearink.com">Leon Atkisnon</a>
- * @author <a href="mailto:mospaw@polk-county.com">Chris Mospaw</a>
- * @author <a href="mailto:bgriffin@cddb.com">Benjamin Elijah Griffin</a>
- * @version $Id$
- */
-public class BrowserDetector
-{
-    public static final String MSIE = "MSIE";
-    public static final String OPERA = "Opera";
-    public static final String MOZILLA = "Mozilla";
-
-    public static final String WINDOWS = "Windows";
-    public static final String UNIX = "Unix";
-    public static final String MACINTOSH = "Macintosh";
-
-    /** The user agent string. */
-    private String userAgentString = "";
-
-    /** The browser name specified in the user agent string. */
-    private String browserName = "";
-
-    /**
-     * The browser version specified in the user agent string.  If we
-     * can't parse the version just assume an old browser.
-     */
-    private float browserVersion = (float) 1.0;
-
-    /**
-     * The browser platform specified in the user agent string.
-     */
-    private String browserPlatform = "unknown";
-
-    /** Whether or not javascript works in this browser. */
-    private boolean javascriptOK = false;
-
-    /** Whether or not CSS works in this browser. */
-    private boolean cssOK = false;
-
-    /** Whether or not file upload works in this browser. */
-    private boolean fileUploadOK = false;
-
-    /**
-     * Constructor used to initialize this class.
-     *
-     * @param userAgentString A String with the user agent field.
-     */
-    public BrowserDetector(String userAgentString)
-    {
-        this.userAgentString = userAgentString;
-        parse();
-    }
-
-    /**
-     * Constructor used to initialize this class.
-     *
-     * @param data The Turbine RunData object.
-     */
-    public BrowserDetector(RunData data)
-    {
-        this.userAgentString = data.getUserAgent();
-        parse();
-    }
-
-    /**
-     * Whether or not CSS works in this browser.
-     *
-     * @return True if CSS works in this browser.
-     */
-    public boolean isCssOK()
-    {
-        return cssOK;
-    }
-
-    /**
-     * Whether or not file upload works in this browser.
-     *
-     * @return True if file upload works in this browser.
-     */
-    public boolean isFileUploadOK()
-    {
-        return fileUploadOK;
-    }
-
-    /**
-     * Whether or not Javascript works in this browser.
-     *
-     * @return True if Javascript works in this browser.
-     */
-    public boolean isJavascriptOK()
-    {
-        return javascriptOK;
-    }
-
-    /**
-     * The browser name specified in the user agent string.
-     *
-     * @return A String with the browser name.
-     */
-    public String getBrowserName()
-    {
-        return browserName;
-    }
-
-    /**
-     * The browser platform specified in the user agent string.
-     *
-     * @return A String with the browser platform.
-     */
-    public String getBrowserPlatform()
-    {
-        return browserPlatform;
-    }
-
-    /**
-     * The browser version specified in the user agent string.
-     *
-     * @return A String with the browser version.
-     */
-    public float getBrowserVersion()
-    {
-        return browserVersion;
-    }
-
-    /**
-     * The user agent string for this class.
-     *
-     * @return A String with the user agent.
-     */
-    public String getUserAgentString()
-    {
-        return userAgentString;
-    }
-
-    /**
-     * Helper method to initialize this class.
-     */
-    private void parse()
-    {
-        int versionStartIndex = userAgentString.indexOf("/");
-        int versionEndIndex = userAgentString.indexOf(" ");
-
-        // Get the browser name and version.
-        browserName = userAgentString.substring(0, versionStartIndex);
-        try
-        {
-            // Not all user agents will have a space in the reported
-            // string.
-            String agentSubstring = null;
-            if (versionEndIndex < 0)
-            {
-                agentSubstring 
-                        = userAgentString.substring(versionStartIndex + 1);
-            }
-            else
-            {
-                agentSubstring = userAgentString
-                        .substring(versionStartIndex + 1, versionEndIndex);
-            }
-            browserVersion = toFloat(agentSubstring);
-        }
-        catch (NumberFormatException e)
-        {
-            // Just use the default value.
-        }
-
-        // MSIE lies about its name.  Of course...
-        if (userAgentString.indexOf(MSIE) != -1)
-        {
-            // Ex: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)
-            versionStartIndex = (userAgentString.indexOf(MSIE) 
-                    + MSIE.length() + 1);
-            versionEndIndex = userAgentString.indexOf(";", versionStartIndex);
-
-            browserName = MSIE;
-            try
-            {
-                browserVersion = toFloat(userAgentString
-                        .substring(versionStartIndex, versionEndIndex));
-            }
-            catch (NumberFormatException e)
-            {
-                // Just use the default value.
-            }
-
-            // PHP code
-            // $Browser_Name = "MSIE";
-            // $Browser_Version = strtok("MSIE");
-            // $Browser_Version = strtok(" ");
-            // $Browser_Version = strtok(";");
-        }
-
-        // Opera isn't completely honest, either...
-        // Modificaton by Chris Mospaw <mospaw@polk-county.com>
-        if (userAgentString.indexOf(OPERA) != -1)
-        {
-            //Ex: Mozilla/4.0 (Windows NT 4.0;US) Opera 3.61  [en]
-            versionStartIndex = (userAgentString.indexOf(OPERA) 
-                    + OPERA.length() + 1);
-            versionEndIndex = userAgentString.indexOf(" ", versionStartIndex);
-
-            browserName = OPERA;
-            try
-            {
-                browserVersion = toFloat(userAgentString
-                        .substring(versionStartIndex, versionEndIndex));
-            }
-            catch (NumberFormatException e)
-            {
-                // Just use the default value.
-            }
-
-            // PHP code
-            // $Browser_Name = "Opera";
-            // $Browser_Version = strtok("Opera");
-            // $Browser_Version = strtok("/");
-            // $Browser_Version = strtok(";");
-        }
-
-
-        // Try to figure out what platform.
-        if ((userAgentString.indexOf("Windows") != -1)
-                || (userAgentString.indexOf("WinNT") != -1)
-                || (userAgentString.indexOf("Win98") != -1)
-                || (userAgentString.indexOf("Win95") != -1))
-        {
-            browserPlatform = WINDOWS;
-        }
-
-        if (userAgentString.indexOf("Mac") != -1)
-        {
-            browserPlatform = MACINTOSH;
-        }
-
-        if (userAgentString.indexOf("X11") != -1)
-        {
-            browserPlatform = UNIX;
-        }
-
-        if (browserPlatform == WINDOWS)
-        {
-            if (browserName.equals(MOZILLA))
-            {
-                if (browserVersion >= 3.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                }
-                if (browserVersion >= 4.0)
-                {
-                    cssOK = true;
-                }
-            }
-            else if (browserName == MSIE)
-            {
-                if (browserVersion >= 4.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                    cssOK = true;
-                }
-            }
-            else if (browserName == OPERA)
-            {
-                if (browserVersion >= 3.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                    cssOK = true;
-                }
-            }
-        }
-        else if (browserPlatform == MACINTOSH)
-        {
-            if (browserName.equals(MOZILLA))
-            {
-                if (browserVersion >= 3.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                }
-                if (browserVersion >= 4.0)
-                {
-                    cssOK = true;
-                }
-            }
-            else if (browserName == MSIE)
-            {
-                if (browserVersion >= 4.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                }
-                if (browserVersion > 4.0)
-                {
-                    cssOK = true;
-                }
-            }
-        }
-        else if (browserPlatform == UNIX)
-        {
-            if (browserName.equals(MOZILLA))
-            {
-                if (browserVersion >= 3.0)
-                {
-                    javascriptOK = true;
-                    fileUploadOK = true;
-                }
-                if (browserVersion >= 4.0)
-                {
-                    cssOK = true;
-                }
-            }
-        }
-    }
-
-    /**
-     * Helper method to convert String to a float.
-     *
-     * @param s A String.
-     * @return The String converted to float.
-     */
-    private static final float toFloat(String s)
-    {
-        return Float.valueOf(s).floatValue();
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/BufferCache.java b/src/java/org/apache/turbine/util/BufferCache.java
deleted file mode 100644
index caeabdd..0000000
--- a/src/java/org/apache/turbine/util/BufferCache.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.collections.SequencedHashMap;
-
-/**
- * A fixed length object cache implementing the LRU algorithm.  Convenient for
- * buffering recently used objects.
- *
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class BufferCache
-    extends SequencedHashMap
-{
-    /**
-     * The default maximum cache size.
-     */
-    private static final int DEFAULT_MAX_SIZE = 35;
-
-    /**
-     * The size of the cache.  The newest elements in the sequence are kept
-     * toward the end.
-     */
-    private int maxSize;
-
-    /**
-     * Creates a new instance with default storage buffer pre-allocated.
-     */
-    public BufferCache()
-    {
-        this(DEFAULT_MAX_SIZE);
-    }
-
-    /**
-     * Creates a new instance with the specified storage buffer pre-allocated.
-     *
-     * @param maxSize The maximum size of the cache.
-     */
-    public BufferCache(int maxSize)
-    {
-        super(maxSize);
-        this.maxSize = maxSize;
-    }
-
-    /**
-     * Stores the provided key/value pair, freshening its list index if the
-     * specified key already exists.
-     *
-     * @param key   The key to the provided value.
-     * @param value The value to store.
-     * @return      The previous value for the specified key, or
-     *              <code>null</code> if none.
-     */
-    public synchronized Object put(Object key, Object value)
-    {
-        int size = size();
-        if (size > 0 && size + 1 >= maxSize)
-        {
-            // Stay within constraints of allocated buffer by releasing the
-            // eldest buffered object.
-            remove(0);
-        }
-        return super.put(key, value);
-    }
-
-    /**
-     * Retrieves the value associated with the provided key, freshening the
-     * sequence of the key as well.
-     *
-     * @param key The key whose value to retrieve.
-     * @return    The keyed value.
-     */
-    public synchronized Object get(Object key)
-    {
-        return super.get(key);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/CSVParser.java b/src/java/org/apache/turbine/util/CSVParser.java
deleted file mode 100644
index a0208d8..0000000
--- a/src/java/org/apache/turbine/util/CSVParser.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-
-import java.util.List;
-
-/**
- * CSVParser is used to parse a stream with comma-separated values and
- * generate ParameterParser objects which can be used to
- * extract the values in the desired type.
- *
- * <p>The class extends the abstract class DataStreamParser and implements
- * initTokenizer with suitable values for CSV files to provide this
- * functionality.
- *
- * <p>The class (indirectly through DataStreamParser) implements the
- * java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $csvfile)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.CSVParser instead.
- */
-public class CSVParser
-        extends org.apache.turbine.util.parser.CSVParser
-{
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from. The column headers must be set
-     * independently either explicitly, or by reading the first line
-     * of the CSV values.
-     *
-     * @param in the input reader.
-     */
-    public CSVParser(Reader in)
-    {
-        super(in, null, null);
-    }
-
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from, and a list of column names.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     */
-    public CSVParser(Reader in, List columnNames)
-    {
-        super(in, columnNames, null);
-    }
-
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public CSVParser(Reader in, List columnNames, String characterEncoding)
-    {
-        super(in, columnNames, characterEncoding);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/Comparable.java b/src/java/org/apache/turbine/util/Comparable.java
deleted file mode 100644
index 4fbd80e..0000000
--- a/src/java/org/apache/turbine/util/Comparable.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Used by quicksort.
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @version $Id$
- * @deprecated This class will be removed after the 2.3 release. It is
- *             not part of the Web Framework scope. If you need it, please
- *             use a sorting library for quicksort.
- */
-public interface Comparable
-{
-    /**
-     * Return the result of comparing two objects.
-     *
-     * @param obj1 First object.
-     * @param obj2 Second object.
-     * @return An int.
-     */
-    int compare(Object obj1,
-                Object obj2);
-}
diff --git a/src/java/org/apache/turbine/util/CookieParser.java b/src/java/org/apache/turbine/util/CookieParser.java
deleted file mode 100644
index 2921eac..0000000
--- a/src/java/org/apache/turbine/util/CookieParser.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * CookieParser is an interface to a utility to to get and set values
- * of Cookies on the Client Browser. You can use CookieParser to convert
- * Cookie values to various types or to set Bean values with setParameters().
- * Servlet Spec for more information on Cookies.
- * <p>
- * Use set() or unset() to Create or Destroy Cookies.
- * <p>
- * NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * CookieParser cp = data.getCookies();
- * cp.add("ERROR",1);
- * cp.add("eRrOr",2);
- * int result = cp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.CookieParser instead.
- */
-public interface CookieParser
-        extends org.apache.turbine.util.parser.CookieParser
-{
-}
diff --git a/src/java/org/apache/turbine/util/DataStreamParser.java b/src/java/org/apache/turbine/util/DataStreamParser.java
deleted file mode 100644
index 223f7bd..0000000
--- a/src/java/org/apache/turbine/util/DataStreamParser.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-
-import java.util.List;
-
-/**
- * DataStreamParser is used to parse a stream with a fixed format and
- * generate ValueParser objects which can be used to extract the values
- * in the desired type.
- *
- * <p>The class itself is abstract - a concrete subclass which implements
- * the initTokenizer method such as CSVParser or TSVParser is required
- * to use the functionality.
- *
- * <p>The class implements the java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $datastream)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.DataStreamParser instead.
- */
-public abstract class DataStreamParser 
-        extends org.apache.turbine.util.parser.DataStreamParser
-{
-    /**
-     * Create a new DataStreamParser instance. Requires a Reader to read the
-     * comma-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public DataStreamParser(Reader in, List columnNames,
-                            String characterEncoding)
-    {
-        super(in, columnNames, characterEncoding);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/DateSelector.java b/src/java/org/apache/turbine/util/DateSelector.java
deleted file mode 100644
index 77b563c..0000000
--- a/src/java/org/apache/turbine/util/DateSelector.java
+++ /dev/null
@@ -1,491 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.DateFormatSymbols;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.ElementContainer;
-import org.apache.ecs.html.Input;
-import org.apache.ecs.html.Option;
-import org.apache.ecs.html.Select;
-
-/**
- * DateSelector is a utility class to handle the creation of a set of
- * date popup menus.  The code is broken into a set of static methods
- * for quick and easy access to the individual select objects:
- *
- *  <pre>
- *  ElementContainer ec dateSelect = new ElementContainer();
- *  String myName = "mydate";
- *  ec.addElement(DateSelector.getMonthSelector(myName));
- *  ec.addElement(DateSelector.getDaySelector(myName));
- *  ec.addElement(DateSelector.getYearSelector(myName));
- *  </pre>
- *
- * There are also methods which will use attributes to build a
- * complete month,day,year selector:
- *
- *  <pre>
- *  DateSelector ds = new DateSelector(myName);
- *  dateSelect = ds.ecsOutput();
- *  </pre>
- *
- * The above element container would use the onChange setting and may
- * hide the selected day if set via showDays().<br>
- *
- * @author <a href="mailto:ekkerbj@netscape.net">Jeffrey D. Brekke</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:leon@clearink.com">Leon Atkinson</a>
- * @version $Id$
- */
-public class DateSelector
-{
-    /** Prefix for date names. */
-    public static final String DEFAULT_PREFIX = "DateSelector";
-
-    /** Suffix for day parameter. */
-    public static final String DAY_SUFFIX = "_day";
-
-    /** Suffix for month parameter. */
-    public static final String MONTH_SUFFIX = "_month";
-
-    /** Suffix for year parameter. */
-    public static final String YEAR_SUFFIX = "_year";
-
-    private Calendar useDate = null;
-    private String selName = null;
-    private static final String[] monthName =
-            new DateFormatSymbols().getMonths();
-    private String onChange = null;
-    private boolean onChangeSet = false;
-    private boolean showDays = true;
-    private int setDay = 0;
-    private boolean useYears = false;
-    private int firstYear = 0;
-    private int lastYear = 0;
-    private int selectedYear = 0;
-
-    /**
-     * Constructor defaults to current date and uses the default
-     * prefix: <pre>DateSelector.DEFAULT</pre>
-     */
-    public DateSelector()
-    {
-        this.selName = DEFAULT_PREFIX;
-        this.useDate = Calendar.getInstance();
-        this.useDate.setTime(new Date());
-    }
-
-    /**
-     * Constructor, uses the date set in a calendar that has been
-     * already passed in (with the date set correctly).
-     *
-     * @param selName A String with the selector name.
-     * @param useDate A Calendar with a date.
-     */
-    public DateSelector(String selName, Calendar useDate)
-    {
-        this.useDate = useDate;
-        this.selName = selName;
-    }
-
-    /**
-     * Constructor defaults to current date.
-     *
-     * @param selName A String with the selector name.
-     */
-    public DateSelector(String selName)
-    {
-        this.selName = selName;
-        this.useDate = Calendar.getInstance();
-        this.useDate.setTime(new Date());
-    }
-
-    /**
-     * Adds the onChange to all of &lt;SELECT&gt; tags.  This is limited to
-     * one function for all three popups and is only used when the
-     * output() methods are used.  Individual getMonth, getDay,
-     * getYear static methods will not use this setting.
-     *
-     * @param string A String to use for onChange attribute.  If null,
-     * then nothing will be set.
-     * @return A DateSelector (self).
-     */
-    public DateSelector setOnChange(String onChange)
-    {
-        if (onChange != null)
-        {
-            this.onChange = onChange;
-            this.onChangeSet = true;
-        }
-        else
-        {
-            this.onChange = null;
-            this.onChangeSet = false;
-        }
-        return this;
-    }
-
-    /**
-     * Select the day to be selected if the showDays(false) behavior
-     * is used.  Individual getMonth, getDay, getYear static methods
-     * will not use this setting.
-     *
-     * @param day The day.
-     * @return A DateSelector (self).
-     */
-    public DateSelector setDay(int day)
-    {
-        this.setDay = day;
-        this.showDays = false;
-        return this;
-    }
-
-    /**
-     * Whether or not to show the days as a popup menu.  The days will
-     * be a hidden parameter and the value set with setDay is used.
-     * Individual getMonth, getDay, getYear static methods will not
-     * use this setting.
-     *
-     * @param show True if the day should be shown.
-     * @return A DateSelector (self).
-     */
-    public DateSelector setShowDay(boolean show)
-    {
-        this.showDays = false;
-        return this;
-    }
-
-    /**
-     * Set the selector name prefix.  Individual getMonth, getDay,
-     * getYear static methods will not use this setting.
-     *
-     * @param selname A String with the select name prefix.
-     */
-    public void setSelName(String selName)
-    {
-        this.selName = selName;
-    }
-
-    /**
-     * Get the selector name prefix.
-     *
-     * @return A String with the select name prefix.
-     */
-    public String getSelName()
-    {
-        return selName;
-    }
-
-    /**
-     * Return a month selector.
-     *
-     * @param name The name to use for the selected month.
-     * @return A select object with all the months.
-     */
-    public static Select getMonthSelector(String name)
-    {
-        return (getMonthSelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return a month selector.
-     *
-     * Note: The values of the month placed into the select list are
-     * the month integers starting at 0 (ie: if the user selects
-     * February, the selected value will be 1).
-     *
-     * @param name The name to use for the selected month.
-     * @param now Calendar to start with.
-     * @return A select object with all the months.
-     */
-    public static Select getMonthSelector(String name, Calendar now)
-    {
-        Select monthSelect = new Select().setName(name);
-
-        for (int curMonth = 0; curMonth <= 11; curMonth++)
-        {
-            Option o = new Option();
-            o.addElement(monthName[curMonth]);
-            o.setValue(curMonth);
-            if ((now.get(Calendar.MONTH)) == curMonth)
-            {
-                o.setSelected(true);
-            }
-            monthSelect.addElement(o);
-        }
-        return (monthSelect);
-    }
-
-    /**
-     * Return a day selector.
-     *
-     * @param name The name to use for the selected day.
-     * @return A select object with all the days in a month.
-     */
-    public static Select getDaySelector(String name)
-    {
-        return (getDaySelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return a day selector.
-     *
-     * @param name The name to use for the selected day.
-     * @param now Calendar to start with.
-     * @return A select object with all the days in a month.
-     */
-    public static Select getDaySelector(String name, Calendar now)
-    {
-        Select daySelect = new Select().setName(name);
-
-        for (int currentDay = 1; currentDay <= 31; currentDay++)
-        {
-            Option o = new Option();
-            o.addElement(Integer.toString(currentDay));
-            o.setValue(currentDay);
-            if (now.get(Calendar.DAY_OF_MONTH) == currentDay)
-            {
-                o.setSelected(true);
-            }
-            daySelect.addElement(o);
-        }
-        return (daySelect);
-    }
-
-    /**
-     * Return a year selector.
-     *
-     * @param name The name to use for the selected year.
-     * @return A select object with all the years starting five years
-     * from now and five years before this year.
-     */
-    public static Select getYearSelector(String name)
-    {
-        return (getYearSelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return a year selector.
-     *
-     * @param name The name to use for the selected year.
-     * @param now Calendar to start with.
-     * @return A select object with all the years starting five years
-     * from now and five years before this year.
-     */
-    public static Select getYearSelector(String name, Calendar now)
-    {
-        int startYear = now.get(Calendar.YEAR);
-        return (getYearSelector(name, startYear - 5, startYear + 5, startYear));
-    }
-
-    /**
-     * Return a year selector.
-     *
-     * @param name The name to use for the selected year.
-     * @param firstYear the first (earliest) year in the selector.
-     * @param lastYear the last (latest) year in the selector.
-     * @param selectedYear the year initially selected in the Select html.
-     * @return A select object with all the years from firstyear
-     * to lastyear..
-     */
-    public static Select getYearSelector(String name,
-                                         int firstYear, int lastYear,
-                                         int selectedYear)
-    {
-        Select yearSelect = new Select().setName(name);
-
-        for (int currentYear = firstYear;
-             currentYear <= lastYear;
-
-             currentYear++)
-        {
-            Option o = new Option();
-            o.addElement(Integer.toString(currentYear));
-            o.setValue(currentYear);
-            if (currentYear == selectedYear)
-            {
-                o.setSelected(true);
-            }
-            yearSelect.addElement(o);
-        }
-        return (yearSelect);
-    }
-
-    /**
-     * Select the day to be selected if the showDays(false) behavior
-     * is used.  Individual getMonth, getDay, getYear static methods
-     * will not use this setting.
-     *
-     * @param day The day.
-     * @return A DateSelector (self).
-     */
-    public boolean setYear(int firstYear, int lastYear, int selectedYear)
-    {
-        if (firstYear <= lastYear && firstYear <= selectedYear
-                && selectedYear <= lastYear)
-        {
-            this.useYears = true;
-            this.firstYear = firstYear;
-            this.lastYear = lastYear;
-            this.selectedYear = selectedYear;
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Used to build the popupmenu in HTML.  The properties set in the
-     * object are used to generate the correct HTML.  The selName
-     * attribute is used to seed the names of the select lists.  The
-     * names will be generated as follows:
-     *
-     * <ul>
-     *  <li>selName + "_month"</li>
-     *  <li>selName + "_day"</li>
-     *  <li>selName + "_year"</li>
-     * </ul>
-     *
-     * If onChange was set it is also used in the generation of the
-     * output.  The output HTML will list the select lists in the
-     * following order: month day year.
-     *
-     * @return A String with the correct HTML for the date selector.
-     */
-    public String output()
-    {
-        return (ecsOutput().toString());
-    }
-
-    /**
-     * Used to build the popupmenu in HTML.  The properties set in the
-     * object are used to generate the correct HTML.  The selName
-     * attribute is used to seed the names of the select lists.  The
-     * names will be generated as follows:
-     *
-     * <ul>
-     *  <li>selName + "_month"</li>
-     *  <li>selName + "_day"</li>
-     *  <li>selName + "_year"</li>
-     * </ul>
-     *
-     * The output HTML will list the select lists in the following
-     * order: month day year.
-     *
-     * @return A String with the correct HTML for the date selector.
-     */
-    public String toString()
-    {
-        return (ecsOutput().toString());
-    }
-
-    /*
-     * Return an ECS container with the month, day, and year select
-     * objects inside.
-     *
-     * @return An ECS container.
-     */
-    public ElementContainer ecsOutput()
-    {
-        if (this.useDate == null)
-        {
-            this.useDate.setTime(new Date());
-        }
-
-        Select monthSelect = getMonthSelector(selName + MONTH_SUFFIX, useDate);
-        ConcreteElement daySelect = null;
-        if (!showDays)
-        {
-            daySelect = new Input(Input.hidden, selName + DAY_SUFFIX, setDay);
-        }
-        else
-        {
-            Select tmp = getDaySelector(selName + DAY_SUFFIX, useDate);
-            if (onChangeSet)
-            {
-                tmp.setOnChange(onChange);
-            }
-            daySelect = tmp;
-        }
-        Select yearSelect = null;
-        if (useYears)
-        {
-            yearSelect = getYearSelector(selName + YEAR_SUFFIX,
-                    firstYear, lastYear, selectedYear);
-        }
-        else
-        {
-            yearSelect = getYearSelector(selName + YEAR_SUFFIX, useDate);
-        }
-        if (onChangeSet)
-        {
-            monthSelect.setOnChange(onChange);
-            yearSelect.setOnChange(onChange);
-        }
-        ElementContainer ec = new ElementContainer();
-        // ec.addElement(new Comment("== BEGIN org.apache.turbine.util.DateSelector.ecsOutput() =="));
-        ec.addElement(monthSelect);
-        ec.addElement(daySelect);
-        ec.addElement(yearSelect);
-        // ec.addElement(new Comment("== END org.apache.turbine.util.DateSelector.ecsOutput() =="));
-        return (ec);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/FileUtils.java b/src/java/org/apache/turbine/util/FileUtils.java
deleted file mode 100644
index a540010..0000000
--- a/src/java/org/apache/turbine/util/FileUtils.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Common {@link java.io.File} manipulation routines.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- * @deprecated This class will be removed after the 2.3 release. Please
- *             use FileUtils from <a href="http://jakarta.apache.org/commons/">commons-io</a>.
- */
-public class FileUtils
-{
-    /**
-     * The number of bytes in a kilobyte.
-     */
-    public static final int ONE_KB = 1024;
-
-    /**
-     * The number of bytes in a megabyte.
-     */
-    public static final int ONE_MB = ONE_KB * ONE_KB;
-
-    /**
-     * The number of bytes in a gigabyte.
-     */
-    public static final int ONE_GB = ONE_KB * ONE_MB;
-
-    /**
-     * Returns a human-readable version of the file size (original is in
-     * bytes).
-     *
-     * @param size The number of bytes.
-     * @return     A human-readable display value (includes units).
-     */
-    public static String byteCountToDisplaySize(int size)
-    {
-        String displaySize;
-
-        if (size / ONE_GB > 0)
-        {
-            displaySize = String.valueOf(size / ONE_GB) + " GB";
-        }
-        else if (size / ONE_MB > 0)
-        {
-            displaySize = String.valueOf(size / ONE_MB) + " MB";
-        }
-        else if (size / ONE_KB > 0)
-        {
-            displaySize = String.valueOf(size / ONE_KB) + " kB";
-        }
-        else
-        {
-            displaySize = String.valueOf(size) + " bytes";
-        }
-
-        return displaySize;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/FormMessage.java b/src/java/org/apache/turbine/util/FormMessage.java
deleted file mode 100644
index 78d4e4e..0000000
--- a/src/java/org/apache/turbine/util/FormMessage.java
+++ /dev/null
@@ -1,196 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-/**
- * A message class for holding information about a message that
- * relates to a specific form and field.  Used together with
- * FormMessages class.
- *
- * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
- * @version $Id$
- */
-public class FormMessage
-{
-    private String message;
-    private String formName;
-    private Vector fieldNames;
-
-    /**
-     * Constructor.
-     */
-    public FormMessage()
-    {
-        fieldNames = new Vector();
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param formName A String with the form name.
-     */
-    public FormMessage(String formName)
-    {
-        this();
-        setFormName(formName);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     */
-    public FormMessage(String formName,
-                       String fieldName)
-    {
-        this(formName);
-        setFieldName(fieldName);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     * @param message A String with the message.
-     */
-    public FormMessage(String formName,
-                       String fieldName,
-                       String message)
-    {
-        this(formName, fieldName);
-        setMessage(message);
-    }
-
-    /**
-     * Return the message.
-     *
-     * @return A String with the message.
-     */
-    public String getMessage()
-    {
-        return message;
-    }
-
-    /**
-     * Return the form name.
-     *
-     * @return A String with the form name.
-     */
-    public String getFormName()
-    {
-        return formName;
-    }
-
-    /**
-     * Return the field names.
-     *
-     * @return A String[] with the field names.
-     */
-    public String[] getFieldNames()
-    {
-        String[] result = new String[fieldNames.size()];
-        fieldNames.copyInto(result);
-        return result;
-    }
-
-    /**
-     * Set the message.
-     *
-     * @param message A String with the message.
-     */
-    public void setMessage(String message)
-    {
-        this.message = message;
-    }
-
-    /**
-     * Set the form name.
-     *
-     * @param formName A String with the form name.
-     */
-    public void setFormName(String formName)
-    {
-        this.formName = formName;
-    }
-
-    /**
-     * Adds one field name.
-     *
-     * @param fieldName A String with the field name.
-     */
-    public void setFieldName(String fieldName)
-    {
-        fieldNames.addElement(fieldName);
-    }
-
-    /**
-     * Write out the contents of the message in a friendly manner.
-     *
-     */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer("formName:" + getFormName() + ", fieldNames:");
-        for (int i = 0; i< getFieldNames().length; i++){
-            sb.append(getFieldNames()[i] + " ");
-        }
-        sb.append(", message:" + getMessage());
-
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/FormMessages.java b/src/java/org/apache/turbine/util/FormMessages.java
deleted file mode 100644
index 4844955..0000000
--- a/src/java/org/apache/turbine/util/FormMessages.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-/**
- * Used for adding and accessing messages that relate to a specific
- * form and field.  Allows to query for messages by form name and
- * field name.  Used together with FormMessage class.
- *
- * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
- * @version $Id$
- */
-public class FormMessages
-{
-    private Hashtable forms_messages;
-    private Hashtable fields_messages;
-    private Hashtable messages_fields;
-    private Hashtable forms_fields;
-
-    /**
-     * Constructor.
-     */
-    public FormMessages()
-    {
-        forms_messages = new Hashtable();
-        fields_messages = new Hashtable();
-        messages_fields = new Hashtable();
-        forms_fields = new Hashtable();
-    }
-
-    /**
-     * Sets a message for a field of a form.  The message is given as
-     * a long representing a return code.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     * @param returnCode A long with the return code.
-     */
-    public void setMessage(String formName,
-                           String fieldName,
-                           long returnCode)
-    {
-        setMessage(formName, fieldName, String.valueOf(returnCode));
-    }
-
-    /**
-     * Sets a message for a field of a form.  The message is given as
-     * a String.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     * @param messageName A String with the message.
-     */
-    public void setMessage(String formName,
-                           String fieldName,
-                           String messageName)
-    {
-        fieldName = formName + "-" + fieldName;
-        addValue(forms_messages, formName, messageName);
-        addValue(fields_messages, fieldName, messageName);
-        addValue(messages_fields, messageName, fieldName);
-        addValue(forms_fields, formName, fieldName);
-    }
-
-    /**
-     * Adds a pair key/value to a table, making sure not to add
-     * duplicate keys.
-     *
-     * @param table A Hastable.
-     * @param key A String with the key.
-     * @param value A String with value.
-     */
-    private void addValue(Hashtable table,
-                          String key,
-                          String value)
-    {
-        Vector values;
-
-        if (!table.containsKey(key))
-        {
-            values = new Vector();
-            values.addElement(value);
-            table.put(key, values);
-        }
-        else
-        {
-            values = ((Vector) table.get(key));
-            if (!values.contains(value))
-                values.addElement(value);
-        }
-    }
-
-    /**
-     * Gets a pair key/value from a table.
-     *
-     * @param table A Hastable.
-     * @param key A String with the key.
-     * @return A Vector with the pair key/value, or null.
-     */
-    private final Vector getValues(Hashtable table, String key)
-    {
-        return (Vector) table.get(key);
-    }
-
-    /**
-     * Gets all form messages for a given form.
-     *
-     * @param formName A String with the form name.
-     * @return A FormMessage[].
-     */
-    public FormMessage[] getFormMessages(String formName)
-    {
-        Vector messages, fields;
-        String messageName, fieldName;
-        messages = getValues(forms_messages, formName);
-        if (messages != null)
-        {
-            FormMessage[] result = new FormMessage[messages.size()];
-            for (int i = 0; i < messages.size(); i++)
-            {
-                result[i] = new FormMessage(formName);
-                messageName = (String) messages.elementAt(i);
-                result[i].setMessage(messageName);
-                fields = getValues(messages_fields, messageName);
-                for (int j = 0; j < fields.size(); j++)
-                {
-                    fieldName = (String) fields.elementAt(j);
-                    if (formHasField(formName, fieldName))
-                    {
-                        result[i].setFieldName(fieldName);
-                    }
-                }
-            }
-            return result;
-        }
-        return null;
-    }
-
-    /**
-     * Get form messages for a given form and field.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     * @return A FormMessage[].
-     */
-    public FormMessage[] getFormMessages(String formName, String fieldName)
-    {
-        String key = formName + "-" + fieldName;
-
-        Vector messages = getValues(fields_messages, key);
-        String messageName;
-
-        if (messages != null)
-        {
-            FormMessage[] result = new FormMessage[messages.size()];
-            for (int i = 0; i < messages.size(); i++)
-            {
-                result[i] = new FormMessage(formName, fieldName);
-                messageName = (String) messages.elementAt(i);
-                result[i].setMessage(messageName);
-            }
-            return result;
-        }
-        return null;
-    }
-
-    /**
-     * Check whether a form as a field.
-     *
-     * @param formName A String with the form name.
-     * @param fieldName A String with the field name.
-     * @return True if form has the field.
-     */
-    private boolean formHasField(String formName,
-                                 String fieldName)
-    {
-        List fields = getValues(forms_fields, formName);
-        for (Iterator iter = fields.iterator(); iter.hasNext();)
-        {
-            if (fieldName.equals(iter.next().toString()))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/GenerateUniqueId.java b/src/java/org/apache/turbine/util/GenerateUniqueId.java
deleted file mode 100644
index c0eb69b..0000000
--- a/src/java/org/apache/turbine/util/GenerateUniqueId.java
+++ /dev/null
@@ -1,189 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Random;
-
-/**
- * This class generates a unique 10+ character id.  This is good for
- * authenticating users or tracking users around.
- *
- * <p>This code was borrowed from Apache
- * JServ.JServServletManager.java.  It is what Apache JServ uses to
- * generate session ids for users.  Unfortunately, it was not included
- * in Apache JServ as a class, so I had to create one here in order to
- * use it.
- *
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
- * @version $Id$
- */
-public class GenerateUniqueId
-{
-    /*
-     * Create a suitable string for session identification.  Use
-     * synchronized count and time to ensure uniqueness.  Use random
-     * string to ensure the timestamp cannot be guessed by programmed
-     * attack.
-     *
-     * Format of id is <6 chars random><3 chars time><1+ char count>
-     */
-    static private int session_count = 0;
-    static private long lastTimeVal = 0;
-    static private Random randomSource = new java.util.Random();
-
-    // MAX_RADIX is 36
-
-    /*
-     * We want to have a random string with a length of 6 characters.
-     * Since we encode it BASE 36, we've to modulo it with the
-     * following value:
-     */
-    public final static long maxRandomLen = 2176782336L; // 36 ** 6
-
-    /*
-     * The session identifier must be unique within the typical
-     * lifespan of a Session; the value can roll over after that.  3
-     * characters: (this means a roll over after over a day, which is
-     * much larger than a typical lifespan)
-     */
-    public final static long maxSessionLifespanTics = 46656; // 36 ** 3
-
-    /*
-     * Millisecons between different tics.  So this means that the
-     * 3-character time string has a new value every 2 seconds:
-     */
-    public final static long ticDifference = 2000;
-
-    /**
-     * Get the unique id.
-     *
-     * <p>NOTE: This must work together with
-     * get_jserv_session_balance() in jserv_balance.c
-     *
-     * @return A String with the new unique id.
-     */
-    static synchronized public String getIdentifier()
-    {
-        StringBuffer sessionId = new StringBuffer();
-
-        // Random value.
-        long n = randomSource.nextLong();
-        if (n < 0) n = -n;
-        n %= maxRandomLen;
-
-        // Add maxLen to pad the leading characters with '0'; remove
-        // first digit with substring.
-        n += maxRandomLen;
-        sessionId.append(Long.toString(n, Character.MAX_RADIX)
-                .substring(1));
-
-        long timeVal = (System.currentTimeMillis() / ticDifference);
-
-        // Cut.
-        timeVal %= maxSessionLifespanTics;
-
-        // Padding, see above.
-        timeVal += maxSessionLifespanTics;
-
-        sessionId.append(Long.toString(timeVal, Character.MAX_RADIX)
-                .substring(1));
-
-        /*
-         * Make the string unique: append the session count since last
-         * time flip.
-         */
-
-        // Count sessions only within tics.  So the 'real' session
-        // count isn't exposed to the public.
-        if (lastTimeVal != timeVal)
-        {
-            lastTimeVal = timeVal;
-            session_count = 0;
-        }
-        sessionId.append(Long.toString(++session_count,
-                Character.MAX_RADIX));
-
-        return sessionId.toString();
-    }
-
-    /**
-     * Get the unique id.
-     *
-     * @param jsIdent A String.
-     * @return A String with the new unique id.
-     */
-    synchronized public String getIdentifier(String jsIdent)
-    {
-        if (jsIdent != null && jsIdent.length() > 0)
-        {
-            return getIdentifier() + "." + jsIdent;
-        }
-        return getIdentifier();
-    }
-
-    /**
-     * Simple test of the functionality.
-     *
-     * @param args A String[] with the command line arguments.
-     */
-    public static void main(String[] args)
-    {
-        System.out.println(GenerateUniqueId.getIdentifier());
-        System.out.println(GenerateUniqueId.getIdentifier());
-        System.out.println(GenerateUniqueId.getIdentifier());
-        System.out.println(GenerateUniqueId.getIdentifier());
-    }
-}
diff --git a/src/java/org/apache/turbine/util/HttpUtils.java b/src/java/org/apache/turbine/util/HttpUtils.java
deleted file mode 100644
index 575f11e..0000000
--- a/src/java/org/apache/turbine/util/HttpUtils.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.turbine.util;
-
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.text.SimpleDateFormat;
-
-import java.util.Date;
-import java.util.Locale;
-import java.util.TimeZone;
-
-/**
- * This class provides utilities for handling some semi-trivial HTTP stuff that
- * would othterwise be handled elsewhere.
- *
- * @author <a href="mailto:magnus@handpoint.com">Magnús Þór Torfason</a>
- * @version $Id$
- */
-public class HttpUtils
-{
-    /**
-     * The date format to use for HTTP Dates.
-     */
-    private static SimpleDateFormat httpDateFormat;
-
-    static
-    {
-        httpDateFormat = new SimpleDateFormat(
-                "EEE, dd MMM yyyy HH:mm:ss z", Locale.US);
-        httpDateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
-    }
-
-    /**
-     * Formats a java Date according to rfc 1123, the rfc standard for dates in
-     * http.
-     *
-     * @param date The Date to format
-     * @return A String represeentation of the date
-     */
-    public static String formatHttpDate(Date date)
-    {
-        synchronized (httpDateFormat)
-        {
-            return httpDateFormat.format(date);
-        }
-    }
-
-    /**
-     * This method sets the required expiration headers in the response for a
-     * given RunData object.  This method attempts to set all relevant headers,
-     * both for HTTP 1.0 and HTTP 1.1.
-     *
-     * @param data The RunData object we are setting cache information for.
-     * @param expiry The number of seconds untill the document should expire,
-     * <code>0</code> indicating immediate expiration (i.e. no caching).
-     */
-    public static void setCacheHeaders(RunData data, int expiry)
-    {
-        if (0 == expiry)
-        {
-            data.getResponse().setHeader("Pragma", "no-cache");
-            data.getResponse().setHeader("Cache-Control", "no-cache");
-            data.getResponse().setHeader("Expires",
-                    formatHttpDate(new Date()));
-        }
-        else
-        {
-            Date expiryDate = new Date(System.currentTimeMillis() + expiry);
-            data.getResponse().setHeader("Expires",
-                    formatHttpDate(expiryDate));
-        }
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/InputFilterUtils.java b/src/java/org/apache/turbine/util/InputFilterUtils.java
deleted file mode 100644
index 7636245..0000000
--- a/src/java/org/apache/turbine/util/InputFilterUtils.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.Entities;
-
-import org.apache.ecs.filter.CharacterFilter;
-
-/**
- * Some filter methods that have been orphaned in the Screen class.
- *
- *
- * @author <a href="mailto:mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class InputFilterUtils
-{
-    /** A HtmlFilter Object for the normal input filter */
-    private static final CharacterFilter filter = htmlFilter();
-
-    /** A HtmlFilter Object for the minimal input filter */
-    private static final CharacterFilter minFilter = htmlMinFilter();
-
-    /**
-     * This function can/should be used in any screen that will output
-     * User entered text.  This will help prevent users from entering
-     * html (<SCRIPT>) tags that will get executed by the browser.
-     *
-     * @param s The string to prepare.
-     * @return A string with the input already prepared.
-     */
-    public static String prepareText(String s)
-    {
-        return filter.process(s);
-    }
-
-    /**
-     * This function can/should be used in any screen that will output
-     * User entered text.  This will help prevent users from entering
-     * html (<SCRIPT>) tags that will get executed by the browser.
-     *
-     * @param s The string to prepare.
-     * @return A string with the input already prepared.
-     */
-    public static String prepareTextMinimum(String s)
-    {
-        return minFilter.process(s);
-    }
-
-    /**
-     * These attributes are supposed to be the default, but they are
-     * not, at least in ECS 1.2.  Include them all just to be safe.
-     *
-     * @return A CharacterFilter to do HTML filtering.
-     */
-    private static CharacterFilter htmlFilter()
-    {
-        CharacterFilter filter = new CharacterFilter();
-        filter.addAttribute("\"", Entities.QUOT);
-        filter.addAttribute("'", Entities.LSQUO);
-        filter.addAttribute("&", Entities.AMP);
-        filter.addAttribute("<", Entities.LT);
-        filter.addAttribute(">", Entities.GT);
-        return filter;
-    }
-
-    /*
-     * We would like to filter user entered text that might be
-     * dynamically added, using javascript for example.  But we do not
-     * want to filter all the above chars, so we will just disallow
-     * <.
-     *
-     * @return A CharacterFilter to do minimal HTML filtering.
-     */
-    private static CharacterFilter htmlMinFilter()
-    {
-        CharacterFilter filter = new CharacterFilter();
-        filter.removeAttribute(">");
-        filter.removeAttribute("\"");
-        filter.removeAttribute("'");
-        filter.removeAttribute("&");
-        filter.addAttribute("<", Entities.LT);
-        return filter;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/Log.java b/src/java/org/apache/turbine/util/Log.java
deleted file mode 100644
index b989685..0000000
--- a/src/java/org/apache/turbine/util/Log.java
+++ /dev/null
@@ -1,289 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.LogFactory;
-import org.apache.turbine.TurbineConstants;
-
-/**
- * A facade class for Turbine Logging
- *
- * Use this class to conveniently access the system logging facility.
- *
- * @deprecated Use the commons.logging system for logging
- *
- * @author <a href="mailto:Tomasz.Zielinski@e-point.pl">Tomasz Zielinski</a>
- * @author <a href="mailto:hps@intermeta.de>Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class Log
-{
-
-    /**
-     * This method returns default logger for Turbine System
-     *
-     * @return The default logger for system.
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static org.apache.commons.logging.Log getLogger()
-    {
-        return LogFactory.getLog(TurbineConstants.DEFAULT_LOGGER);
-    }
-
-    /**
-     * This method returns logger with given name if such logger exists,
-     * or the default logger.
-     *
-     * @return The default logger for system.
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static org.apache.commons.logging.Log getLogger(String logName)
-    {
-        org.apache.commons.logging.Log log = LogFactory.getLog(logName);
-
-        if (log == null)
-        {
-            log = getLogger();
-        }
-        return log;
-    }
-
-    /**
-     * This is a log method with logLevel == DEBUG, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void debug(String message)
-    {
-        getLogger().debug(message);
-    }
-
-    /**
-     * This is a log method with logLevel == DEBUG, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void debug(String message, Throwable t)
-    {
-        getLogger().debug(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == DEBUG, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void debug(String logName, String message, Throwable t)
-    {
-        getLogger(logName).debug(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == DEBUG, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void debug(String logName, String message)
-    {
-        getLogger(logName).debug(message);
-    }
-
-    /**
-     * This is a log method with logLevel == INFO, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void info(String message)
-    {
-        getLogger().info(message);
-    }
-
-    /**
-     * This is a log method with logLevel == INFO, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void info(String message, Throwable t)
-    {
-        getLogger().info(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == INFO, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void info(String logName, String message)
-    {
-        getLogger(logName).info(message);
-    }
-
-    /**
-     * This is a log method with logLevel == INFO, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void info(String logName, String message, Throwable t)
-    {
-        getLogger(logName).info(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == WARN, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void warn(String message)
-    {
-        getLogger().warn(message);
-    }
-
-    /**
-     * This is a log method with logLevel == WARN, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void warn(String message, Throwable t)
-    {
-        getLogger().warn(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == WARN, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void warn(String logName, String message)
-    {
-        getLogger(logName).warn(message);
-    }
-
-    /**
-     * This is a log method with logLevel == WARN, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void warn(String logName, String message, Throwable t)
-    {
-        getLogger(logName).warn(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == ERROR, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void error(String message)
-    {
-        getLogger().error(message);
-    }
-
-    /**
-     * This is a log method with logLevel == ERROR, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void error(String message, Throwable t)
-    {
-        getLogger().error(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == ERROR, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void error(String logName, String message)
-    {
-        getLogger(logName).error(message);
-    }
-
-    /**
-     * This is a log method with logLevel == ERROR, printing is done by
-     * the given logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void error(String logName, String message, Throwable t)
-    {
-        getLogger(logName).error(message, t);
-    }
-
-    /**
-     * This is a log method with logLevel == ERROR, printing is done by
-     * the default logger
-     *
-     * @deprecated Use the commons.logging system for logging
-     */
-    public static void error(Throwable e)
-    {
-        error("", e);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/ObjectUtils.java b/src/java/org/apache/turbine/util/ObjectUtils.java
deleted file mode 100644
index 3f60293..0000000
--- a/src/java/org/apache/turbine/util/ObjectUtils.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.List;
-
-/**
- * This is where common Object manipulation routines should go.
- *
- * @author <a href="mailto:nissim@nksystems.com">Nissim Karpenstein</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class ObjectUtils
-{
-    /**
-     * Returns a default value if the object passed is null.
-     *
-     * @param o The object to test.
-     * @param dflt The default value to return.
-     * @return The object o if it is not null, dflt otherwise.
-     * @deprecated Use org.apache.commons.lang.ObjectUtils.defaultIfNull()
-     */
-    public static Object isNull(Object o, Object dflt)
-    {
-		return org.apache.commons.lang.ObjectUtils.defaultIfNull(o,dflt);
-    }
-
-    /**
-     * Adds an object to a vector, making sure the object is in the
-     * vector only once.
-     *
-     * @param v The vector.
-     * @param o The object.
-     * @deprecated No replacement
-     */
-    public static void addOnce(List l, Object o)
-    {
-        if (!l.contains(o))
-        {
-            l.add(o);
-        }
-    }
-
-    /**
-     * Converts a hashtable to a byte array for storage/serialization.
-     *
-     * @param hash The Hashtable to convert.
-     *
-     * @return A byte[] with the converted Hashtable.
-     *
-     * @exception Exception A generic exception.
-     */
-    public static byte[] serializeHashtable(Hashtable hash)
-        throws Exception
-    {
-        Hashtable saveData = new Hashtable(hash.size());
-        String key = null;
-        Object value = null;
-        byte[] byteArray = null;
-
-        Enumeration keys = hash.keys();
-
-        while (keys.hasMoreElements())
-        {
-            key = (String) keys.nextElement();
-            value = hash.get(key);
-            if (value instanceof Serializable)
-            {
-                saveData.put (key, value);
-            }
-        }
-
-        ByteArrayOutputStream baos = null;
-        BufferedOutputStream bos = null;
-        ObjectOutputStream out = null;
-        try
-        {
-            // These objects are closed in the finally.
-            baos = new ByteArrayOutputStream();
-            bos  = new BufferedOutputStream(baos);
-            out  = new ObjectOutputStream(bos);
-
-            out.writeObject(saveData);
-            out.flush();
-            bos.flush();
-
-            byteArray = baos.toByteArray();
-        }
-        finally
-        {
-            if (out != null)
-            {
-                out.close();
-            }
-            if (bos != null)
-            {
-                bos.close();
-            }
-            if (baos != null)
-            {
-                baos.close();
-            }
-        }
-        return byteArray;
-    }
-
-    /**
-     * Deserializes a single object from an array of bytes.
-     *
-     * @param objectData The serialized object.
-     *
-     * @return The deserialized object, or <code>null</code> on failure.
-     */
-    public static Object deserialize(byte[] objectData)
-    {
-        Object object = null;
-
-        if (objectData != null)
-        {
-            // These streams are closed in finally.
-            ObjectInputStream in = null;
-            ByteArrayInputStream bin = new ByteArrayInputStream(objectData);
-            BufferedInputStream bufin = new BufferedInputStream(bin);
-            
-            try
-            {
-                in = new ObjectInputStream(bufin);
-
-                // If objectData has not been initialized, an
-                // exception will occur.
-                object = in.readObject();
-            }
-            catch (Exception e)
-            {
-            }
-            finally
-            {
-                try
-                {
-                    if (in != null)
-                    {
-                        in.close();
-                    }
-                    if (bufin != null)
-                    {
-                        bufin.close();
-                    }
-                    if (bin != null)
-                    {
-                        bin.close();
-                    }
-                }
-                catch (IOException e)
-                {
-                }
-            }
-        }
-        return object;
-    }
-
-    /**
-     * Compares two Objects, returns true if their values are the
-     * same.  It checks for null values prior to an o1.equals(o2)
-     * check
-     *
-     * @param o1 The first object.
-     * @param o2 The second object.
-     * @return True if the values of both xstrings are the same.
-     * @deprecated Use org.apache.commons.lang.ObjectUtils.equals()
-     */
-    public static boolean equals(Object o1, Object o2)
-    {
-		return org.apache.commons.lang.ObjectUtils.equals(o1,o2);
-    }
-
-    /**
-     * Nice method for adding data to a Hashtable in such a way
-     * as to not get NPE's. The point being that if the
-     * value is null, Hashtable.put() will throw an exception.
-     * That blows in the case of this class cause you may want to
-     * essentially treat put("Not Null", null ) == put("Not Null", "")
-     * We will still throw a NPE if the key is null cause that should
-     * never happen.
-     * @deprecated No replacement
-     */
-    public static final void safeAddToHashtable(Hashtable hash, Object key,
-                                                Object value)
-            throws NullPointerException
-    {
-        if (value == null)
-        {
-            hash.put(key, "");
-        }
-        else
-        {
-            hash.put(key, value);
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/ParameterParser.java b/src/java/org/apache/turbine/util/ParameterParser.java
deleted file mode 100644
index 3ab89fb..0000000
--- a/src/java/org/apache/turbine/util/ParameterParser.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * ParameterParser is an interface to a utility to handle parsing and
- * retrieving the data passed via the GET/POST/PATH_INFO arguments.
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * ParameterParser pp = data.getParameters();
- * pp.add("ERROR",1);
- * pp.add("eRrOr",2);
- * int result = pp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.ParameterParser instead.
- */
-public interface ParameterParser
-        extends org.apache.turbine.util.parser.ParameterParser
-{
-}
diff --git a/src/java/org/apache/turbine/util/QuickSort.java b/src/java/org/apache/turbine/util/QuickSort.java
deleted file mode 100644
index 3dbd8b1..0000000
--- a/src/java/org/apache/turbine/util/QuickSort.java
+++ /dev/null
@@ -1,166 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * QuickSort - adapted from Doug Lea's Public Domain collection
- * library.
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @version $Id$
- * @deprecated This class will be removed after the 2.3 release. It is
- *             not part of the Web Framework scope. If you need it, please
- *             use a sorting library for quicksort.
- */
-public class QuickSort
-{
-    /**
-     * Sort array of Objects using the QuickSort algorithm.
-     *
-     * @param s An Object[].
-     * @param lo The current lower bound.
-     * @param hi The current upper bound.
-     * @param cmp A Comparable to compare two elements.
-     */
-    public static void quickSort(Object s[],
-                                 int lo,
-                                 int hi,
-                                 Comparable cmp)
-    {
-        if (lo >= hi)
-            return;
-
-        /*
-         * Use median-of-three(lo, mid, hi) to pick a partition.  Also
-         * swap them into relative order while we are at it.
-         */
-        int mid = (lo + hi) / 2;
-
-        if (cmp.compare(s[lo], s[mid]) > 0)
-        {
-            // Swap.
-            Object tmp = s[lo];
-            s[lo] = s[mid];
-            s[mid] = tmp;
-        }
-
-        if (cmp.compare(s[mid], s[hi]) > 0)
-        {
-            // Swap .
-            Object tmp = s[mid];
-            s[mid] = s[hi];
-            s[hi] = tmp;
-
-            if (cmp.compare(s[lo], s[mid]) > 0)
-            {
-                // Swap.
-                Object tmp2 = s[lo];
-                s[lo] = s[mid];
-                s[mid] = tmp2;
-            }
-        }
-
-        // Start one past lo since already handled lo.
-        int left = lo + 1;
-
-        // Similarly, end one before hi since already handled hi.
-        int right = hi - 1;
-
-        // If there are three or fewer elements, we are done.
-        if (left >= right)
-            return;
-
-        Object partition = s[mid];
-
-        for (; ;)
-        {
-            while (cmp.compare(s[right], partition) > 0)
-                --right;
-
-            while (left < right &&
-                    cmp.compare(s[left], partition) <= 0)
-                ++left;
-
-            if (left < right)
-            {
-                // Swap.
-                Object tmp = s[left];
-                s[left] = s[right];
-                s[right] = tmp;
-
-                --right;
-            }
-            else
-                break;
-        }
-        quickSort(s, lo, left, cmp);
-        quickSort(s, left + 1, hi, cmp);
-    }
-
-    /**
-     * Sorts and array of objects.
-     *
-     * @param data An Object[].
-     * @param cmp A Comparable to compare two elements.
-     */
-    public void sort(Object[] data,
-                     Comparable cmp)
-    {
-        QuickSort.quickSort(data,
-                0,
-                data.length - 1,
-                cmp);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/RunData.java b/src/java/org/apache/turbine/util/RunData.java
deleted file mode 100644
index 8bf81bc..0000000
--- a/src/java/org/apache/turbine/util/RunData.java
+++ /dev/null
@@ -1,681 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.Locale;
-import java.util.Map;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-
-import org.apache.ecs.Document;
-import org.apache.ecs.Element;
-import org.apache.ecs.StringElement;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.parser.CookieParser;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.template.TemplateInfo;
-
-/**
- * RunData is an interface to run-time information that is passed
- * within Turbine. This provides the threading mechanism for the
- * entire system because multiple requests can potentially come in
- * at the same time.  Thus, there is only one RunData implementation
- * for each request that is being serviced.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:bhoeneis@ee.ethz.ch">Bernie Hoeneisen</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface RunData extends PipelineData
-{
-    /**
-     * Gets the parameters.
-     *
-     * @return a parameter parser.
-     */
-    ParameterParser getParameters();
-
-    /**
-     * Gets the cookies.
-     *
-     * @return a cookie parser.
-     */
-    CookieParser getCookies();
-
-    /**
-     * Gets the servlet request.
-     *
-     * @return the request.
-     */
-    HttpServletRequest getRequest();
-
-    /**
-     * Gets the servlet response.
-     *
-     * @return the resposne.
-     */
-    HttpServletResponse getResponse();
-
-    /**
-     * Gets the servlet session information.
-     *
-     * @return the session.
-     */
-    HttpSession getSession();
-
-    /**
-     * Gets the servlet configuration used during servlet init.
-     *
-     * @return the configuration.
-     */
-    ServletConfig getServletConfig();
-
-    /**
-     * Gets the servlet context used during servlet init.
-     *
-     * @return the context.
-     */
-    ServletContext getServletContext();
-
-    /**
-     * Gets the access control list.
-     *
-     * @return the access control list.
-     */
-    AccessControlList getACL();
-
-    /**
-     * Sets the access control list.
-     *
-     * @param acl an access control list.
-     */
-    void setACL(AccessControlList acl);
-
-    /**
-     * Checks to see if the page is set.
-     *
-     * @return true if the page is set.
-     * @deprecated no replacement planned, ECS is no longer a requirement
-     */
-    boolean isPageSet();
-
-    /**
-     * Gets the page.
-     *
-     * @return a document.
-     * @deprecated no replacement planned, ECS is no longer a requirement
-     */
-    Document getPage();
-
-    /**
-     * Whether or not an action has been defined.
-     *
-     * @return true if an action has been defined.
-     */
-    boolean hasAction();
-
-    /**
-     * Gets the action. It returns an empty string if null so
-     * that it is easy to do conditionals on it based on the
-     * equalsIgnoreCase() method.
-     *
-     * @return a string, "" if null.
-     */
-    String getAction();
-
-    /**
-     * Sets the action for the request.
-     *
-     * @param action a atring.
-     */
-    void setAction(String action);
-
-    /**
-     * If the Layout has not been defined by the screen then set the
-     * layout to be "DefaultLayout".  The screen object can also
-     * override this method to provide intelligent determination of
-     * the Layout to execute.  You can also define that logic here as
-     * well if you want it to apply on a global scale.  For example,
-     * if you wanted to allow someone to define layout "preferences"
-     * where they could dynamicially change the layout for the entire
-     * site.
-     *
-     * @return a string.
-     */
-    String getLayout();
-
-    /**
-     * Set the layout for the request.
-     *
-     * @param layout a string.
-     */
-    void setLayout(String layout);
-
-    /**
-     * Convenience method for a template info that
-     * returns the layout template being used.
-     *
-     * @return a string.
-     */
-    String getLayoutTemplate();
-
-    /**
-     * Modifies the layout template for the screen. This convenience
-     * method allows for a layout to be modified from within a
-     * template. For example;
-     *
-     *    $data.setLayoutTemplate("NewLayout.vm")
-     *
-     * @param layout a layout template.
-     */
-    void setLayoutTemplate(String layout);
-
-    /**
-     * Whether or not a screen has been defined.
-     *
-     * @return true if a screen has been defined.
-     */
-    boolean hasScreen();
-
-    /**
-     * Gets the screen to execute.
-     *
-     * @return a string.
-     */
-    String getScreen();
-
-    /**
-     * Sets the screen for the request.
-     *
-     * @param screen a string.
-     */
-    void setScreen(String screen);
-
-    /**
-     * Convenience method for a template info that
-     * returns the name of the template being used.
-     *
-     * @return a string.
-     */
-    String getScreenTemplate();
-
-    /**
-     * Sets the screen template for the request. For
-     * example;
-     *
-     *    $data.setScreenTemplate("NewScreen.vm")
-     *
-     * @param screen a screen template.
-     */
-    void setScreenTemplate(String screen);
-
-    /**
-     * Gets the character encoding to use for reading template files.
-     *
-     * @return the template encoding or null if not specified.
-     */
-    String getTemplateEncoding();
-
-    /**
-     * Sets the character encoding to use for reading template files.
-     *
-     * @param encoding the template encoding.
-     */
-    void setTemplateEncoding(String encoding);
-
-    /**
-     * Gets the template info. Creates a new one if needed.
-     *
-     * @return a template info.
-     */
-    TemplateInfo getTemplateInfo();
-
-    /**
-     * Whether or not a message has been defined.
-     *
-     * @return true if a message has been defined.
-     */
-    boolean hasMessage();
-
-    /**
-     * Gets the results of an action or another message
-     * to be displayed as a string.
-     *
-     * @return a string.
-     */
-    String getMessage();
-
-    /**
-     * Sets the message for the request as a string.
-     *
-     * @param msg a string.
-     */
-    void setMessage(String msg);
-
-    /**
-     * Adds the string to message. If message has prior messages from
-     * other actions or screens, this method can be used to chain them.
-     *
-     * @param msg a string.
-     */
-    void addMessage(String msg);
-
-    /**
-     * Gets the results of an action or another message
-     * to be displayed as an ECS string element.
-     *
-     * @return a string element.
-     */
-    StringElement getMessageAsHTML();
-
-    /**
-     * Sets the message for the request as an ECS element.
-     *
-     * @param msg an element.
-     */
-    void setMessage(Element msg);
-
-    /**
-     * Adds the ECS element to message. If message has prior messages from
-     * other actions or screens, this method can be used to chain them.
-     *
-     * @param msg an element.
-     */
-    void addMessage(Element msg);
-
-    /**
-     * Unsets the message for the request.
-     */
-    void unsetMessage();
-
-    /**
-     * Gets a FormMessages object where all the messages to the
-     * user should be stored.
-     *
-     * @return a FormMessages.
-     */
-    FormMessages getMessages();
-
-    /**
-     * Sets the FormMessages object for the request.
-     *
-     * @param msgs A FormMessages.
-     */
-    void setMessages(FormMessages msgs);
-
-    /**
-     * Gets the title of the page.
-     *
-     * @return a string.
-     */
-    String getTitle();
-
-    /**
-     * Sets the title of the page.
-     *
-     * @param title a string.
-     */
-    void setTitle(String title);
-
-    /**
-     * Checks if a user exists in this session.
-     *
-     * @return true if a user exists in this session.
-     */
-    boolean userExists();
-
-    /**
-     * Gets the user.
-     *
-     * @return a user.
-     */
-    User getUser();
-
-    /**
-     * Sets the user.
-     *
-     * @param user a user.
-     */
-    void setUser(User user);
-
-    /**
-     * Attempts to get the user from the session. If it does
-     * not exist, it returns null.
-     *
-     * @return a user.
-     */
-    User getUserFromSession();
-
-    /**
-     * Allows one to invalidate the user in the default session.
-     *
-     * @return true if user was invalidated.
-     */
-    boolean removeUserFromSession();
-
-    /**
-     * Checks to see if out is set.
-     *
-     * @return true if out is set.
-     * @deprecated no replacement planned, response writer will not be cached
-     */
-    boolean isOutSet();
-
-    /**
-     * Gets the print writer. First time calling this
-     * will set the print writer via the response.
-     *
-     * @return a print writer.
-     * @throws IOException
-     * @deprecated no replacement planned, response writer will not be cached
-     */
-    PrintWriter getOut()
-            throws IOException;
-
-    /**
-     * Declares that output will be direct to the response stream,
-     * even though getOut() may never be called.  Useful for response
-     * mechanisms that may call res.getWriter() themselves
-     * (such as JSP.)
-     */
-    void declareDirectResponse();
-
-    /**
-     * Gets the locale. If it has not already been defined with
-     * setLocale(), then  properties named "locale.default.lang"
-     * and "locale.default.country" are checked from the Resource
-     * Service and the corresponding locale is returned. If these
-     * properties are undefined, JVM's default locale is returned.
-     *
-     * @return the locale.
-     */
-    Locale getLocale();
-
-    /**
-     * Sets the locale.
-     *
-     * @param locale the new locale.
-     */
-    void setLocale(Locale locale);
-
-    /**
-     * Gets the charset. If it has not already been defined with
-     * setCharSet(), then a property named "locale.default.charset"
-     * is checked from the Resource Service and returned. If this
-     * property is undefined, the default charset of the locale
-     * is returned. If the locale is undefined, null is returned.
-     *
-     * @return the name of the charset or null.
-     */
-    String getCharSet();
-
-    /**
-     * Sets the charset.
-     *
-     * @param charset the name of the new charset.
-     */
-    void setCharSet(String charset);
-
-    /**
-     * Gets the HTTP content type to return. If a charset
-     * has been specified, it is included in the content type.
-     * If the charset has not been specified and the main type
-     * of the content type is "text", the default charset is
-     * included. If the default charset is undefined, but the
-     * default locale is defined and it is not the US locale,
-     * a locale specific charset is included.
-     *
-     * @return the content type or an empty string.
-     */
-    String getContentType();
-
-    /**
-     * Sets the HTTP content type to return.
-     *
-     * @param ct the new content type.
-     */
-    void setContentType(String ct);
-
-    /**
-     * Gets the redirect URI. If this is set, also make sure to set
-     * the status code to 302.
-     *
-     * @return a string, "" if null.
-     */
-    String getRedirectURI();
-
-    /**
-     * Sets the redirect uri. If this is set, also make sure to set
-     * the status code to 302.
-     *
-     * @param ruri a string.
-     */
-    void setRedirectURI(String ruri);
-
-    /**
-     * Gets the HTTP status code to return.
-     *
-     * @return the status.
-     */
-    int getStatusCode();
-
-    /**
-     * Sets the HTTP status code to return.
-     *
-     * @param sc the status.
-     */
-    void setStatusCode(int sc);
-
-    /**
-     * Gets an array of system errors.
-     *
-     * @return a SystemError[].
-     */
-    SystemError[] getSystemErrors();
-
-    /**
-     * Adds a critical system error.
-     *
-     * @param err a system error.
-     */
-    void setSystemError(SystemError err);
-
-    /**
-     * Gets JNDI Contexts.
-     *
-     * @return a hashtable.
-     */
-    Map getJNDIContexts();
-
-    /**
-     * Sets JNDI Contexts.
-     *
-     * @param contexts a hashtable.
-     */
-    void setJNDIContexts(Map contexts);
-
-    /**
-     * Gets the cached server scheme.
-     *
-     * @return a string.
-     */
-    String getServerScheme();
-
-    /**
-     * Gets the cached server name.
-     *
-     * @return a string.
-     */
-    String getServerName();
-
-    /**
-     * Gets the cached server port.
-     *
-     * @return an int.
-     */
-    int getServerPort();
-
-    /**
-     * Gets the cached context path.
-     *
-     * @return a string.
-     */
-    String getContextPath();
-
-    /**
-     * Gets the cached script name.
-     *
-     * @return a string.
-     */
-    String getScriptName();
-
-    /**
-     * Gets the server data used by the request.
-     *
-     * @return server data.
-     */
-    ServerData getServerData();
-
-    /**
-     * Gets the IP address of the client that sent the request.
-     *
-     * @return a string.
-     */
-    String getRemoteAddr();
-
-    /**
-     * Gets the qualified name of the client that sent the request.
-     *
-     * @return a string.
-     */
-    String getRemoteHost();
-
-    /**
-     * Get the user agent for the request.
-     *
-     * @return a string.
-     */
-    String getUserAgent();
-
-    /**
-     * Pulls a user object from the session and increments the access
-     * counter and sets the last access date for the object.
-     */
-    void populate();
-
-    /**
-     * Saves a user object into the session.
-     */
-    void save();
-
-    /**
-     * Gets the stack trace if set.
-     *
-     * @return the stack trace.
-     */
-    String getStackTrace();
-
-    /**
-     * Gets the stack trace exception if set.
-     *
-     * @return the stack exception.
-     */
-    Throwable getStackTraceException();
-
-    /**
-     * Sets the stack trace.
-     *
-     * @param trace the stack trace.
-     * @param exp the exception.
-     */
-    void setStackTrace(String trace,
-                       Throwable exp);
-
-    /**
-     * Gets a table of debug variables.
-     *
-     * @return a Map of debug variables.
-     * @deprecated use {@link #getDebugVariables} instead
-     */
-    Map getVarDebug();
-
-    /**
-     * Sets a name/value pair in an internal Map that is accessible from the
-     * Error screen.  This is a good way to get debugging information
-     * when an exception is thrown.
-     *
-     * @param name name of the variable
-     * @param value value of the variable.
-     */
-    void setDebugVariable(String name, Object value);
-
-    /**
-     * Gets a Map of debug variables.
-     *
-     * @return a Map of debug variables.
-     */
-    Map getDebugVariables();
-}
diff --git a/src/java/org/apache/turbine/util/RunDataFactory.java b/src/java/org/apache/turbine/util/RunDataFactory.java
deleted file mode 100644
index 2fc682a..0000000
--- a/src/java/org/apache/turbine/util/RunDataFactory.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-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.turbine.services.TurbineServices;
-import org.apache.turbine.services.pool.TurbinePool;
-import org.apache.turbine.services.rundata.DefaultTurbineRunData;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.services.rundata.TurbineRunData;
-import org.apache.turbine.util.parser.DefaultCookieParser;
-import org.apache.turbine.util.parser.DefaultParameterParser;
-
-/**
- * Creates instances of RunData for use within Turbine or 3rd party
- * applications.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:burton@relativity.yi.org">Kevin A. Burton</a>
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated This factory tries to be the RunData Service if no RunData Service is
- * configured. RunData Service is now mandatory for Turbine so use it directly without
- * this factory.
- */
-public class RunDataFactory
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(RunDataFactory.class);
-
-    /**
-     * A flag for the RunData Service.
-     */
-    private static boolean tryRunDataService = true;
-
-    /**
-     * Open way to get RunData information across Turbine..
-     *
-     * @param req An HttpServletRequest.
-     * @param res An HttpServletResponse.
-     * @param config A ServletConfig.
-     * @throws TurbineException.
-     */
-    public static RunData getRunData(HttpServletRequest req,
-                                     HttpServletResponse res,
-                                     ServletConfig config)
-            throws TurbineException,
-                   IllegalArgumentException
-    {
-        // NOTE: getRunData( HttpServletRequest req,
-        // HttpServletResponse res ) has been deprecated 3-3-2000.
-        // Wait a couple months (before Turbine 1.0) and remove this
-        // method.  Also don't allow null for req, res, or config as
-        // these are now required by Turbine.  Uncomment the below as
-        // this should include the necessary functionality when we are
-        // ready.
-        if (req == null ||
-                res == null ||
-                config == null)
-        {
-            throw new IllegalArgumentException(
-                    "RunDataFactory fatal error: HttpServletRequest, " +
-                    "HttpServletResponse or ServletConfig were null.");
-        }
-
-        // Create a new RunData object.  This object caches all the
-        // information that is needed for the execution lifetime of a
-        // single request.  A new RunData object is created for each
-        // and every request and is passed to each and every module.
-        // Since each thread has its own RunData object, it is not
-        // necessary to perform syncronization for the data within
-        // this object.
-        // Try to retrieve the RunData implementation from the RunData Service.
-        if (tryRunDataService)
-        {
-            try
-            {
-                
-                return getRunDataService().getRunData(req, res, config);
-            }
-            catch (Exception x)
-            {
-                log.info("No Run Data Service available, not trying again!");
-                tryRunDataService = false;
-            }
-        }
-
-        // Failed, create a default implementation using the Pool Service.
-        TurbineRunData data =
-                (TurbineRunData) TurbinePool.getInstance(DefaultTurbineRunData.class);
-
-        // Cache some information that will be used elsewhere.
-        data.setRequest(req);
-        data.setResponse(res);
-
-        // Let the implementation to create messages on demand.
-        // data.setMessages(new FormMessages());
-
-        // data.context = this.getServletContext();
-
-        // Don't set this because if we want to output via
-        // res.getOutputStream() then we will get an
-        // IllegalStateException (already called getWriter()).  The
-        // solution is to only do this if data.getOut() is called and
-        // data.out is null. -jss
-
-        // data.setOut(data.getResponse().getWriter());
-
-        String contextPath = req.getContextPath();
-
-        String scriptName = contextPath + data.getRequest().getServletPath();
-
-        // Sets the default cookie parser.
-        data.setCookieParser(new DefaultCookieParser());
-
-        // Contains all of the GET/POST parameters.
-        data.setParameterParser(new DefaultParameterParser());
-
-        // Get the HttpSession object.
-        data.setSession(data.getRequest().getSession(true));
-
-        // Set the servlet configuration in RunData for use in loading
-        // other servlets.
-        data.setServletConfig(config);
-
-        // Now set the ServerData.
-        data.setServerData(new ServerData(data.getRequest().getServerName(),
-                data.getRequest().getServerPort(),
-                data.getRequest().getScheme(),
-                scriptName,
-                contextPath));
-        return (RunData) data;
-    }
-
-    /**
-     * Returns the used RunData object back to the factory for recycling.
-     *
-     * @param data the used RunData object.
-     */
-    public static void putRunData(RunData data)
-    {
-        // Try to return the RunData implementation to the RunData Service.
-        if (tryRunDataService)
-        {
-            try
-            {
-                getRunDataService().putRunData(data);
-                return;
-            }
-            catch (Exception x)
-            {
-            }
-        }
-
-        // Failed, use the Pool Service instead.
-        TurbinePool.putInstance(data);
-    }
-    
-    /**
-     * Static Helper method for looking up the RunDataService
-     * @return A RunDataService
-     */
-    private static RunDataService getRunDataService(){
-        return (RunDataService) TurbineServices
-        .getInstance().getService(RunDataService.SERVICE_NAME);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/SecurityCheck.java b/src/java/org/apache/turbine/util/SecurityCheck.java
deleted file mode 100644
index c963f7c..0000000
--- a/src/java/org/apache/turbine/util/SecurityCheck.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-/**
- * Utility for doing security checks in Screens and Actions.
- *
- * Sample usage:<br>
- *
- * <pre><code>
- * SecurityCheck mycheck =
- *   new SecurityCheck(data, "Unauthorized to do this!", "WrongPermission");
- * if (!mycheck.hasPermission("add_user");
- *   return;
- *</code></pre>
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public class SecurityCheck
-{
-    private String message;
-    private String failScreen;
-    private RunData data = null;
-
-    /**
-     * Constructor.
-     *
-     * @param data A Turbine RunData object.
-     * @param message The message to display upon failure.
-     * @param failedScreen The screen to redirect to upon failure.
-     */
-    public SecurityCheck(RunData data,
-                         String message,
-                         String failedScreen)
-    {
-        this.data = data;
-        this.message = message;
-        this.failScreen = failedScreen;
-    }
-
-    /**
-     * Does the user have this role?
-     *
-     * @param role A Role.
-     * @return True if the user has this role.
-     * @exception Exception, a generic exception.
-     */
-    public boolean hasRole(Role role)
-            throws Exception
-    {
-        boolean value = false;
-        if (data.getACL() == null ||
-                !data.getACL().hasRole(role))
-        {
-            data.setScreen(failScreen);
-            data.setMessage(message);
-        }
-        else
-        {
-            value = true;
-        }
-        return value;
-    }
-
-    /**
-     * Does the user have this role?
-     *
-     * @param role A String.
-     * @return True if the user has this role.
-     * @exception Exception, a generic exception.
-     */
-    public boolean hasRole(String role)
-            throws Exception
-    {
-        return hasRole(TurbineSecurity.getRoleByName(role));
-    }
-
-    /**
-     * Does the user have this permission?
-     *
-     * @param permission A Permission.
-     * @return True if the user has this permission.
-     * @exception Exception, a generic exception.
-     */
-    public boolean hasPermission(Permission permission)
-            throws Exception
-    {
-        boolean value = false;
-        if (data.getACL() == null ||
-                !data.getACL().hasPermission(permission))
-        {
-            data.setScreen(failScreen);
-            data.setMessage(message);
-        }
-        else
-        {
-            value = true;
-        }
-        return value;
-    }
-
-    /**
-     * Does the user have this permission?
-     *
-     * @param permission A String.
-     * @return True if the user has this permission.
-     * @exception Exception, a generic exception.
-     */
-    public boolean hasPermission(String permission)
-            throws Exception
-    {
-        return hasPermission(TurbineSecurity.getPermissionByName(permission));
-    }
-
-    /**
-     * Get the message that should be displayed.  This is initialized
-     * in the constructor.
-     *
-     * @return A String.
-     */
-    public String getMessage()
-    {
-        return message;
-    }
-
-    /**
-     * Get the screen that should be displayed.  This is initialized
-     * in the constructor.
-     *
-     * @return A String.
-     */
-    public String getFailScreen()
-    {
-        return failScreen;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/SequencedHashtable.java b/src/java/org/apache/turbine/util/SequencedHashtable.java
deleted file mode 100644
index e6dd425..0000000
--- a/src/java/org/apache/turbine/util/SequencedHashtable.java
+++ /dev/null
@@ -1,302 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * A {@link java.util.Hashtable} whose keys are sequenced.  The
- * sequencing of the keys allow easy access to the values in the order
- * which they were added in.  This class is thread safe.
- * <p>
- * Implementing the List interface is not possible due to a instance
- * method name clash between the Collection and the List interface:
- *
- * <table>
- * <tr><td>Collections</td><td>boolean remove(Object o)</td></tr>
- * <tr><td>Lists</td><td>Object remove(Object o)</td></tr>
- * </table>
- *
- * So one cannot implement both interfaces at the same, which is unfortunate
- * because the List interface would be very nice in conjuction with Velocity.
- * <p>
- * A slightly more complex implementation and interface could involve
- * the use of a list of <code>Map.Entry</code> objects.
- *
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @version $Id$
- * @deprecated Use SequencedHashMap from the commons collections.
- */
-public class SequencedHashtable extends Hashtable
-{
-    /**
-     * Indicator for an unknown index.
-     */
-    private static final int UNKNOWN_INDEX = -1;
-
-    /**
-     * The sequence used to keep track of the hash keys.  Younger objects are
-     * kept towards the end of the list.  Does not allow duplicates.
-     */
-    private LinkedList keySequence;
-
-    /**
-     * Creates a new instance with default storage.
-     */
-    public SequencedHashtable()
-    {
-        keySequence = new LinkedList();
-    }
-
-    /**
-     * Creates a new instance with the specified storage.
-     *
-     * @param size The storage to allocate up front.
-     */
-    public SequencedHashtable(int size)
-    {
-        super(size);
-        keySequence = new LinkedList();
-    }
-
-    /**
-     * Clears all elements.
-     */
-    public synchronized void clear()
-    {
-        super.clear();
-        keySequence.clear();
-    }
-
-    /**
-     * Creates a shallow copy of this object, preserving the internal
-     * structure by copying only references.  The keys, values, and
-     * sequence are not <code>clone()</code>'d.
-     *
-     * @return A clone of this instance.
-     */
-    public synchronized Object clone()
-    {
-        SequencedHashtable seqHash = (SequencedHashtable) super.clone();
-        seqHash.keySequence = (LinkedList) keySequence.clone();
-        return seqHash;
-    }
-
-    /**
-     * Returns the key at the specified index.
-     */
-    public Object get(int index)
-    {
-        return keySequence.get(index);
-    }
-
-    /**
-     * Returns the value at the specified index.
-     */
-    public Object getValue(int index)
-    {
-        return get(get(index));
-    }
-
-    /**
-     * Returns the index of the specified key.
-     */
-    public int indexOf(Object key)
-    {
-        return keySequence.indexOf(key);
-    }
-
-    /**
-     * Returns a key iterator.
-     */
-    public Iterator iterator()
-    {
-        return keySequence.iterator();
-    }
-
-    /**
-     * Returns the last index of the specified key.
-     */
-    public int lastIndexOf(Object key)
-    {
-        return keySequence.lastIndexOf(key);
-    }
-
-    /**
-     * Returns the ordered sequence of keys.
-     *
-     * This method is meant to be used for retrieval of Key / Value pairs
-     * in e.g. Velocity:
-     * <PRE>
-     * ## $table contains a sequenced hashtable
-     * #foreach ($key in $table.sequence())
-     * &lt;TR&gt;
-     * &lt;TD&gt;Key: $key&lt;/TD&gt;
-     * &lt;/TD&gt;Value: $table.get($key)&lt;/TD&gt;
-     * &lt;/TR&gt;
-     * #end
-     * </PRE>
-     *
-     * @return The ordered list of keys.
-     */
-    public List sequence()
-    {
-        return keySequence;
-    }
-
-    /**
-     * Stores the provided key/value pair.  Freshens the sequence of existing
-     * elements.
-     *
-     * @param key   The key to the provided value.
-     * @param value The value to store.
-     * @return      The previous value for the specified key, or
-     *              <code>null</code> if none.
-     */
-    public synchronized Object put(Object key, Object value)
-    {
-        Object prevValue = super.put(key, value);
-        freshenSequence(key, prevValue);
-        return prevValue;
-    }
-
-    /**
-     * Freshens the sequence of the element <code>value</code> if
-     * <code>value</code> is not <code>null</code>.
-     *
-     * @param key   The key whose sequence to freshen.
-     * @param value The value whose existance to check before removing the old
-     *              key sequence.
-     */
-    protected void freshenSequence(Object key, Object value)
-    {
-        if (value != null)
-        {
-            // Freshening existing element's sequence.
-            keySequence.remove(key);
-        }
-        keySequence.add(key);
-    }
-
-    /**
-     * Stores the provided key/value pairs.
-     *
-     * @param t The key/value pairs to store.
-     */
-    public synchronized void putAll(Map t)
-    {
-        Set set = t.entrySet();
-        for (Iterator iter = set.iterator(); iter.hasNext();)
-        {
-            Map.Entry e = (Map.Entry) iter.next();
-            put(e.getKey(), e.getValue());
-        }
-    }
-
-    /**
-     * Removes the element at the specified index.
-     *
-     * @param index The index of the object to remove.
-     * @return      The previous value coressponding the <code>key</code>, or
-     *              <code>null</code> if none existed.
-     */
-    public Object remove(int index)
-    {
-        return remove(index, null);
-    }
-
-    /**
-     * Removes the element with the specified key.
-     *
-     * @param key   The <code>Map</code> key of the object to remove.
-     * @return      The previous value coressponding the <code>key</code>, or
-     *              <code>null</code> if none existed.
-     */
-    public Object remove(Object key)
-    {
-        return remove(UNKNOWN_INDEX, key);
-    }
-
-    /**
-     * Removes the element with the specified key or index.
-     *
-     * @param index The index of the object to remove, or
-     *              <code>UNKNOWN_INDEX</code> if not known.
-     * @param key   The <code>Map</code> key of the object to remove.
-     * @return      The previous value coressponding the <code>key</code>, or
-     *              <code>null</code> if none existed.
-     */
-    private final synchronized Object remove(int index, Object key)
-    {
-        if (index == UNKNOWN_INDEX) index = indexOf(key);
-        if (key == null) key = get(index);
-        if (index != UNKNOWN_INDEX) keySequence.remove(index);
-        return super.remove(key);
-    }
-
-    /**
-     * Slightly cheaper implementation of <code>values()</code> method.
-     */
-    public Collection values()
-    {
-        return keySequence;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/ServerData.java b/src/java/org/apache/turbine/util/ServerData.java
deleted file mode 100644
index 5ca8375..0000000
--- a/src/java/org/apache/turbine/util/ServerData.java
+++ /dev/null
@@ -1,320 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.util.uri.URIConstants;
-
-/**
- * Holds basic server information under which Turbine is running.
- * This class is accessable via the RunData object within the Turbine
- * system.  You can also use it as a placeholder for this information
- * if you are only emulating a servlet system.
- *
- * @author <a href="mailto:burton@apache.org">Kevin A. Burton</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class ServerData
-{
-    /** Cached serverName, */
-    private String serverName = null;
-
-    /** Cached serverPort. */
-    private int serverPort = 0;
-
-    /** Cached serverScheme. */
-    private String serverScheme = null;
-
-    /** Cached script name. */
-    private String  scriptName = null;
-
-    /** Cached context path. */
-    private String  contextPath = null;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(ServerData.class);
-
-    /**
-     * Constructor.
-     *
-     * @param serverName The server name.
-     * @param serverPort The server port.
-     * @param serverScheme The server scheme.
-     * @param scriptName The script name.
-     * @param contextPath The context Path
-     */
-    public ServerData(String serverName,
-        int serverPort,
-        String serverScheme,
-        String scriptName,
-        String contextPath)
-    {
-        if (log.isDebugEnabled())
-        {
-            StringBuffer sb = new StringBuffer();
-            sb.append("Constructor(");
-            sb.append(serverName);
-            sb.append(", ");
-            sb.append(serverPort);
-            sb.append(", ");
-            sb.append(serverScheme);
-            sb.append(", ");
-            sb.append(scriptName);
-            sb.append(", ");
-            sb.append(contextPath);
-            sb.append(")");
-            log.debug(sb.toString());
-        }
-
-        setServerName(serverName);
-        setServerPort(serverPort);
-        setServerScheme(serverScheme);
-        setScriptName(scriptName);
-        setContextPath(contextPath);
-    }
-
-    /**
-     * Copy-Constructor
-     *
-     * @param serverData A ServerData Object
-     */
-    public ServerData(ServerData serverData)
-    {
-        log.debug("Copy Constructor(" + serverData + ")");
-
-        setServerName(serverData.getServerName());
-        setServerPort(serverData.getServerPort());
-        setServerScheme(serverData.getServerScheme());
-        setScriptName(serverData.getScriptName());
-        setContextPath(serverData.getContextPath());
-    }
-
-    /**
-     * A C'tor that takes a HTTP Request object and
-     * builds the server data from its contents
-     *
-     * @param req The HTTP Request
-     */
-    public ServerData(HttpServletRequest req)
-    {
-        setServerName(req.getServerName());
-        setServerPort(req.getServerPort());
-        setServerScheme(req.getScheme());
-        setScriptName(req.getServletPath());
-        setContextPath(req.getContextPath());
-    }
-
-    /**
-     * generates a new Object with the same values as this one.
-     *
-     * @return A cloned object.
-     */
-    public Object clone()
-    {
-        log.debug("clone()");
-        return new ServerData(this);
-    }
-
-    /**
-     * Get the name of the server.
-     *
-     * @return A String.
-     */
-    public String getServerName()
-    {
-        return StringUtils.isEmpty(serverName) ? "" : serverName;
-    }
-
-    /**
-     * Sets the cached serverName.
-     *
-     * @param serverName the server name.
-     */
-    public void setServerName(String serverName)
-    {
-        log.debug("setServerName(" + serverName + ")");
-        this.serverName = serverName;
-    }
-
-    /**
-     * Get the server port.
-     *
-     * @return the server port.
-     */
-    public int getServerPort()
-    {
-        return this.serverPort;
-    }
-
-    /**
-     * Sets the cached serverPort.
-     *
-     * @param serverPort the server port.
-     */
-    public void setServerPort(int serverPort)
-    {
-        log.debug("setServerPort(" + serverPort + ")");
-        this.serverPort = serverPort;
-    }
-
-    /**
-     * Get the server scheme.
-     *
-     * @return the server scheme.
-     */
-    public String getServerScheme()
-    {
-        return StringUtils.isEmpty(serverScheme) ? "" : serverScheme;
-    }
-
-    /**
-     * Sets the cached serverScheme.
-     *
-     * @param serverScheme the server scheme.
-     */
-    public void setServerScheme(String serverScheme)
-    {
-        log.debug("setServerScheme(" + serverScheme + ")");
-        this.serverScheme = serverScheme;
-    }
-
-    /**
-     * Get the script name
-     *
-     * @return the script name.
-     */
-    public String getScriptName()
-    {
-        return StringUtils.isEmpty(scriptName) ? "" : scriptName;
-    }
-
-    /**
-     * Set the script name.
-     *
-     * @param scriptName the script name.
-     */
-    public void setScriptName(String scriptName)
-    {
-        log.debug("setScriptName(" + scriptName + ")");
-        this.scriptName = scriptName;
-    }
-
-    /**
-     * Get the context path.
-     *
-     * @return the context path.
-     */
-    public String getContextPath()
-    {
-        return StringUtils.isEmpty(contextPath) ? "" : contextPath;
-    }
-
-    /**
-     * Set the context path.
-     *
-     * @param contextPath A String.
-     */
-    public void setContextPath(String contextPath)
-    {
-        log.debug("setContextPath(" + contextPath + ")");
-        this.contextPath = contextPath;
-    }
-
-    /**
-     * Appends the Host URL to the supplied StringBuffer.
-     *
-     * @param url A StringBuffer object
-     */
-    public void getHostUrl(StringBuffer url)
-    {
-        url.append(getServerScheme());
-        url.append("://");
-        url.append(getServerName());
-        if ((getServerScheme().equals(URIConstants.HTTP)
-                && getServerPort() != URIConstants.HTTP_PORT) 
-            ||
-            (getServerScheme().equals(URIConstants.HTTPS)
-                && getServerPort() != URIConstants.HTTPS_PORT)
-            )
-        {
-            url.append(":");
-            url.append(getServerPort());
-        }
-    }
-
-    /**
-     * Returns this object as an URL.
-     *
-     * @return The contents of this object as a String
-     */
-    public String toString()
-    {
-        StringBuffer url = new StringBuffer();
-
-        getHostUrl(url);
-
-        url.append(getContextPath());
-        url.append(getScriptName());
-        return url.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/ServletUtils.java b/src/java/org/apache/turbine/util/ServletUtils.java
deleted file mode 100644
index 0c35270..0000000
--- a/src/java/org/apache/turbine/util/ServletUtils.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.StringTokenizer;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.util.uri.URIConstants;
-
-/**
- * This is where common Servlet manipulation routines should go.
- *
- * @author <a href="mailto:gonzalo.diethelm@sonda.com">Gonzalo Diethelm</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class ServletUtils
-{
-    /**
-     * The default HTTP port number.
-     * @deprecated use URIConstants.HTTP_PORT
-     */
-    public static final int HTTP_PORT = URIConstants.HTTP_PORT;
-
-    /**
-     * The default HTTPS port number.
-     * @deprecated use URIConstants.HTTPS_PORT
-     */
-    public static final int HTTPS_PORT = URIConstants.HTTPS_PORT;
-
-    /**
-     * The default FTP port number.
-     * @deprecated use URIConstants.FTP_PORT
-     */
-    public static final int FTP_PORT = URIConstants.FTP_PORT;
-
-    /**
-     * The part of the URI which separates the protocol indicator (i.e. the
-     * scheme) from the rest of the URI. 
-     * @deprecated use URIConstants.URI_SCHEME_SEPARATOR;
-     */
-    public static final String URI_SCHEME_SEPARATOR = URIConstants.URI_SCHEME_SEPARATOR;
-
-    /**
-     * Expands a string that points to a relative path or path list,
-     * leaving it as an absolute path based on the servlet context.
-     * It will return null if the text is empty or the config object
-     * is null.
-     *
-     * @param config The ServletConfig.
-     * @param text The String containing a path or path list.
-     * @return A String with the expanded path or path list.
-     */
-    public static String expandRelative(ServletConfig config,
-                                        String text)
-    {
-        if (StringUtils.isEmpty(text))
-        {
-            return text;
-        }
-
-        if (config == null)
-        {
-            return null;
-        }
-
-        // attempt to make it relative
-        if (!text.startsWith("/") && !text.startsWith("./")
-                && !text.startsWith("\\") && !text.startsWith(".\\"))
-        {
-            StringBuffer sb = new StringBuffer();
-            sb.append("./");
-            sb.append(text);
-            text = sb.toString();
-        }
-        
-        ServletContext context = config.getServletContext();
-        String base = context.getRealPath("/");
-        
-        base = (StringUtils.isEmpty(base))
-            ? config.getInitParameter(Turbine.BASEDIR_KEY) 
-            : base;
-            
-        if (StringUtils.isEmpty(base))
-        {
-            return text;
-        }
-
-        String separator = System.getProperty("path.separator");
-        
-        StringTokenizer tokenizer = new StringTokenizer(text,
-                separator);
-        StringBuffer buffer = new StringBuffer();
-        while (tokenizer.hasMoreTokens())
-        {
-            buffer.append(base).append(tokenizer.nextToken());
-            if (tokenizer.hasMoreTokens())
-            {
-                buffer.append(separator);
-            }
-        }
-        return buffer.toString();
-    }
-
-    /**
-     * Defaults to the scheme used in the supplied request.
-     *
-     * @see #hostURL(HttpServletRequest req, String proto)
-     * @deprecated Use ServerData(req).getHostUrl()
-     */
-    public static StringBuffer hostURL(HttpServletRequest req)
-    {
-        return hostURL(req, null);
-    }
-
-    /**
-     * Returns a URL fragment derived from the provided HTTP request,
-     * including the protocol used to address the server (if non-standard
-     * for HTTP/HTTPS).  Returns the fragment as a buffer
-     *
-     * @param req The request to extract information from.
-     * @param scheme The protocol indicator to prefix the host name with, or
-     * the protocol used to address the server with if <code>null</code>.
-     * @return The desired URL fragment.
-     * @deprecated Use ServerData(req).getHostUrl()
-     */
-    public static StringBuffer hostURL(HttpServletRequest req, String scheme)
-    {
-        ServerData serverData = new ServerData(req);
-
-        if (StringUtils.isNotEmpty(scheme))
-        {
-            serverData.setServerScheme(scheme);
-        }
-
-        StringBuffer sb = new StringBuffer();
-
-        serverData.getHostUrl(sb);
-
-        return sb;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/StringStackBuffer.java b/src/java/org/apache/turbine/util/StringStackBuffer.java
deleted file mode 100644
index cb34e07..0000000
--- a/src/java/org/apache/turbine/util/StringStackBuffer.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-import java.util.Iterator;
-import java.util.Stack;
-
-/**
- * This class implements a Stack for String objects.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @version $Id$
- * @deprecated This class will be removed after the 2.3 release. It is
- *             not part of the Web Framework scope. If you need this class,
- *             please lobby for inclusion in the <a href="http://jakarta.apache.org/commons/">commons-collections</a> component repository.
- */
-public class StringStackBuffer implements Serializable
-{
-    /** The stack. */
-    private Stack stk = null;
-
-    /**
-     * Constructor.
-     */
-    public StringStackBuffer()
-    {
-        stk = new Stack();
-    }
-
-    /**
-     * Adds the String to the collection if it does not already
-     * contain it.
-     *
-     * @param s A String.
-     * @return A StringStackBuffer.
-     */
-    public StringStackBuffer add(String s)
-    {
-        if (s != null && !contains(s))
-            stk.push(s);
-        return this;
-    }
-
-    /**
-     * Adds all Strings in the given StringStackBuffer to the collection
-     * (skipping those it already contains)
-     *
-     * @param s A StringStackBuffer.
-     * @return A StringStackBuffer.
-     */
-    public StringStackBuffer addAll(StringStackBuffer s)
-    {
-        for (Iterator it = s.stk.iterator(); it.hasNext();)
-        {
-            add((String) it.next());
-        }
-        return this;
-    }
-
-    /**
-     * Clears the Stack.
-     *
-     */
-    public void clear()
-    {
-        stk.clear();
-    }
-
-    /**
-     * Does the Stack contain this String?
-     *
-     * @param s A String.
-     * @return True if the Stack contains this String.
-     */
-    public boolean contains(String s)
-    {
-        return (stk.search(s) != -1);
-    }
-
-    /**
-     * Is the Stack empty?
-     * @return True if the Stack is empty.
-     */
-    public boolean empty()
-    {
-        return stk.empty();
-    }
-
-    /**
-     * Get a String off the Stack at a certain position.
-     *
-     * @param i An int with the position.
-     * @return A String.
-     */
-    public String get(int i)
-    {
-        return (String) stk.elementAt(i);
-    }
-
-    /**
-     * What is the size of the Stack?
-     *
-     * @return An int, the size of the Stack.
-     */
-    public int size()
-    {
-        return stk.size();
-    }
-
-    /**
-     * Converts the stack to a single {@link java.lang.String} with no
-     * separator.
-     *
-     * @return The stack elements as a single block of text.
-     */
-    public String toString()
-    {
-        return toString("");
-    }
-
-    /**
-     * Converts the stack to a single {@link java.lang.String}.
-     *
-     * @param separator The text to use as glue between elements in
-     * the stack.
-     * @return The stack elements--glued together by
-     * <code>separator</code>--as a single block of text.
-     */
-    public String toString(String separator)
-    {
-        String s;
-        if (size() > 0)
-        {
-            if (separator == null)
-            {
-                separator = "";
-            }
-
-            // Determine what size to pre-allocate for the buffer.
-            int totalSize = 0;
-            for (int i = 0; i < stk.size(); i++)
-            {
-                totalSize += get(i).length();
-            }
-            totalSize += (stk.size() - 1) * separator.length();
-
-            StringBuffer sb = new StringBuffer(totalSize).append(get(0));
-            for (int i = 1; i < stk.size(); i++)
-            {
-                sb.append(separator).append(get(i));
-            }
-            s = sb.toString();
-        }
-        else
-        {
-            s = "";
-        }
-        return s;
-    }
-
-    /**
-     * Compares two StringStackBuffers.  Considered equal if the toString()
-     * methods are equal.
-     *
-     */
-    public boolean equals(Object ssbuf)
-    {
-        boolean isEquiv = false;
-        if (ssbuf == null || !(ssbuf instanceof StringStackBuffer))
-        {
-            isEquiv = false;
-        }
-
-        else if (ssbuf == this)
-        {
-            isEquiv = true;
-        }
-
-        else if (this.toString().equals(ssbuf.toString()))
-        {
-            isEquiv = true;
-        }
-
-        return isEquiv;
-    }
-
-    public String[] toStringArray()
-    {
-        String[] ss = new String[size()];
-        for (int i = 0; i < size(); i++)
-        {
-            ss[i] = get(i);
-        }
-        return ss;
-    }
-}
-
-
-
-
-
diff --git a/src/java/org/apache/turbine/util/SystemError.java b/src/java/org/apache/turbine/util/SystemError.java
deleted file mode 100644
index f30046f..0000000
--- a/src/java/org/apache/turbine/util/SystemError.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.exception.NestableError;
-
-/**
- * Used for wrapping system errors (exceptions) that may occur in the
- * application.
- *
- * @author <a href="mailto:neeme@one.lv">Neeme Praks</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class SystemError extends NestableError
-{
-    /**
-     * Constructor.
-     *
-     * @param cause A Throwable object
-     */
-    public SystemError(Throwable cause)
-    {
-        super(cause);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param message Error message
-     */
-    public SystemError(String message)
-    {
-        super(message);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param cause A Throwable object
-     * @param message A String.
-     * @deprecated Use SystemError(String,Throwable) instead.
-     */
-    public SystemError(Throwable cause, String message)
-    {
-        super(message, cause);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param cause A Throwable object
-     * @param message A String.
-     */
-    public SystemError(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-
-    /**
-     * Constructor.
-     *
-     * @param cause A Throwable object
-     * @param returnCode A long.
-     * @deprecated No replacement
-     */
-    public SystemError(Throwable cause, long returnCode)
-    {
-        super("Return code = " + Long.toString(returnCode), cause);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/TSVParser.java b/src/java/org/apache/turbine/util/TSVParser.java
deleted file mode 100644
index ce7ffd2..0000000
--- a/src/java/org/apache/turbine/util/TSVParser.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-
-import java.util.List;
-
-/**
- * TSVParser is used to parse a stream with tab-separated values and
- * generate ParameterParser objects which can be used to
- * extract the values in the desired type.
- *
- * <p>The class extends the abstract class DataStreamParser and implements
- * initTokenizer with suitable values for TSV files to provide this
- * functionality.
- *
- * <p>The class (indirectly through DataStreamParser) implements the
- * java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $tsvfile)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.TSVParser instead.
- */
-public class TSVParser 
-        extends org.apache.turbine.util.parser.TSVParser
-{
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from. The column headers must be set
-     * independently either explicitly, or by reading the first line
-     * of the TSV values.
-     *
-     * @param in the input reader.
-     */
-    public TSVParser(Reader in)
-    {
-        super(in, null, null);
-    }
-
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from, and a list of column names.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     */
-    public TSVParser(Reader in, List columnNames)
-    {
-        super(in, columnNames, null);
-    }
-
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public TSVParser(Reader in, List columnNames, String characterEncoding)
-    {
-        super(in, columnNames, characterEncoding);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/TimeSelector.java b/src/java/org/apache/turbine/util/TimeSelector.java
deleted file mode 100644
index 6e2925c..0000000
--- a/src/java/org/apache/turbine/util/TimeSelector.java
+++ /dev/null
@@ -1,677 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.NumberFormat;
-import java.util.Calendar;
-import java.util.Date;
-
-import org.apache.ecs.ConcreteElement;
-import org.apache.ecs.ElementContainer;
-import org.apache.ecs.html.Comment;
-import org.apache.ecs.html.Input;
-import org.apache.ecs.html.Option;
-import org.apache.ecs.html.Select;
-
-/**
- * TimeSelector is a utility class to handle the creation of a set of
- * time drop-down menus.  The code is broken into a set of static methods
- * for quick and easy access to the individual select objects:
- *
- *  <pre>
- *  ElementContainer ec timeSelect = new ElementContainer();
- *  String myName = "mytime";
- *  ec.addElement(TimeSelector.getHourSelector(myName));
- *  ec.addElement(TimeSelector.getMinuteSelector(myName));
- *  ec.addElement(TimeSelector.getAMPMSelector(myName));
- *  </pre>
- *
- * There are also methods which will use attributes to build a
- * complete time selector in the default 12hr format (eg HH:MM am/pm):
- *
- *  <pre>
- *  TimeSelector ts = new TimeSelector(myName);
- *  timeSelect = ts.ecsOutput();
- *  </pre>
- *
- * Minutes/Seconds are by default rounded to the nearest 5 units
- * although this can be easily changed.
- *
- * 24hr TimeSelectors can also be produced. The following example
- * creates a full precision TimeSelector (eg HH:MM:SS):
- *
- *  <pre>
- *  TimeSelector ts = new TimeSelector(myName);
- *  ts.setTimeFormat(TimeSelector.TWENTY_FOUR_HOUR);
- *  ts.setMinuteInterval(1);
- *  ts.setSecondInterval(1);
- *  ts.setShowSeconds(true);
- *  timeSelect = ts.toString();
- *  </pre>
- *
- * @author <a href="mailto:ekkerbj@netscape.net">Jeffrey D. Brekke</a>
- * @author <a href="mailto:rich@thenetrevolution.com">Rich Aston</a>
- * @version $Id$
- */
-public class TimeSelector
-{
-    /** Prefix for time names. */
-    public static final String DEFAULT_PREFIX = "TimeSelector";
-
-    /** Suffix for hour parameter. */
-    public static final String HOUR_SUFFIX = "_hour";
-
-    /** Suffix for minute parameter. */
-    public static final String MINUTE_SUFFIX = "_minute";
-
-    /** Suffix for second parameter. */
-    public static final String SECOND_SUFFIX = "_second";
-
-    /** Suffix for am/pm parameter. */
-    public static final String AMPM_SUFFIX = "_ampm";
-
-    /** Constant for 12hr format */
-    public static final int TWELVE_HOUR = 0;
-
-    /** Constant for 24hr format */
-    public static final int TWENTY_FOUR_HOUR = 1;
-
-    /** TODO: Add ability to specify Locale. */
-    private static final NumberFormat nbrFmt;
-
-    private static final int DEFAULT_MINUTE_INTERVAL = 5;
-    private static final int DEFAULT_SECOND_INTERVAL = 5;
-    private static final int DEFAULT_TIME_FORMAT = TWELVE_HOUR;
-
-    private int timeFormat = DEFAULT_TIME_FORMAT;
-    private int minuteInterval = DEFAULT_MINUTE_INTERVAL;
-    private int secondInterval = DEFAULT_SECOND_INTERVAL;
-
-    private Calendar useDate = null;
-    private String selName = null;
-    private String onChange = null;
-    private boolean onChangeSet = false;
-    private boolean showSeconds = false;
-    private int setSeconds = 0;
-
-    static
-    {
-        nbrFmt = NumberFormat.getInstance();
-        nbrFmt.setMinimumIntegerDigits(2);
-        nbrFmt.setMaximumIntegerDigits(2);
-    }
-
-    /**
-     * Constructor defaults to current date/time and uses the default
-     * prefix: <pre>TimeSelector.DEFAULT</pre>
-     */
-    public TimeSelector()
-    {
-        this.selName = DEFAULT_PREFIX;
-        this.useDate = Calendar.getInstance();
-        this.useDate.setTime(new Date());
-    }
-
-    /**
-     * Constructor, uses the date/time set in the calendar
-     * passed in (with the date/time set correctly).
-     *
-     * @param selName A String with the selector name.
-     * @param useDate A Calendar with a date/time.
-     */
-    public TimeSelector(String selName, Calendar useDate)
-    {
-        this.useDate = useDate;
-        this.selName = selName;
-    }
-
-    /**
-     * Constructor defaults to current date/time.
-     *
-     * @param selName A String with the selector name.
-     */
-    public TimeSelector(String selName)
-    {
-        this.selName = selName;
-        this.useDate = Calendar.getInstance();
-        this.useDate.setTime(new Date());
-    }
-
-    /**
-     * Adds the onChange to all of <code>&lt;SELECT&gt;</code> tags.
-     * This is limited to one function for all three popups and is only
-     * used when the output() methods are used.  Individual getHour,
-     * getMinute, getSecond, getAMPM static methods will not use this
-     * setting.
-     *
-     * @param onChange A String to use for onChange attribute.  If null,
-     * then nothing will be set.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setOnChange(String onChange)
-    {
-        if (onChange != null)
-        {
-            this.onChange = onChange;
-            this.onChangeSet = true;
-        }
-        else
-        {
-            this.onChange = null;
-            this.onChangeSet = false;
-        }
-        return this;
-    }
-
-    /**
-     * Select the second to be selected if the showSeconds(false) behavior
-     * is used.  Individual getHour, getMinute, getSecond, getAMPM
-     * static methods will not use this setting.
-     *
-     * @param seconds The second.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setSeconds(int seconds)
-    {
-        this.setSeconds = seconds;
-        this.showSeconds = false;
-        return this;
-    }
-
-    /**
-     * Set the interval between options in the minute select box.
-     * Individual getHour, getMinute, getSecond, getAMPM static methods
-     * will not use this setting.
-     *
-     * @param minutes Interval in minutes.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setMinuteInterval(int minutes)
-    {
-        this.minuteInterval = minutes;
-        return this;
-    }
-
-    /**
-     * Set the interval between options in the second select box.
-     * Individual getHour, getMinute, getSecond, getAMPM static methods
-     * will not use this setting.
-     *
-     * @param seconds Interval in seconds.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setSecondInterval(int seconds)
-    {
-        this.secondInterval = seconds;
-        return this;
-    }
-
-    /**
-     * Set the time format to 12 or 24 hour. Individual getHour,
-     * getMinute, getSecond, getAMPM static methods
-     * will not use this setting.
-     *
-     * @param format Time format.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setTimeFormat(int format)
-    {
-        this.timeFormat = format;
-        return this;
-    }
-
-    /**
-     * Whether or not to show the seconds as a popup menu.  The seconds will
-     * be a hidden parameter and the value set with setSeconds is used.
-     * Individual getHour, getMinute, getSecond, getAMPM static methods
-     * will not use this setting.
-     *
-     * @param show True if the second should be shown.
-     * @return A TimeSelector (self).
-     */
-    public TimeSelector setShowSeconds(boolean show)
-    {
-        this.showSeconds = show;
-        return this;
-    }
-
-    /**
-     * Set the selector name prefix.  Individual getHour, getMinute,
-     * getSeconds, getAMPM static methods will not use this setting.
-     *
-     * @param selname A String with the select name prefix.
-     */
-    public void setSelName(String selName)
-    {
-        this.selName = selName;
-    }
-
-    /**
-     * Get the selector name prefix.
-     *
-     * @return A String with the select name prefix.
-     */
-    public String getSelName()
-    {
-        return selName;
-    }
-
-    /**
-     * Return a second selector.
-     *
-     * @param name The name to use for the selected second.
-     * @return A select object with second options.
-     */
-    public static Select getSecondSelector(String name)
-    {
-        return (getSecondSelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return a second selector.
-     *
-     * @param name The name to use for the selected second.
-     * @param now Calendar to start with.
-     * @return A select object with second options.
-     */
-    public static Select getSecondSelector(String name, Calendar now)
-    {
-        return (getSecondSelector(name, Calendar.getInstance(),
-                DEFAULT_SECOND_INTERVAL));
-    }
-
-    /**
-     * Return a second selector.
-     *
-     * @param name The name to use for the selected second.
-     * @param now Calendar to start with.
-     * @param interval Interval between options.
-     * @return A select object with second options.
-     */
-    public static Select getSecondSelector(String name, Calendar now,
-                                           int interval)
-    {
-        Select secondSelect = new Select().setName(name);
-
-        for (int currentSecond = 0; currentSecond <= 59; currentSecond += interval)
-        {
-            Option o = new Option();
-            o.addElement(nbrFmt.format(currentSecond));
-            o.setValue(currentSecond);
-            int nearestSecond =
-                    ((now.get(Calendar.SECOND) / interval) * interval);
-
-            if (nearestSecond == currentSecond)
-            {
-                o.setSelected(true);
-            }
-            secondSelect.addElement(o);
-        }
-        return (secondSelect);
-    }
-
-    /**
-     * Return a minute selector.
-     *
-     * @param name The name to use for the selected minute.
-     * @return A select object with minute options.
-     */
-    public static Select getMinuteSelector(String name)
-    {
-        return (getMinuteSelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return a minute selector.
-     *
-     * @param name The name to use for the selected minute.
-     * @return A select object with minute options.
-     */
-    public static Select getMinuteSelector(String name, Calendar now)
-    {
-        return (getMinuteSelector(name, now, DEFAULT_MINUTE_INTERVAL));
-    }
-
-    /**
-     * Return a minute selector.
-     *
-     * @param name The name to use for the selected minute.
-     * @param now Calendar to start with.
-     * @param interval Interval between options.
-     * @return A select object with minute options.
-     */
-    public static Select getMinuteSelector(String name, Calendar now,
-                                           int interval)
-    {
-        Select minuteSelect = new Select().setName(name);
-
-        for (int curMinute = 0; curMinute <= 59; curMinute += interval)
-        {
-            Option o = new Option();
-            o.addElement(nbrFmt.format(curMinute));
-            o.setValue(curMinute);
-            int nearestMinute =
-                    ((now.get(Calendar.MINUTE)) / interval) * interval;
-
-            if (nearestMinute == curMinute)
-            {
-                o.setSelected(true);
-            }
-            minuteSelect.addElement(o);
-        }
-        return (minuteSelect);
-    }
-
-    /**
-     * Return an 12 hour selector.
-     *
-     * @param name The name to use for the selected hour.
-     * @return A select object with all the hours.
-     */
-    public static Select getHourSelector(String name)
-    {
-        return (getHourSelector(name, Calendar.getInstance()));
-    }
-
-    /**
-     * Return an 12 hour selector.
-     *
-     * @param name The name to use for the selected hour.
-     * @param now Calendar to start with.
-     * @return A select object with all the hours.
-     */
-    public static Select getHourSelector(String name, Calendar now)
-    {
-        return (getHourSelector(name, Calendar.getInstance(), TWELVE_HOUR));
-    }
-
-    /**
-     * Return an hour selector (either 12hr or 24hr depending on
-     * <code>format</code>.
-     *
-     * @param name The name to use for the selected hour.
-     * @param now Calendar to start with.
-     * @param format Time format.
-     * @return A select object with all the hours.
-     */
-    public static Select getHourSelector(String name, Calendar now, int format)
-    {
-        Select hourSelect = new Select().setName(name);
-
-        if (format == TWENTY_FOUR_HOUR)
-        {
-            for (int currentHour = 0; currentHour <= 23; currentHour++)
-            {
-                Option o = new Option();
-                o.addElement(nbrFmt.format(currentHour));
-                o.setValue(currentHour);
-                if (now.get(Calendar.HOUR_OF_DAY) == currentHour)
-                {
-                    o.setSelected(true);
-                }
-                hourSelect.addElement(o);
-            }
-        }
-        else
-        {
-            for (int curHour = 1; curHour <= 12; curHour++)
-            {
-                Option o = new Option();
-
-                o.addElement(nbrFmt.format((long) curHour));
-                o.setValue(curHour);
-                if (now.get(Calendar.AM_PM) == Calendar.AM)
-                {
-                    if (((now.get(Calendar.HOUR_OF_DAY)) == 0) &&
-                            (curHour == 12))
-                    {
-                        o.setSelected(true);
-                    }
-                    else
-                    {
-                        if (now.get(Calendar.HOUR_OF_DAY) == curHour)
-                        {
-                            o.setSelected(true);
-                        }
-                    }
-                }
-                else
-                {
-                    if (((now.get(Calendar.HOUR_OF_DAY)) == 12) &&
-                            (curHour == 12))
-                    {
-                        o.setSelected(true);
-                    }
-                    else
-                    {
-                        if (now.get(Calendar.HOUR_OF_DAY) == curHour + 12)
-                        {
-                            o.setSelected(true);
-                        }
-                    }
-                }
-                hourSelect.addElement(o);
-            }
-        }
-        return (hourSelect);
-    }
-
-    /**
-     * Return an am/pm selector.
-     *
-     * @param name The name to use for the selected am/pm.
-     * @return A select object with am/pm
-     */
-    public static Select getAMPMSelector(String name)
-    {
-        Calendar c = Calendar.getInstance();
-        c.setTime(new Date());
-        return (getAMPMSelector(name, c));
-    }
-
-    /**
-     * Return an am/pm selector.
-     *
-     * @param name The name to use for the selected am/pm.
-     * @param now Calendar to start with.
-     * @return A select object with am/pm.
-     */
-    public static Select getAMPMSelector(String name,
-                                         Calendar now)
-    {
-        Select ampmSelect = new Select().setName(name);
-
-        Option o = new Option();
-        o.addElement("am");
-        o.setValue(Calendar.AM);
-        if (now.get(Calendar.AM_PM) == Calendar.AM)
-        {
-            o.setSelected(true);
-        }
-        ampmSelect.addElement(o);
-
-        o = new Option();
-        o.addElement("pm");
-        o.setValue(Calendar.PM);
-        if (now.get(Calendar.AM_PM) == Calendar.PM)
-        {
-            o.setSelected(true);
-        }
-        ampmSelect.addElement(o);
-
-        return (ampmSelect);
-    }
-
-    /**
-     * Used to build the popupmenu in HTML.  The properties set in the
-     * object are used to generate the correct HTML.  The selName
-     * attribute is used to seed the names of the select lists.  The
-     * names will be generated as follows:
-     *
-     * <ul>
-     *  <li>selName + "_hour"</li>
-     *  <li>selName + "_minute"</li>
-     *  <li>selName + "_ampm"</li>
-     * </ul>
-     *
-     * If onChange was set it is also used in the generation of the
-     * output.  The output HTML will list the select lists in the
-     * following order: hour minute ampm.
-     *
-     * If setShowSeconds(true) is used then an addition second select box
-     * is produced after the minute select box.
-     *
-     * If setTimeFormat(TimeSelector.TWENTY_FOUR_HOUR) is used then
-     * the ampm select box is omitted.
-     *
-     * @return A String with the correct HTML for the date selector.
-     */
-    public String output()
-    {
-        return (ecsOutput().toString());
-    }
-
-    /**
-     * Used to build the popupmenu in HTML.  The properties set in the
-     * object are used to generate the correct HTML.  The selName
-     * attribute is used to seed the names of the select lists.  The
-     * names will be generated as follows:
-     *
-     * <ul>
-     *  <li>selName + "_hour"</li>
-     *  <li>selName + "_minute"</li>
-     *  <li>selName + "_ampm"</li>
-     * </ul>
-     *
-     * If onChange was set it is also used in the generation of the
-     * output.  The output HTML will list the select lists in the
-     * following order: hour minute ampm.
-     *
-     * If setShowSeconds(true) is used then an addition second select box
-     * is produced after the minute select box.
-     *
-     * If setTimeFormat(TimeSelector.TWENTY_FOUR_HOUR) is used then
-     * the ampm select box is omitted.
-     *
-     * @return A String with the correct HTML for the date selector.
-     */
-    public String toString()
-    {
-        return (ecsOutput().toString());
-    }
-
-    /**
-     * Return an ECS container with the select objects inside.
-     *
-     * @return An ECS container.
-     */
-    public ElementContainer ecsOutput()
-    {
-        if (this.useDate == null)
-        {
-            this.useDate = Calendar.getInstance();
-            this.useDate.setTime(new Date());
-        }
-
-        ConcreteElement secondSelect = null;
-
-        Select ampmSelect = getAMPMSelector(selName + AMPM_SUFFIX, useDate);
-
-        Select hourSelect = getHourSelector(selName + HOUR_SUFFIX,
-                useDate, this.timeFormat);
-
-        Select minuteSelect = getMinuteSelector(selName + MINUTE_SUFFIX,
-                useDate, this.minuteInterval);
-
-        if (this.showSeconds)
-        {
-            Select tmp = getSecondSelector(selName + SECOND_SUFFIX, useDate,
-                    this.secondInterval);
-            if (onChangeSet)
-                tmp.setOnChange(onChange);
-            secondSelect = tmp;
-        }
-        else
-        {
-            secondSelect = new Input(Input.hidden,
-                    selName + SECOND_SUFFIX,
-                    setSeconds);
-        }
-
-        if (onChangeSet)
-        {
-            hourSelect.setOnChange(onChange);
-            minuteSelect.setOnChange(onChange);
-            ampmSelect.setOnChange(onChange);
-        }
-
-        ElementContainer ec = new ElementContainer();
-        ec.addElement(new Comment(
-                "== BEGIN org.apache.turbine.util.TimeSelector.ecsOutput() =="));
-        ec.addElement(hourSelect);
-        ec.addElement(":");
-        ec.addElement(minuteSelect);
-        if (this.showSeconds == true)
-            ec.addElement(":");
-        ec.addElement(secondSelect);
-        if (this.timeFormat == TimeSelector.TWELVE_HOUR)
-        {
-            ec.addElement(ampmSelect);
-        }
-        ec.addElement(new Comment(
-                "== END org.apache.turbine.util.TimeSelector.ecsOutput() =="));
-        return (ec);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/TurbineConfig.java b/src/java/org/apache/turbine/util/TurbineConfig.java
deleted file mode 100644
index 5071316..0000000
--- a/src/java/org/apache/turbine/util/TurbineConfig.java
+++ /dev/null
@@ -1,567 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.Vector;
-import javax.servlet.RequestDispatcher;
-import javax.servlet.Servlet;
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.activity.Initializable;
-import org.apache.turbine.Turbine;
-
-/**
- * A class used for initialization of Turbine without a servlet container.
- * <p>
- * If you need to use Turbine outside of a servlet container, you can
- * use this class for initialization of the Turbine servlet.
- * <p>
- * <blockquote><code><pre>
- * TurbineConfig config = new TurbineConfig(".", "conf/TurbineResources.properties");
- * </pre></code></blockquote>
- * <p>
- * All paths referenced in TurbineResources.properties and the path to
- * the properties file itself (the second argument) will be resolved
- * relative to the directory given as the first argument of the constructor,
- * here - the directory where application was started. Don't worry about
- * discarding the references to objects created above. They are not needed,
- * once everything is initialized.
- * <p>
- * In order to initialize the Services Framework outside of the Turbine Servlet,
- * you need to call the <code>init()</code> method. By default, this will
- * initialize the Resource and Logging Services and any other services you
- * have defined in your TurbineResources.properties file.
- *
- * @todo Make this class enforce the lifecycle contracts
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class TurbineConfig
-        implements ServletConfig, ServletContext, Initializable, Disposable
-{
-    /**
-     * Servlet initialization parameter name for the path to
-     * TurbineConfiguration.xml file used by Turbine
-     */
-    public static final String CONFIGURATION_PATH_KEY = "configuration";    
-
-    /**
-     * Servlet initialization parameter name for the path to
-     * Turbine.properties file used by Turbine
-     */
-    public static final String PROPERTIES_PATH_KEY = "properties";
-
-    /**
-     * Default value of TurbineResources.properties file path
-     * (<code>/WEB-INF/conf/TurbineResources.properties</code>).
-     */
-    public static final String PROPERTIES_PATH_DEFAULT =
-            "/WEB-INF/conf/TurbineResources.properties";
-
-    /** Filenames are looked up in this directory. */
-    protected File root;
-
-    /** Servlet container (or emulator) attributes. */
-    protected Map attributes;
-
-    /** Turbine servlet initialization parameters. */
-    protected Map initParams;
-
-    /** The Turbine servlet instance used for initialization. */
-    private Turbine turbine;
-
-    /** Logging */
-    private Log log = LogFactory.getLog(this.getClass());
-
-    /**
-     * Constructs a new TurbineConfig.
-     *
-     * This is the general form of the constructor. You can provide
-     * a path to search for files, and a name-value map of init
-     * parameters.
-     *
-     * <p> For the list of recognized init parameters, see
-     * {@link org.apache.turbine.Turbine} class.
-     *
-     * @param path The web application root (i.e. the path for file lookup).
-     * @param attributes Servlet container (or emulator) attributes.
-     * @param initParams initialization parameters.
-     */
-    public TurbineConfig(String path, Map attributes, Map initParams)
-    {
-        root = new File(path);
-        this.attributes = attributes;
-        this.initParams = initParams;
-    }
-
-    /**
-     * @see #TurbineConfig(String path, Map attributes, Map initParams)
-     */
-    public TurbineConfig(String path, Map initParams)
-    {
-        this(path, new HashMap(0), initParams);
-    }
-
-    /**
-     * Constructs a TurbineConfig.
-     *
-     * This is a specialized constructor that allows to configure
-     * Turbine easiliy in the common setups.
-     *
-     * @param path The web application root (i.e. the path for file lookup).
-     * @param properties the relative path to TurbineResources.properties file
-     */
-    public TurbineConfig(String path, String properties)
-    {
-        this(path, new HashMap(1));
-        initParams.put(PROPERTIES_PATH_KEY, properties);
-    }
-
-    /**
-     * Causes this class to initialize itself which in turn initializes
-     * all of the Turbine Services that need to be initialized.
-     *
-     * @see org.apache.stratum.lifecycle.Initializable
-     */
-    public void initialize()
-    {
-        try
-        {
-            turbine = new Turbine();
-            turbine.init(this);
-        }
-        catch (Exception e)
-        {
-            log.error("TurbineConfig: Initialization failed", e);
-        }
-    }
-
-    /**
-     * Shutdown the Turbine System, lifecycle style
-     *
-     */
-    public void dispose()
-    {
-        if (turbine != null)
-        {
-            turbine.destroy();
-        }
-    }
-
-    /**
-     * Returns a reference to the Turbine servlet that was initialized.
-     *
-     * @return a ServletContext reference
-     */
-    public Turbine getTurbine()
-    {
-        return turbine;
-    }
-    
-    /**
-     * Returns a reference to the object cast onto ServletContext type.
-     *
-     * @return a ServletContext reference
-     */
-    public ServletContext getServletContext()
-    {
-        return this;
-    }
-
-    /**
-     * Translates a path relative to the web application root into an
-     * absolute path.
-     *
-     * @param path A path relative to the web application root.
-     * @return An absolute version of the supplied path, or <code>null</code>
-     * if the translated path doesn't map to a file or directory.
-     */
-    public String getRealPath(String path)
-    {
-        String result = null;
-        File f = new File(root, path);
-
-        if (log.isDebugEnabled())
-        {
-            StringBuffer sb = new StringBuffer();
-
-            sb.append("TurbineConfig.getRealPath: path '");
-            sb.append(path);
-            sb.append("' translated to '");
-            sb.append(f.getPath());
-            sb.append("' ");
-            sb.append(f.exists() ? "" : "not ");
-            sb.append("found");
-            log.debug(sb.toString());
-        }
-
-        if (f.exists())
-        {
-          result = f.getPath();
-        }
-        else
-        {
-            log.error("getRealPath(\"" + path + "\") is undefined, returning null");
-        }
-
-        return result;
-    }
-
-    /**
-     * Retrieves an initialization parameter.
-     *
-     * @param name the name of the parameter.
-     * @return the value of the parameter.
-     */
-    public String getInitParameter(String name)
-    {
-        return (String) initParams.get(name);
-    }
-
-    /**
-     * Retrieves an Enumeration of initialization parameter names.
-     *
-     * @return an Enumeration of initialization parameter names.
-     */
-    public Enumeration getInitParameterNames()
-    {
-        return new Vector(initParams.keySet()).elements();
-    }
-
-    /**
-     * Returns the servlet name.
-     *
-     * Fixed value "Turbine" is returned.
-     *
-     * @return the servlet name.
-     */
-    public String getServletName()
-    {
-        return "Turbine";
-    }
-
-    /**
-     * Returns the context name.
-     *
-     * Fixed value "Turbine" is returned
-     *
-     * @return the context name
-     */
-    public String getServletContextName()
-    {
-        return "Turbine";
-    }
-
-    /**
-     * Returns a URL to the resource that is mapped to a specified
-     * path. The path must begin with a "/" and is interpreted
-     * as relative to the current context root.
-     *
-     * @param s the path to the resource
-     * @return a URL pointing to the resource
-     * @exception MalformedURLException
-     */
-    public URL getResource(String s)
-            throws MalformedURLException
-    {
-        return new URL("file://" + getRealPath(s));
-    }
-
-    /**
-     * Returns the resource located at the named path as
-     * an <code>InputStream</code> object.
-     *
-     * @param s the path to the resource
-     * @return an InputStream object from which the resource can be read
-     */
-    public InputStream getResourceAsStream(String s)
-    {
-        try
-        {
-            FileInputStream fis = new FileInputStream(getRealPath(s));
-            return new BufferedInputStream(fis);
-        }
-        catch (FileNotFoundException e)
-        {
-            return null;
-        }
-    }
-
-    /**
-     * Logs an error message.
-     *
-     * @param e an Exception.
-     * @param m a message.
-     * @deprecated use log(String,Throwable) instead
-     */
-    public void log(Exception e, String m)
-    {
-        log.info(m, e);
-    }
-
-    /**
-     * Logs a message.
-     *
-     * @param m a message.
-     */
-    public void log(String m)
-    {
-        log.info(m);
-    }
-
-    /**
-     * Logs an error message.
-     *
-     * @param t a Throwable object.
-     * @param m a message.
-     */
-    public void log(String m, Throwable t)
-    {
-        log.info(m, t);
-    }
-
-    /**
-     * Returns the servlet container attribute with the given name, or
-     * null if there is no attribute by that name.
-     */
-    public Object getAttribute(String s)
-    {
-        return attributes.get(s);
-    }
-
-    /**
-     * Returns an Enumeration containing the attribute names available
-     * within this servlet context.
-     */
-    public Enumeration getAttributeNames()
-    {
-        return new Vector(attributes.keySet()).elements();
-    }
-
-    // Unimplemented methods follow
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public ServletContext getContext(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public int getMajorVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public String getMimeType(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public int getMinorVersion()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public RequestDispatcher getNamedDispatcher(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletConfig or ServletContext interface that is not
-     * implemented and will throw <code>UnsuportedOperationException</code>
-     * upon invocation
-     */
-    public RequestDispatcher getRequestDispatcher(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext (2.3) interface that is not implemented and
-     * will throw <code>UnsuportedOperationException</code> upon invocation
-     */
-    public Set getResourcePaths(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext (2.3) interface that is not implemented and
-     * will throw <code>UnsuportedOperationException</code> upon invocation
-     */
-    public String getServerInfo()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext interface that is not implemented and will
-     * throw <code>UnsuportedOperationException</code> upon invocation
-     * @deprecated As of Java Servlet API 2.1, with no direct replacement.
-     */
-    public Servlet getServlet(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext interface that is not implemented and will
-     * throw <code>UnsuportedOperationException</code> upon invocation
-     * @deprecated As of Java Servlet API 2.1, with no replacement.
-     */
-    public Enumeration getServletNames()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext interface that is not implemented and will
-     * throw <code>UnsuportedOperationException</code> upon invocation
-     * @deprecated As of Java Servlet API 2.0, with no replacement.
-     */
-    public Enumeration getServlets()
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext interface that is not implemented and will
-     * throw <code>UnsuportedOperationException</code> upon invocation
-     */
-    public void removeAttribute(String s)
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    /**
-     * Not implemented.
-     *
-     * A method in ServletContext interface that is not implemented and will
-     * throw <code>UnsuportedOperationException</code> upon invocation
-     */
-    public void setAttribute(String s, Object o)
-    {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/TurbineException.java b/src/java/org/apache/turbine/util/TurbineException.java
deleted file mode 100644
index 48bda40..0000000
--- a/src/java/org/apache/turbine/util/TurbineException.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.exception.NestableException;
-
-/**
- * The base class of all exceptions thrown by Turbine.
- *
- * It is intended to ease the debugging by carrying on the information
- * about the exception which was caught and provoked throwing the
- * current exception. Catching and rethrowing may occur multiple
- * times, and provided that all exceptions except the first one
- * are descendands of <code>TurbineException</code>, when the
- * exception is finally printed out using any of the <code>
- * printStackTrace()</code> methods, the stacktrace will contain
- * the information about all exceptions thrown and caught on
- * the way.
- * <p> Running the following program
- * <p><blockquote><pre>
- *  1 import org.apache.turbine.util.TurbineException;
- *  2
- *  3 public class Test {
- *  4     public static void main( String[] args ) {
- *  5         try {
- *  6             a();
- *  7         } catch(Exception e) {
- *  8             e.printStackTrace();
- *  9         }
- * 10      }
- * 11
- * 12      public static void a() throws TurbineException {
- * 13          try {
- * 14              b();
- * 15          } catch(Exception e) {
- * 16              throw new TurbineException("foo", e);
- * 17          }
- * 18      }
- * 19
- * 20      public static void b() throws TurbineException {
- * 21          try {
- * 22              c();
- * 23          } catch(Exception e) {
- * 24              throw new TurbineException("bar", e);
- * 25          }
- * 26      }
- * 27
- * 28      public static void c() throws TurbineException {
- * 29          throw new Exception("baz");
- * 30      }
- * 31 }
- * </pre></blockquote>
- * <p>Yields the following stacktrace:
- * <p><blockquote><pre>
- * java.lang.Exception: baz: bar: foo
- *    at Test.c(Test.java:29)
- *    at Test.b(Test.java:22)
- * rethrown as TurbineException: bar
- *    at Test.b(Test.java:24)
- *    at Test.a(Test.java:14)
- * rethrown as TurbineException: foo
- *    at Test.a(Test.java:16)
- *    at Test.main(Test.java:6)
- * </pre></blockquote><br>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- */
-public class TurbineException extends NestableException
-{
-    /**
-     * Constructs a new <code>TurbineException</code> without specified
-     * detail message.
-     */
-    public TurbineException()
-    {
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * detail message.
-     *
-     * @param msg The error message.
-     */
-    public TurbineException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * nested <code>Throwable</code>.
-     *
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public TurbineException(Throwable nested)
-    {
-        super(nested);
-    }
-
-    /**
-     * Constructs a new <code>TurbineException</code> with specified
-     * detail message and nested <code>Throwable</code>.
-     *
-     * @param msg    The error message.
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public TurbineException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/TurbineRuntimeException.java b/src/java/org/apache/turbine/util/TurbineRuntimeException.java
deleted file mode 100644
index 10587e4..0000000
--- a/src/java/org/apache/turbine/util/TurbineRuntimeException.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.exception.NestableRuntimeException;
-
-/**
- * This is a base class of runtime exeptions thrown by Turbine.
- *
- * This class represents a non-checked type exception (see
- * {@link java.lang.RuntimeException}). It has the nested stack trace
- * functionality found in the {@link TurbineException} class.
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- */
-public class TurbineRuntimeException extends NestableRuntimeException
-{
-    /**
-     * Constructs a new <code>TurbineRuntimeException</code> without specified
-     * detail message.
-     */
-    public TurbineRuntimeException()
-    {
-    }
-
-    /**
-     * Constructs a new <code>TurbineRuntimeException</code> with specified
-     * detail message.
-     *
-     * @param msg the error message.
-     */
-    public TurbineRuntimeException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Constructs a new <code>TurbineRuntimeException</code> with specified
-     * nested <code>Throwable</code>.
-     *
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public TurbineRuntimeException(Throwable nested)
-    {
-        super(nested);
-    }
-
-    /**
-     * Constructs a new <code>TurbineRuntimeException</code> with specified
-     * detail message and nested <code>Throwable</code>.
-     *
-     * @param msg the error message.
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public TurbineRuntimeException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/TurbineXmlConfig.java b/src/java/org/apache/turbine/util/TurbineXmlConfig.java
deleted file mode 100644
index ff53612..0000000
--- a/src/java/org/apache/turbine/util/TurbineXmlConfig.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A class used for initialization of Turbine without a servlet container.
- * <p>
- * If you need to use Turbine outside of a servlet container, you can
- * use this class for initialization of the Turbine servlet.
- * <p>
- * <blockquote><code><pre>
- * TurbineXmlConfig config = new TurbineXmlConfig(".", "conf/TurbineResources.properties");
- * </pre></code></blockquote>
- * <p>
- * All paths referenced in TurbineResources.properties and the path to
- * the properties file itself (the second argument) will be resolved
- * relative to the directory given as the first argument of the constructor,
- * here - the directory where application was started. Don't worry about
- * discarding the references to objects created above. They are not needed,
- * once everything is initialized.
- * <p>
- * In order to initialize the Services Framework outside of the Turbine Servlet,
- * you need to call the <code>init()</code> method. By default, this will
- * initialize the Resource and Logging Services and any other services you
- * have defined in your TurbineResources.properties file.
- *
- * @todo Make this class enforce the lifecycle contracts
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class TurbineXmlConfig
-        extends TurbineConfig
-{
-    /**
-     * Constructs a new TurbineXmlConfig.
-     *
-     * This is the general form of the constructor. You can provide
-     * a path to search for files, and a name-value map of init
-     * parameters.
-     *
-     * <p> For the list of recognized init parameters, see
-     * {@link org.apache.turbine.Turbine} class.
-     *
-     * @param path The web application root (i.e. the path for file lookup).
-     * @param attributes Servlet container (or emulator) attributes.
-     * @param initParams initialization parameters.
-     */
-    public TurbineXmlConfig(String path, Map attributes, Map initParams)
-    {
-        super(path, attributes, initParams);
-    }
-
-    /**
-     * @see #TurbineXmlConfig(String path, Map attributes, Map initParams)
-     */
-    public TurbineXmlConfig(String path, Map initParams)
-    {
-        this(path, new HashMap(0), initParams);
-    }
-
-    /**
-     * Constructs a TurbineXmlConfig.
-     *
-     * This is a specialized constructor that allows to configure
-     * Turbine easiliy in the common setups.
-     *
-     * @param path The web application root (i.e. the path for file lookup).
-     * @param configuration the relative path to TurbineResources.xml file
-     */
-    public TurbineXmlConfig(String path, String config)
-    {
-        this(path, new HashMap(1));
-        initParams.put(CONFIGURATION_PATH_KEY, config);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/ValueParser.java b/src/java/org/apache/turbine/util/ValueParser.java
deleted file mode 100644
index 4383198..0000000
--- a/src/java/org/apache/turbine/util/ValueParser.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * ValueParser is a base interface for classes that need to parse
- * name/value Parameters, for example GET/POST data or Cookies
- * (ParameterParser and CookieParser)
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- * @deprecated Use org.apache.turbine.util.parser.ValueParser instead.
- */
-public interface ValueParser
-        extends org.apache.turbine.util.parser.ValueParser
-{
-}
diff --git a/src/java/org/apache/turbine/util/db/TableColumn.java b/src/java/org/apache/turbine/util/db/TableColumn.java
deleted file mode 100644
index 211d065..0000000
--- a/src/java/org/apache/turbine/util/db/TableColumn.java
+++ /dev/null
@@ -1,126 +0,0 @@
-package org.apache.turbine.util.db;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Models a specific column in a specific table.
- *
- * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @deprecated Use <a href="http://db.apache.org/torque/">Torque</a>.
- */
-public class TableColumn
-{
-    /**
-     * The name of the database table.
-     */
-    protected String tableName;
-
-    /**
-     * The name of the database column.
-     */
-    protected String columnName;
-
-    /**
-     * The concatenation of the table name and column name separated with a
-     * dot.
-     */
-    private String tableColumn;
-
-    public TableColumn(String tableName, String columnName)
-    {
-        this.tableName = tableName;
-        this.columnName = columnName;
-        this.tableColumn = (tableName + '.' + columnName);
-    }
-
-    /**
-     * Compares this object with another <code>TableColumn</code>.
-     *
-     * @param obj The object to compare to.
-     */
-    public boolean equals(Object obj)
-    {
-        if (this == obj)
-        {
-            return true;
-        }
-        else if (obj == null)
-        {
-            return false;
-        }
-        else if (obj instanceof TableColumn)
-        {
-            TableColumn tc = (TableColumn) obj;
-            return (tableName.equals(tc.tableName) &&
-                    columnName.equals(tc.columnName));
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * The concatenation of the table name and column name separated with a
-     * dot.
-     *
-     * @return This object's string representation.
-     */
-    public String toString()
-    {
-        return tableColumn;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/db/UUIdGenerator.java b/src/java/org/apache/turbine/util/db/UUIdGenerator.java
deleted file mode 100644
index 2513d5d..0000000
--- a/src/java/org/apache/turbine/util/db/UUIdGenerator.java
+++ /dev/null
@@ -1,270 +0,0 @@
-package org.apache.turbine.util.db;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import java.util.StringTokenizer;
-
-import javax.mail.internet.MimeUtility;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * <p>This class generates universally unique id's in the form of a String.
- * The id has three parts.  The first is supposed to be location dependent.
- * The preferred location parameter is an ethernet (MAC) address, but an IP
- * can be used as well.  if none is supplied a Math.random generated number
- * will be used.  This part of the key will be 48 bits in length.
- * The second part of the key is time related and will be the lower 48 bits
- * of the long used to signify the time since Jan. 1, 1970.  This will
- * cause key rollover in the year 6429.
- * The preceding 12 bytes are Base64 encoded with the characters / and *
- * replaced by _ (underscore) and - (dash).  Resulting in 16 characters.
- * Finally a counter is used to hand out 4095 keys in between each
- * timestamp.
- * The resulting id is a String of 18 characters including:
- * a-z,A-Z,0-9, and the previously mentioned - and _.</p>
- *
- * <p>Note this class does not save any state information, so it is important
- * that time only moves forward to keep the integrity of the ids.  We
- * might want to consider saving some state info.</p>
- *
- * <p>To specify the MAC/Ethernet address, add a uuid.address= property to the
- * TurbineResources.properties file.</p>
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated Use the Unique ID Service
- */
-public class UUIdGenerator
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(UUIdGenerator.class);
-
-    private static final String errorString = "uuid.address property in "
-            + "TurbineResources.properties should be a valid IP\n "
-            + "e.g. 18.2.3.100, or an ethernet address e.g. "
-            + "AE:10:3E:de:f5:77 uuid.address was ";
-
-    private byte[] address = new byte[6];
-    private String baseId = null;
-    private int counter = 0;
-
-    /**
-     * Constructor
-     */
-    public UUIdGenerator() throws TurbineException
-    {
-        String addr =
-            Turbine.getConfiguration().getString(TurbineConstants.UUID_ADDRESS_KEY);
-
-        if (StringUtils.isEmpty(addr))
-        {
-            log.info("UUIdGenerator is using a random number as the "
-                    + "base for id's.  This is not the best method for many "
-                    + "purposes, but may be adequate in some circumstances."
-                    + " Consider using an IP or ethernet (MAC) address if "
-                    + "available. Edit TurbineResources.properties file and "
-                    + "add a uuid.address= property.");
-
-            for (int i = 0; i < 6; i++)
-            {
-                address[i] = (byte) (255 * Math.random());
-            }
-        }
-        else
-        {
-            if (addr.indexOf(".") > 0)
-            {
-                // we should have an IP
-                StringTokenizer stok = new StringTokenizer(addr, ".");
-                if (stok.countTokens() != 4)
-                {
-                    throw new TurbineException(errorString + addr);
-                }
-                // this is meant to insure that id's made from ip addresses
-                // will not conflict with MAC id's. I think MAC addresses
-                // will never have the highest bit set.  Though this should
-                // be investigated further.
-                address[0] = (byte) 255;
-                address[1] = (byte) 255;
-                int i = 2;
-                try
-                {
-                    while (stok.hasMoreTokens())
-                    {
-                        address[i++] =
-                                Integer.valueOf(stok.nextToken(),
-                                        16).byteValue();
-                    }
-                }
-                catch (Exception e)
-                {
-                    throw new TurbineException(errorString + addr, e);
-                }
-            }
-            else if (addr.indexOf(":") > 0)
-            {
-                // we should have a MAC
-                StringTokenizer stok = new StringTokenizer(addr, ":");
-                if (stok.countTokens() != 6)
-                {
-                    throw new TurbineException(errorString + addr);
-                }
-                int i = 0;
-                try
-                {
-                    while (stok.hasMoreTokens())
-                    {
-                        address[i++] = Byte.parseByte(stok.nextToken(), 16);
-                    }
-                }
-                catch (Exception e)
-                {
-                    throw new TurbineException(errorString + addr, e);
-                }
-            }
-            else
-            {
-                throw new TurbineException(errorString + addr);
-            }
-        }
-    }
-
-    /**
-     * Generates the new base id
-     */
-    private final void generateNewBaseId() throws Exception
-    {
-        long now = System.currentTimeMillis();
-        byte[] nowBytes = org.apache.java.lang.Bytes.toBytes(now);
-        ByteArrayOutputStream bas = null;
-        OutputStream encodedStream = null;
-        try
-        {
-            bas = new ByteArrayOutputStream(16);
-            encodedStream = MimeUtility.encode(bas, "base64");
-            encodedStream.write(nowBytes);
-            baseId = bas.toString("ISO-8859-1"); // or maybe "US-ASCII"?
-            baseId = baseId.replace('/', '_');
-            baseId = baseId.replace('*', '-');
-        }
-        finally
-        {
-            if (bas != null)
-            {
-                bas.close();
-            }
-            if (encodedStream != null)
-            {
-                encodedStream.close();
-            }
-        }
-    }
-
-    /**
-     * Gets the id
-     * @return the 18 character id
-     */
-    public String getId() throws Exception
-    {
-        int index = ++counter;
-        if (index > 4095)
-        {
-            synchronized (this)
-            {
-                if (counter > 4095)
-                {
-                    generateNewBaseId();
-                    counter = 0;
-                }
-                else
-                {
-                    index = ++counter;
-                }
-            }
-        }
-        StringBuffer idbuf = new StringBuffer(18);
-        idbuf.append(baseId);
-        idbuf.append(countChar[index / 64]);
-        idbuf.append(countChar[index % 64]);
-        return idbuf.toString();
-    }
-
-    /**
-     * characters used in the ID
-     */
-    private static final char[] countChar =
-            {
-                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
-                'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-                'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
-                'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
-                'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7',
-                '8', '9', '-', '_'
-            };
-}
-
diff --git a/src/java/org/apache/turbine/util/db/map/TurbineMapBuilder.java b/src/java/org/apache/turbine/util/db/map/TurbineMapBuilder.java
deleted file mode 100644
index 77cbc32..0000000
--- a/src/java/org/apache/turbine/util/db/map/TurbineMapBuilder.java
+++ /dev/null
@@ -1,761 +0,0 @@
-package org.apache.turbine.util.db.map;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Date;
-import java.util.Hashtable;
-
-import org.apache.torque.Torque;
-import org.apache.torque.map.DatabaseMap;
-import org.apache.torque.map.MapBuilder;
-import org.apache.torque.map.TableMap;
-
-/**
- * Default Builder for Database/Table/Column Maps within the Turbine
- * System.  If you decide to use your own table schema, then you
- * probably will want to implement this class on your own.  It is then
- * defined within the TurbineResources.properties file.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- */
-public class TurbineMapBuilder implements MapBuilder
-{
-    /**
-     * Get the User table.
-     *
-     * @return A String.
-     */
-    public String getTableUser()
-    {
-        return "TURBINE_USER";
-    }
-
-    /**
-     * Get the UserRole table.
-     *
-     * @return A String.
-     */
-    public String getTableRole()
-    {
-        return "TURBINE_ROLE";
-    }
-
-    /**
-     * Get the Permission table.
-     *
-     * @return A String.
-     */
-    public String getTablePermission()
-    {
-        return "TURBINE_PERMISSION";
-    }
-
-    /**
-     * Get the UserGroupRole table.
-     *
-     * @return A String.
-     */
-    public String getTableUserGroupRole()
-    {
-        return "TURBINE_USER_GROUP_ROLE";
-    }
-
-    /**
-     * Get the RolePermission table.
-     *
-     * @return A String.
-     */
-    public String getTableRolePermission()
-    {
-        return "TURBINE_ROLE_PERMISSION";
-    }
-
-    /**
-     * Get the Group table.
-     *
-     * @return A String.
-     */
-    public String getTableGroup()
-    {
-        return "TURBINE_GROUP";
-    }
-
-    /**
-     * Internal Unique key to the visitor table.  Override this if
-     * using your custom table.
-     *
-     * @return A String.
-     */
-    public String getUserId()
-    {
-        return "USER_ID";
-    }
-
-    /**
-     * Fully qualified Unique key to the visitor table.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_UserId()
-    {
-        return getTableUser() + '.' + getUserId();
-    }
-
-    /**
-     * Column used to record the last login time for visitor.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getLastLogin()
-    {
-        return "LAST_LOGIN";
-    }
-
-    /**
-     * Fully qualified column used to record the last login time for
-     * visitor.  Shouldn't need to override this as it uses the above
-     * methods.
-     *
-     * @return A String.
-     */
-    public String getUser_LastLogin()
-    {
-        return getTableUser() + '.' + getLastLogin();
-    }
-
-    /**
-     * Column used to record the users username.  Override this if
-     * using your custom table.
-     *
-     * @return A String.
-     */
-    public String getUsername()
-    {
-        return "LOGIN_NAME";
-    }
-
-    /**
-     * Fully qualified column used to record the visitors username.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_Username()
-    {
-        return getTableUser() + '.' + getUsername();
-    }
-
-    /**
-     * Column used to record the users password.  Override this if
-     * using your custom table.
-     *
-     * @return A String.
-     */
-    public String getPassword()
-    {
-        return "PASSWORD_VALUE";
-    }
-
-    /**
-     * Fully qualified column used to record the visitors password.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_Password()
-    {
-        return getTableUser() + '.' + getPassword();
-    }
-
-    /**
-     * Column used to record general visitor data from a hashmap.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getObjectData()
-    {
-        return "OBJECTDATA";
-    }
-
-    /**
-     * Fully qualified column used to record general visitor data from
-     * a hashmap.  Shouldn't need to override this as it uses the
-     * above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_ObjectData()
-    {
-        return getTableUser() + '.' + getObjectData();
-    }
-
-    /**
-     * Column used to store the user's first name.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getFirstName()
-    {
-        return "FIRST_NAME";
-    }
-
-    /**
-     * Fully qualified column used to store the user's last name.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_FirstName()
-    {
-        return getTableUser() + '.' + getFirstName();
-    }
-
-    /**
-     * Column used to store the user's last name.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getLastName()
-    {
-        return "LAST_NAME";
-    }
-
-    /**
-     * Fully qualified column used to store the user's last name.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_LastName()
-    {
-        return getTableUser() + '.' + getLastName();
-    }
-
-    /**
-     * Column used to store the user's data modification time.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getModified()
-    {
-        return "MODIFIED";
-    }
-
-    /**
-     * Fully qualified column used to store the user's data modification time.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_Modified()
-    {
-        return getTableUser() + '.' + getModified();
-    }
-
-    /**
-     * Column used to store the user's record cration time.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getCreated()
-    {
-        return "CREATED";
-    }
-
-    /**
-     * Fully qualified column used to store the user's record cration time.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_Created()
-    {
-        return getTableUser() + '.' + getCreated();
-    }
-
-    /**
-     * Column used to store the user's email.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getEmail()
-    {
-        return "EMAIL";
-    }
-
-    /**
-     * Fully qualified column used to store the user's email.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_Email()
-    {
-        return getTableUser() + '.' + getEmail();
-    }
-
-    /**
-     * Column used to store the user's confirmation flag.
-     * Override this if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getConfirmValue()
-    {
-        return "CONFIRM_VALUE";
-    }
-
-    /**
-     * Fully qualified column used to store the user's confirmation flag.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUser_ConfirmValue()
-    {
-        return getTableUser() + '.' + getConfirmValue();
-    }
-
-    /**
-     * Column used for the unique id to a Role.  Override this if
-     * using your custom table
-     *
-     * @return A String.
-     */
-    public String getRoleId()
-    {
-        return "ROLE_ID";
-    }
-
-    /**
-     * Fully qualified column name for Role unique key.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getRole_RoleId()
-    {
-        return getTableRole() + '.' + getRoleId();
-    }
-
-    /**
-     * Column used for the name of Role.  Override this if using
-     * your custom table.
-     *
-     * @return A String.
-     */
-    public String getRoleName()
-    {
-        return "ROLE_NAME";
-    }
-
-    /**
-     * Fully qualified column name for Role name.  Shouldn't need
-     * to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getRole_Name()
-    {
-        return getTableRole() + '.' + getRoleName();
-    }
-
-    /**
-     * Fully qualified column name for ObjectData column.  Shouldn't need
-     * to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getRole_ObjectData()
-    {
-        return getTableRole() + '.' + getObjectData();
-    }
-
-    /**
-     * Column used for the id of the Permission table.  Override this
-     * if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getPermissionId()
-    {
-        return "PERMISSION_ID";
-    }
-
-    /**
-     * Fully qualified column name for Permission table unique key.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getPermission_PermissionId()
-    {
-        return getTablePermission() + '.' + getPermissionId();
-    }
-
-    /**
-     * Column used for the name of a Permission.  Override this if
-     * using your custom table.
-     *
-     * @return A String.
-     */
-    public String getPermissionName()
-    {
-        return "PERMISSION_NAME";
-    }
-
-    /**
-     * Fully qualified column name for Permission table name of the
-     * permission.  Shouldn't need to override this as it uses the
-     * above methods.
-     *
-     * @return A String.
-     */
-    public String getPermission_Name()
-    {
-        return getTablePermission() + '.' + getPermissionName();
-    }
-
-    /**
-     * Fully qualified column name for ObjectData column.  Shouldn't need
-     * to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getPermission_ObjectData()
-    {
-        return getTablePermission() + '.' + getObjectData();
-    }
-
-    /**
-     * Fully qualified column name for UserGroupRole visitor id.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUserGroupRole_UserId()
-    {
-        return getTableUserGroupRole() + '.' + getUserId();
-    }
-
-    /**
-     * Fully qualified column name for UserGroupRole group id.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUserGroupRole_GroupId()
-    {
-        return getTableUserGroupRole() + '.' + getGroupId();
-    }
-
-    /**
-     * Fully qualified column name for UserGroupRole role id.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getUserGroupRole_RoleId()
-    {
-        return getTableUserGroupRole() + '.' + getRoleId();
-    }
-
-    /**
-     * Fully qualified column name for RolePermission permission id.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getRolePermission_PermissionId()
-    {
-        return getTableRolePermission() + '.' + getPermissionId();
-    }
-
-    /**
-     * Fully qualified column name for RolePermission role id.
-     * Shouldn't need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getRolePermission_RoleId()
-    {
-        return getTableRolePermission() + '.' + getRoleId();
-    }
-
-    /**
-     * Column used for the id of the Group table.  Override this
-     * if using your custom table.
-     *
-     * @return A String.
-     */
-    public String getGroupId()
-    {
-        return "GROUP_ID";
-    }
-
-    /**
-     * Fully qualified column name for Group id.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getGroup_GroupId()
-    {
-        return getTableGroup() + '.' + getGroupId();
-    }
-
-    /**
-     * Column used for the name of a Group.  Override this if using
-     * your custom table.
-     *
-     * @return A String.
-     */
-    public String getGroupName()
-    {
-        return "GROUP_NAME";
-    }
-
-    /**
-     * Fully qualified column name for Group name.  Shouldn't
-     * need to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getGroup_Name()
-    {
-        return getTableGroup() + '.' + getGroupName();
-    }
-
-    /**
-     * Fully qualified column name for ObjectData column.  Shouldn't need
-     * to override this as it uses the above methods.
-     *
-     * @return A String.
-     */
-    public String getGroup_ObjectData()
-    {
-        return getTableGroup() + '.' + getObjectData();
-    }
-
-    /**
-     * GROUP_SEQUENCE.
-     *
-     * @return A String.
-     */
-    public String getSequenceGroup()
-    {
-        return "GROUP_SEQUENCE";
-    }
-
-    /**
-     * PERMISSION_SEQUENCE.
-     *
-     * @return A String.
-     */
-    public String getSequencePermission()
-    {
-        return "PERMISSION_SEQUENCE";
-    }
-
-    /**
-     * ROLE_SEQUENCE.
-     *
-     * @return A String.
-     */
-    public String getSequenceRole()
-    {
-        return "ROLE_SEQUENCE";
-    }
-
-    /**
-     * USER_SEQUENCE.
-     *
-     * @return A String.
-     */
-    public String getSequenceUser()
-    {
-        return "USER_SEQUENCE";
-    }
-
-    /** The database map. */
-    protected DatabaseMap dbMap = null;
-
-    /**
-     * Tells us if this DatabaseMapBuilder is built so that we don't
-     * have to re-build it every time.
-     *
-     * @return True if DatabaseMapBuilder is built.
-     */
-    public boolean isBuilt()
-    {
-        return (dbMap != null);
-    }
-
-    /**
-     * Gets the databasemap this map builder built.
-     *
-     * @return A DatabaseMap.
-     */
-    public DatabaseMap getDatabaseMap()
-    {
-        return this.dbMap;
-    }
-
-    /**
-     * Build up the databasemapping.  It should probably be modified
-     * to read a .xml file representation of the database to build
-     * this.
-     *
-     * @exception Exception a generic exception.
-     */
-    public void doBuild()
-            throws Exception
-    {
-        // Reusable TableMap
-        TableMap tMap;
-
-        // Make some objects.
-        String string = new String("");
-        Integer integer = new Integer(0);
-        java.util.Date date = new Date();
-
-        // Get default map.
-        dbMap = Torque.getDatabaseMap();
-
-        // Add tables.
-        dbMap.addTable(getTableUser());
-        dbMap.addTable(getTableGroup());
-        dbMap.addTable(getTableRole());
-        dbMap.addTable(getTablePermission());
-        dbMap.addTable(getTableUserGroupRole());
-        dbMap.addTable(getTableRolePermission());
-
-        // Add User columns.
-        tMap = dbMap.getTable(getTableUser());
-        tMap.setPrimaryKeyMethod(TableMap.ID_BROKER);
-        tMap.setPrimaryKeyMethodInfo(tMap.getName());
-        tMap.addPrimaryKey(getUserId(), integer);
-        tMap.addColumn(getUsername(), string);
-        tMap.addColumn(getPassword(), string);
-        tMap.addColumn(getFirstName(), string);
-        tMap.addColumn(getLastName(), string);
-        tMap.addColumn(getEmail(), string);
-        tMap.addColumn(getConfirmValue(), string);
-        tMap.addColumn(getCreated(), date);
-        tMap.addColumn(getModified(), date);
-        tMap.addColumn(getLastLogin(), date);
-        tMap.addColumn(getObjectData(), new Hashtable(1));
-
-        // Add Group columns.
-        tMap = dbMap.getTable(getTableGroup());
-        tMap.setPrimaryKeyMethod(TableMap.ID_BROKER);
-        tMap.setPrimaryKeyMethodInfo(tMap.getName());
-        tMap.addPrimaryKey(getGroupId(), integer);
-        tMap.addColumn(getGroupName(), string);
-        tMap.addColumn(getObjectData(), new Hashtable(1));
-
-        // Add Role columns.
-        tMap = dbMap.getTable(getTableRole());
-        tMap.setPrimaryKeyMethod(TableMap.ID_BROKER);
-        tMap.setPrimaryKeyMethodInfo(tMap.getName());
-        tMap.addPrimaryKey(getRoleId(), integer);
-        tMap.addColumn(getRoleName(), string);
-        tMap.addColumn(getObjectData(), new Hashtable(1));
-
-        // Add Permission columns.
-        tMap = dbMap.getTable(getTablePermission());
-        tMap.setPrimaryKeyMethod(TableMap.ID_BROKER);
-        tMap.setPrimaryKeyMethodInfo(tMap.getName());
-        tMap.addPrimaryKey(getPermissionId(), integer);
-        tMap.addColumn(getPermissionName(), string);
-        tMap.addColumn(getObjectData(), new Hashtable(1));
-
-        // Add RolePermission columns.
-        tMap = dbMap.getTable(getTableRolePermission());
-        tMap.addForeignPrimaryKey(getPermissionId(),
-                integer,
-                getTablePermission(),
-                getPermissionId());
-        tMap.addForeignPrimaryKey(getRoleId(),
-                integer,
-                getTableRole(),
-                getRoleId());
-
-        // Add UserGroupRole columns.
-        tMap = dbMap.getTable(getTableUserGroupRole());
-        tMap.addForeignPrimaryKey(getUserId(),
-                integer,
-                getTableUser(),
-                getUserId());
-        tMap.addForeignPrimaryKey(getGroupId(),
-                integer,
-                getTableGroup(),
-                getGroupId());
-        tMap.addForeignPrimaryKey(getRoleId(),
-                integer,
-                getTableRole(),
-                getRoleId());
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/ByteArrayDataSource.java b/src/java/org/apache/turbine/util/mail/ByteArrayDataSource.java
deleted file mode 100644
index d10fddb..0000000
--- a/src/java/org/apache/turbine/util/mail/ByteArrayDataSource.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import javax.activation.DataSource;
-
-/**
- * This class implements a typed DataSource from:<br>
- *
- * - an InputStream<br>
- * - a byte array<br>
- * - a String<br>
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.ByteArrayDataSource instead.
- */
-public class ByteArrayDataSource
-        implements DataSource
-{
-    /** Data. */
-    private byte[] data;
-
-    /** Content-type. */
-    private String type;
-
-    private ByteArrayOutputStream baos;
-
-    /**
-     * Create a datasource from a byte array.
-     *
-     * @param data A byte[].
-     * @param type A String.
-     */
-    public ByteArrayDataSource(byte[] data,
-                               String type)
-    {
-        this.data = data;
-        this.type = type;
-    }
-
-    /**
-     * Create a datasource from an input stream.
-     *
-     * @param is An InputStream.
-     * @param type A String.
-     */
-    public ByteArrayDataSource(InputStream is,
-                               String type)
-    {
-        this.type = type;
-        try
-        {
-            int ch;
-
-            ByteArrayOutputStream os = new ByteArrayOutputStream();
-            BufferedInputStream isReader = new BufferedInputStream(is);
-            BufferedOutputStream osWriter = new BufferedOutputStream(os);
-
-            while ((ch = isReader.read()) != -1)
-            {
-                osWriter.write(ch);
-            }
-            data = os.toByteArray();
-        }
-        catch (IOException ioex)
-        {
-            // Do something!
-        }
-    }
-
-    /**
-     * Create a datasource from a String.
-     *
-     * @param data A String.
-     * @param type A String.
-     */
-    public ByteArrayDataSource(String data,
-                               String type)
-    {
-        this.type = type;
-        try
-        {
-            // Assumption that the string contains only ASCII
-            // characters!  Else just pass in a charset into this
-            // constructor and use it in getBytes().
-            this.data = data.getBytes("iso-8859-1");
-        }
-        catch (UnsupportedEncodingException uex)
-        {
-            // Do something!
-        }
-    }
-
-    /**
-     * Get the content type.
-     *
-     * @return A String.
-     */
-    public String getContentType()
-    {
-        if (type == null)
-            return "application/octet-stream";
-        else
-            return type;
-    }
-
-    /**
-     * Get the input stream.
-     *
-     * @return An InputStream.
-     * @exception IOException.
-     */
-    public InputStream getInputStream()
-            throws IOException
-    {
-        if (data == null)
-            throw new IOException("no data");
-        return new ByteArrayInputStream(data);
-    }
-
-    /**
-     * Get the name.
-     *
-     * @return A String.
-     */
-    public String getName()
-    {
-        return "ByteArrayDataSource";
-    }
-
-    /**
-     * Get the output stream.
-     *
-     * @return An OutputStream.
-     * @exception IOException.
-     */
-    public OutputStream getOutputStream()
-            throws IOException
-    {
-        baos = new ByteArrayOutputStream();
-        return baos;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/Email.java b/src/java/org/apache/turbine/util/mail/Email.java
deleted file mode 100644
index a184291..0000000
--- a/src/java/org/apache/turbine/util/mail/Email.java
+++ /dev/null
@@ -1,466 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Date;
-import java.util.Properties;
-import java.util.Vector;
-
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Transport;
-
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-/**
- * The base class for all email messages.  This class sets the
- * sender's email & name, receiver's email & name, subject, and the
- * sent date.  Subclasses are responsible for setting the message
- * body.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:unknown">Regis Koenig</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.Email instead.
- */
-public abstract class Email
-{
-    /** Constants used to Email classes. */
-    public static final String SENDER_EMAIL = "sender.email";
-    public static final String SENDER_NAME = "sender.name";
-    public static final String RECEIVER_EMAIL = "receiver.email";
-    public static final String RECEIVER_NAME = "receiver.name";
-    public static final String EMAIL_SUBJECT = "email.subject";
-    public static final String EMAIL_BODY = "email.body";
-    public static final String CONTENT_TYPE = "content.type";
-
-    /** @deprecated Use TurbineConstants.MAIL_SERVER_KEY */
-    public static final String MAIL_SERVER = TurbineConstants.MAIL_SERVER_KEY;
-
-    /** @deprecated Use TurbineConstants.MAIL_SMTP_FROM */
-    public static final String MAIL_SMTP_FROM = TurbineConstants.MAIL_SMTP_FROM;
-
-    /** Mail Host, for javax.mail */
-    public static final String MAIL_HOST = "mail.host";
-
-    public static final String MAIL_TRANSPORT_PROTOCOL = "mail.transport.protocol";
-    public static final String SMTP = "SMTP";
-    public static final String TEXT_HTML = "text/html";
-    public static final String TEXT_PLAIN = "text/plain";
-    public static final String ATTACHMENTS = "attachments";
-    public static final String FILE_SERVER = "file.server";
-
-    public static final String KOI8_R = "koi8-r";
-    public static final String ISO_8859_1 = "iso-8859-1";
-    public static final String US_ASCII = "us-ascii";
-
-    /** The email message to send. */
-    protected MimeMessage message;
-
-    /** The charset to use for this message */
-    protected String charset = null;
-
-    /** Lists of related email adresses */
-    private Vector toList;
-    private Vector ccList;
-    private Vector bccList;
-    private Vector replyList;
-
-    /**
-     * Set the charset of the message.
-     *
-     * @param charset A String.
-     */
-    public void setCharset(String charset)
-    {
-        this.charset = charset;
-    }
-
-    /**
-     * TODO: Document.
-     *
-     * @return A Session.
-     */
-    private Session getMailSession()
-    {
-        Configuration conf = Turbine.getConfiguration();
-        Properties properties = System.getProperties();
-
-        properties.put(MAIL_TRANSPORT_PROTOCOL, SMTP);
-        properties.put(MAIL_HOST, conf.getString(TurbineConstants.MAIL_SERVER_KEY,
-                                                 TurbineConstants.MAIL_SERVER_DEFAULT));
-
-
-        String mailSMTPFrom = conf.getString(TurbineConstants.MAIL_SMTP_FROM);
-
-        if (StringUtils.isNotEmpty(mailSMTPFrom))
-        {
-            properties.put(TurbineConstants.MAIL_SMTP_FROM, mailSMTPFrom);
-        }
-        return Session.getDefaultInstance(properties, null);
-    }
-
-    /**
-     * Initializes the mail.
-     *
-     * Deprecated.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     * @see #init() init.
-     */
-    protected void initialize(Criteria criteria) throws MessagingException
-    {
-        init();
-        initCriteria(criteria);
-    }
-
-    /**
-     * Initializes the mail.
-     *
-     * <p>This is the first method that should be called by a subclass
-     * in its constructor.
-     *
-     * @exception MessagingException.
-     */
-    protected void init() throws MessagingException
-    {
-
-        // Create the message.
-        message = new MimeMessage(getMailSession());
-
-        toList = new Vector();
-        ccList = new Vector();
-        bccList = new Vector();
-        replyList = new Vector();
-
-        // Set the sent date.
-        setSentDate(new Date());
-    }
-
-    /**
-     * Initialize the mail according to the Criteria.
-     *
-     * <p>This method uses the criteria parameter to set the from, to
-     * and subject fields of the email.
-     *
-     * Deprecated; one should use the setFrom, addTo, etc. methods.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     */
-    protected void initCriteria(Criteria criteria) throws MessagingException
-    {
-        // Set the FROM field.
-        if (criteria.containsKey(SENDER_EMAIL)
-                && criteria.containsKey(SENDER_NAME))
-        {
-            setFrom(criteria.getString(SENDER_EMAIL),
-                    criteria.getString(SENDER_NAME));
-        }
-
-        // Set the TO field.
-        if (criteria.containsKey(RECEIVER_EMAIL)
-                && criteria.containsKey(RECEIVER_NAME))
-        {
-            addTo(criteria.getString(RECEIVER_EMAIL),
-                    criteria.getString(RECEIVER_NAME));
-        }
-
-        // Set the SUBJECT field.
-        if (criteria.containsKey(EMAIL_SUBJECT))
-        {
-            setSubject(criteria.getString(EMAIL_SUBJECT));
-        }
-        else
-        {
-            setSubject("no subject available");
-        }
-    }
-
-    /**
-     * Set the FROM field of the email.
-     *
-     * @param email A String.
-     * @param name A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setFrom(String email, String name) throws MessagingException
-    {
-        try
-        {
-            if (name == null || name.trim().equals(""))
-            {
-                name = email;
-            }
-            message.setFrom(new InternetAddress(email, name));
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("cannot set from", e);
-        }
-        return this;
-    }
-
-    /**
-     * Add a recipient TO to the email.
-     *
-     * @param email A String.
-     * @param name A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email addTo(String email, String name) throws MessagingException
-    {
-        try
-        {
-            if (name == null || name.trim().equals(""))
-            {
-                name = email;
-            }
-            toList.addElement(new InternetAddress(email, name));
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("cannot add to", e);
-        }
-        return this;
-    }
-
-    /**
-     * Add a recipient CC to the email.
-     *
-     * @param email A String.
-     * @param name A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email addCc(String email, String name) throws MessagingException
-    {
-
-        try
-        {
-            if (name == null || name.trim().equals(""))
-            {
-                name = email;
-            }
-            ccList.addElement(new InternetAddress(email, name));
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("cannot add cc", e);
-        }
-
-        return this;
-    }
-
-    /**
-     * Add a blind BCC recipient to the email.
-     *
-     * @param email A String.
-     * @param name A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email addBcc(String email, String name)
-            throws MessagingException
-    {
-        try
-        {
-            if (name == null || name.trim().equals(""))
-            {
-                name = email;
-            }
-            bccList.addElement(new InternetAddress(email, name));
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("cannot add bcc", e);
-        }
-
-        return this;
-    }
-
-    /**
-     * Add a reply to address to the email.
-     *
-     * @param email A String.
-     * @param name A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email addReplyTo(String email, String name)
-            throws MessagingException
-    {
-        try
-        {
-            if (name == null || name.trim().equals(""))
-            {
-                name = email;
-            }
-            replyList.addElement(new InternetAddress(email, name));
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("cannot add replyTo", e);
-        }
-        return this;
-    }
-
-    /**
-     * Set the email subject.
-     *
-     * @param subject A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setSubject(String subject)
-            throws MessagingException
-    {
-        if (subject != null)
-        {
-            if (charset != null)
-            {
-                message.setSubject(subject, charset);
-            }
-            else
-            {
-                message.setSubject(subject);
-            }
-        }
-        return this;
-    }
-
-    /**
-     * Set the sent date field.
-     *
-     * @param date A Date.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setSentDate(Date date)
-            throws MessagingException
-    {
-        if (date != null)
-        {
-            message.setSentDate(date);
-        }
-        return this;
-    }
-
-    /**
-     * Define the content of the mail.  It should be overidden by the
-     * subclasses.
-     *
-     * @param msg A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public abstract Email setMsg(String msg)
-            throws MessagingException;
-
-    /**
-     * Does the work of actually sending the email.
-     *
-     * @exception MessagingException, if there was an error.
-     */
-    public void send()
-            throws MessagingException
-    {
-        InternetAddress[] foo = new InternetAddress[0];
-        message.setRecipients(Message.RecipientType.TO,
-                toInternetAddressArray(toList));
-        message.setRecipients(Message.RecipientType.CC,
-                toInternetAddressArray(ccList));
-        message.setRecipients(Message.RecipientType.BCC,
-                toInternetAddressArray(bccList));
-        message.setReplyTo(toInternetAddressArray(replyList));
-        Transport.send(message);
-    }
-
-    /**
-     * Utility to copy Vector of known InternetAddress objects into an
-     * array.
-     *
-     * @param v A Vector.
-     * @return An InternetAddress[].
-     */
-    private InternetAddress[] toInternetAddressArray(Vector v)
-    {
-        int size = v.size();
-        InternetAddress[] ia = new InternetAddress[size];
-        for (int i = 0; i < size; i++)
-        {
-            ia[i] = (InternetAddress) v.elementAt(i);
-        }
-        return ia;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/EmailAttachment.java b/src/java/org/apache/turbine/util/mail/EmailAttachment.java
deleted file mode 100644
index 9384858..0000000
--- a/src/java/org/apache/turbine/util/mail/EmailAttachment.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URL;
-
-/**
- * This class models an email attachment.  Used by MultiPartEmail.
- *
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.EmailAttachment instead.
- */
-public class EmailAttachment
-{
-    public final static String ATTACHMENT = javax.mail.Part.ATTACHMENT;
-    public final static String INLINE = javax.mail.Part.INLINE;
-
-    /** The name of this attachment. */
-    private String name = "";
-
-    /** The description of this attachment. */
-    private String description = "";
-
-    /** The full path to this attachment (ie c:/path/to/file.jpg). */
-    private String path = "";
-
-    /** The HttpURI where the file can be got. */
-    private URL url = null;
-
-    /** The disposition. */
-    private String disposition = ATTACHMENT;
-
-    /**
-     * Get the description.
-     *
-     * @return A String.
-     */
-    public String getDescription()
-    {
-        return description;
-    }
-
-    /**
-     * Get the name.
-     *
-     * @return A String.
-     */
-    public String getName()
-    {
-        return name;
-    }
-
-    /**
-     * Get the path.
-     *
-     * @return A String.
-     */
-    public String getPath()
-    {
-        return path;
-    }
-
-    /**
-     * Get the URL.
-     *
-     * @return A URL.
-     */
-    public URL getURL()
-    {
-        return url;
-    }
-
-    /**
-     * Get the disposition.
-     *
-     * @return A String.
-     */
-    public String getDisposition()
-    {
-        return disposition;
-    }
-
-    /**
-     * Set the description.
-     *
-     * @param desc A String.
-     */
-    public void setDescription(String desc)
-    {
-        this.description = desc;
-    }
-
-    /**
-     * Set the name.
-     *
-     * @param name A String.
-     */
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    /**
-     * Set the path.
-     *
-     * @param path A String.
-     */
-    public void setPath(String path)
-    {
-        this.path = path;
-    }
-
-    /**
-     * Set the URL.
-     *
-     * @param url A URL.
-     */
-    public void setURL(URL url)
-    {
-        this.url = url;
-    }
-
-    /**
-     * Set the disposition.
-     *
-     * @param disposition A String.
-     */
-    public void setDisposition(String disposition)
-    {
-        this.disposition = disposition;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/HtmlEmail.java b/src/java/org/apache/turbine/util/mail/HtmlEmail.java
deleted file mode 100644
index 246995d..0000000
--- a/src/java/org/apache/turbine/util/mail/HtmlEmail.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URL;
-
-import javax.activation.DataHandler;
-import javax.activation.URLDataSource;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.ecs.Document;
-import org.apache.ecs.ElementContainer;
-import org.apache.ecs.html.Body;
-import org.apache.ecs.html.Html;
-import org.apache.ecs.html.PRE;
-
-/**
- * An HTML multipart email.
- *
- * <p>This class is used to send HTML formatted email.  A text message
- * can also be set for HTML unaware email clients, such as text-based
- * email clients.
- *
- * <p>This class also inherits from MultiPartEmail, so it is easy to
- * add attachents to the email.
- *
- * <p>To send an email in HTML, one should create a HtmlEmail, then
- * use the setFrom, addTo, etc. methods.  The HTML content can be set
- * with the setHtmlMsg method.  The alternate text content can be set
- * with setTextMsg.
- *
- * <p>Either the text or HTML can be omitted, in which case the "main"
- * part of the multipart becomes whichever is supplied rather than a
- * multipart/alternative.
- *
- * @author <a href="mailto:unknown">Regis Koenig</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.HtmlEmail instead.
- */
-public class HtmlEmail extends MultiPartEmail
-{
-    protected MimeMultipart htmlContent;
-
-    protected String text;
-    protected String html;
-
-    /**
-     * Basic constructor.
-     *
-     * @exception MessagingException.
-     */
-    public HtmlEmail()
-            throws MessagingException
-    {
-        this.init();
-    }
-
-    /**
-     * Instantiates a new MimeMultipart object if it isn't already
-     * instantiated.
-     *
-     * @return A MimeMultipart object
-     */
-    public MimeMultipart getHtmlContent()
-    {
-        if (htmlContent == null)
-        {
-            htmlContent = new MimeMultipart();
-        }
-        return htmlContent;
-    }
-
-    /**
-     * Set the text content.
-     *
-     * @param text A String.
-     * @return An HtmlEmail.
-     * @exception MessagingException.
-     */
-    public HtmlEmail setTextMsg(String text)
-            throws MessagingException
-    {
-        this.text = text;
-        return this;
-    }
-
-    /**
-     * Set the HTML content.
-     *
-     * @param html A String.
-     * @return An HtmlEmail.
-     * @exception MessagingException.
-     */
-    public HtmlEmail setHtmlMsg(String html)
-            throws MessagingException
-    {
-        this.html = html;
-        return this;
-    }
-
-    /**
-     * Set the HTML content based on an ECS document.
-     *
-     * @param doc A Document.
-     * @return An HtmlEmail.
-     * @exception MessagingException.
-     */
-    public HtmlEmail setHtmlMsg(Document doc)
-            throws MessagingException
-    {
-        return setHtmlMsg(doc.toString());
-    }
-
-    /**
-     * Set the message.
-     *
-     * <p>This method overrides the MultiPartEmail setMsg() method in
-     * order to send an HTML message instead of a full text message in
-     * the mail body. The message is formatted in HTML for the HTML
-     * part of the message, it is let as is in the alternate text
-     * part.
-     *
-     * @param msg A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setMsg(String msg)
-            throws MessagingException
-    {
-        setTextMsg(msg);
-        setHtmlMsg(new ElementContainer(new Html(new Body()
-                .addElement(new PRE(msg)))).toString());
-        return this;
-    }
-
-    /**
-     * Embeds an URL in the HTML.
-     *
-     * <p>This method allows to embed a file located by an URL into
-     * the mail body.  It allows, for instance, to add inline images
-     * to the email.  Inline files may be referenced with a
-     * <code>cid:xxxxxx</code> URL, where xxxxxx is the Content-ID
-     * returned by the embed function.
-     *
-     * <p>Example of use:<br><code><pre>
-     * HtmlEmail he = new HtmlEmail();
-     * he.setHtmlMsg("&lt;html&gt;&lt;img src=cid:"+embed("file:/my/image.gif","image.gif")+"&gt;&lt;/html&gt;");
-     * // code to set the others email fields (not shown)
-     * </pre></code>
-     *
-     * @param url The URL of the file.
-     * @param name The name that will be set in the filename header
-     * field.
-     * @return A String with the Content-ID of the file.
-     * @exception MessagingException.
-     */
-    public String embed(URL url, String name)
-            throws MessagingException
-    {
-        MimeBodyPart mbp = new MimeBodyPart();
-
-        mbp.setDataHandler(new DataHandler(new URLDataSource(url)));
-        mbp.setFileName(name);
-        mbp.setDisposition("inline");
-        String cid = org.apache.turbine.util.GenerateUniqueId.getIdentifier();
-        mbp.addHeader("Content-ID", cid);
-
-        getHtmlContent().addBodyPart(mbp);
-        return mbp.getContentID();
-    }
-
-    /**
-     * Does the work of actually sending the email.
-     *
-     * @exception MessagingException, if there was an error.
-     */
-    public void send()
-            throws MessagingException
-    {
-        MimeBodyPart msgText = null;
-        MimeBodyPart msgHtml = null;
-
-        if (StringUtils.isNotEmpty(text) && StringUtils.isNotEmpty(html))
-        {
-            // The message in text and HTML form.
-            MimeMultipart msg = getHtmlContent();
-            msg.setSubType("alternative");
-            main.setContent(msg);
-
-            msgText = new MimeBodyPart();
-            msgHtml = new MimeBodyPart();
-            msg.addBodyPart(msgText);
-            msg.addBodyPart(msgHtml);
-
-        }
-        else if (StringUtils.isNotEmpty(text))
-        {
-            // just text so the text part is the main part
-            msgText = main;
-        }
-        else if (StringUtils.isNotEmpty(html))
-        {
-            // just HTML so the html part is the main part
-            msgHtml = main;
-        }
-        else
-        {
-            msgText = main;
-            text = "NO BODY";
-        }
-
-        if (msgText != null)
-        {
-            // add the text
-            if (charset != null)
-            {
-                msgText.setText(text, charset);
-            }
-            else
-            {
-                msgText.setText(text);
-            }
-        }
-
-        if (msgHtml != null)
-        {
-            // add the html
-            if (charset != null)
-            {
-                msgHtml.setContent(html, TEXT_HTML + ";charset=" + charset);
-            }
-            else
-            {
-                msgHtml.setContent(html, TEXT_HTML);
-            }
-        }
-
-        super.send();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/MailMessage.java b/src/java/org/apache/turbine/util/mail/MailMessage.java
deleted file mode 100644
index 64ed8ba..0000000
--- a/src/java/org/apache/turbine/util/mail/MailMessage.java
+++ /dev/null
@@ -1,702 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.UnsupportedEncodingException;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Properties;
-import java.util.StringTokenizer;
-import java.util.Vector;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Transport;
-import javax.mail.internet.AddressException;
-import javax.mail.internet.InternetAddress;
-import javax.mail.internet.MimeMessage;
-
-/**
- * Creates a very simple text/plain message and sends it.
- *
- * <p>MailMessage creates a very simple text/plain message and sends
- * it.  It can be used like this:<br>
- * <pre>
- * MailMessage sm = new MailMessage("mail.domain.net",
- *                                  "toYou@domain.net",
- *                                  "fromMe@domain",
- *                                  "this is the subject",
- *                                  "this is the body");
- * </pre>
- *
- * Another example is:<br>
- * <pre>
- * MailMessage sm = new MailMessage();
- * sm.setHost("mail.domain.net");
- * sm.setHeaders("X-Mailer: Sendmail class, X-Priority: 1(Highest)");
- * sm.setFrom("Net Freak1 user1@domain.com");
- * sm.setReplyTo("Net Freak8 user8@domain.com");
- * sm.setTo("Net Freak2 user2@domain.com, Net Freak3 user3@domain.com");
- * sm.setCc("Net Freak4 user4@domain.com, Net Freak5 user5@domain.com");
- * sm.setBcc("Net Freak6 user6@domain.com, Net Freak7 user7@domain.com");
- * sm.setSubject("New Sendmail Test");
- * sm.setBody("Test message from Sendmail class, more features to be added.
- *             Like multipart messages, html, binary files...");
- * sm.setDebug(true);
- * sm.send();
- * </pre>
- *
- * @author <a href="mailto:david@i2a.com">David Duddleston</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.MailMessage instead.
- */
-public class MailMessage
-{
-    /**
-     * The host name of the mail server to use.
-     */
-    protected String host;
-
-    /**
-     * Used to specify the mail headers.  Example:
-     *
-     * X-Mailer: Sendmail, X-Priority: 1(highest)
-     * or  2(high) 3(normal) 4(low) and 5(lowest)
-     * Disposition-Notification-To: returnR user@domain.net
-     */
-    protected Hashtable headers;
-
-    /**
-     * The email address that the mail is being sent from.
-     */
-    protected InternetAddress from;
-
-    /**
-     * The email address used for replies to this message.
-     */
-    protected InternetAddress[] replyTo;
-
-    /**
-     * The email address or addresses that the email is being sent to.
-     */
-    protected InternetAddress[] to;
-
-    /**
-     * The email address or addresses that the email is being
-     * carbon-copied to.
-     */
-    protected InternetAddress[] cc;
-
-    /**
-     * The email address or addresses that the email is being
-     * blind-carbon-copied to.
-     */
-    protected InternetAddress[] bcc;
-
-    /**
-     * The subject of the email message.
-     */
-    protected String subject;
-
-    /**
-     * The body of the email message.
-     */
-    protected String body;
-
-    /**
-     * Displays debug information when true.
-     */
-    protected boolean debug;
-
-    /**
-     * Default constructor.  Must use the setHost, setTo, and other
-     * set functions to properly send an email.  <b>host</b>,
-     * <b>to</b>, <b>cc</b>, <b>bcc</b>, and <b>from</b> are set to
-     * null.  <b>subject</b>, and <b>body</b> are set to empty
-     * strings.  <b>debug</b> is set to false.
-     */
-    public MailMessage()
-    {
-        this(null, null, null, null, null, "", "", false);
-    }
-
-    /**
-     * Constructor used to specify <b>host</b>, <b>to</b>,
-     * <b>from</b>, <b>subject</b>, and <b>body</b>.
-     *
-     * @param h A String with the host.
-     * @param t A String with the TO.
-     * @param f A String with the FROM.
-     * @param s A String with the SUBJECT.
-     * @param b A String with the BODY.
-     */
-    public MailMessage(String h,
-                       String t,
-                       String f,
-                       String s,
-                       String b)
-    {
-        this(h, t, null, null, f, s, b, false);
-    }
-
-    /**
-     * Constructor used to specify <b>host</b>, <b>to</b>, <b>cc</b>,
-     * <b>bcc</b>, <b>from</b>, <b>subject</b>, <b>body</b>, and
-     * <b>debug</b>.
-     *
-     * @param h A String with the host.
-     * @param t A String with the TO.
-     * @param c A String with the CC.
-     * @param bc A String with the BCC.
-     * @param f A String with the FROM.
-     * @param s A String with the SUBJECT.
-     * @param b A String with the BODY.
-     * @param d True if debugging is wanted.
-     */
-    public MailMessage(String h,
-                       String t,
-                       String c,
-                       String bc,
-                       String f,
-                       String s,
-                       String b,
-                       boolean d)
-    {
-        host = h;
-        to = (t == null ? null : parseAddressField(t));
-        cc = (cc == null ? null : parseAddressField(c));
-        bcc = (bc == null ? null : parseAddressField(bc));
-        from = (f == null ? null : parseInternetAddress(f));
-        subject = s;
-        body = b;
-        debug = d;
-    }
-
-    /**
-     * Adds a header (name, value) to the headers Hashtable.
-     *
-     * @param name A String with the name.
-     * @param value A String with the value.
-     */
-    public void addHeader(String name,
-                          String value)
-    {
-        if (headers == null)
-        {
-            headers = new Hashtable();
-        }
-        headers.put(name, value);
-    }
-
-    /**
-     * Parse an address field.
-     *
-     * @param str A String with the address.
-     * @return An InternetAddress[].
-     */
-    public static InternetAddress[] parseAddressField(String str)
-    {
-        String[] addressList;
-        if (str.indexOf(",") != -1)
-        {
-            Vector v = new Vector();
-            StringTokenizer st = new StringTokenizer(str, ",", false);
-            while (st.hasMoreTokens())
-            {
-                v.addElement(st.nextToken());
-            }
-            addressList = new String[v.size()];
-            for (int i = 0; i < v.size(); i++)
-            {
-                addressList[i] = (String) v.elementAt(i);
-            }
-        }
-        else
-        {
-            addressList = new String[1];
-            addressList[0] = str;
-        }
-        return parseAddressList(addressList);
-    }
-
-    /**
-     * Parse an address list.
-     *
-     * @param aList A String[] with the addresses.
-     * @return An InternetAddress[].
-     */
-    public static InternetAddress[] parseAddressList(String[] aList)
-    {
-        InternetAddress[] ia = new InternetAddress[aList.length];
-
-        for (int i = 0; i < aList.length; i++)
-        {
-            ia[i] = parseInternetAddress(aList[i]);
-        }
-
-        return ia;
-
-    }
-
-    /**
-     * Parse a header.
-     *
-     * @param str A String with the header.
-     * @param headers A Hashtable with the current headers.
-     */
-    public static void parseHeader(String str,
-                                   Hashtable headers)
-    {
-        String name = null;
-        String value = null;
-
-        str = str.trim();
-        int sp = str.lastIndexOf(":");
-        name = str.substring(0, sp);
-        value = (str.substring(sp + 1)).trim();
-
-        headers.put(name, value);
-    }
-
-    /**
-     * Parse a header field.
-     *
-     * @param str A String with the header field.
-     * @return A Hashtable with the parsed headers.
-     */
-    public static Hashtable parseHeaderField(String str)
-    {
-        String[] headerList;
-        if (str.indexOf(",") != -1)
-        {
-            Vector v = new Vector();
-            StringTokenizer st = new StringTokenizer(str, ",", false);
-            while (st.hasMoreTokens())
-            {
-                v.addElement(st.nextToken());
-            }
-            headerList = new String[v.size()];
-            for (int i = 0; i < v.size(); i++)
-            {
-                headerList[i] = (String) v.elementAt(i);
-            }
-        }
-        else
-        {
-            headerList = new String[1];
-            headerList[0] = str;
-        }
-        return parseHeaderList(headerList);
-    }
-
-    /**
-     * Parse a header list.
-     *
-     * @param hList A String[] with the headers.
-     * @return A Hashtable with the parsed headers.
-     */
-    public static Hashtable parseHeaderList(String[] hList)
-    {
-        Hashtable headers = new Hashtable();
-
-        for (int i = 0; i < hList.length; i++)
-        {
-            // headers.put("one", new Integer(1));
-            parseHeader(hList[i], headers);
-        }
-
-        return headers;
-    }
-
-    /**
-     * Parse an Internet address.
-     *
-     * @param str A String with the address.
-     * @return An InternetAddress.
-     */
-    public static InternetAddress parseInternetAddress(String str)
-    {
-        String address = null;
-        String personal = null;
-
-        str = str.trim();
-        if (str.indexOf(" ") == -1)
-        {
-            address = str;
-        }
-        else
-        {
-            int sp = str.lastIndexOf(" ");
-            address = str.substring(sp + 1);
-            personal = str.substring(0, sp);
-        }
-        return parseInternetAddress(address, personal);
-    }
-
-    /**
-     * Parse an Internet address.
-     *
-     * @param address A String with the address.
-     * @param personal A String.
-     * @return An InternetAddress.
-     */
-    public static InternetAddress parseInternetAddress(String address,
-                                                       String personal)
-    {
-        InternetAddress ia = null;
-        try
-        {
-            ia = new InternetAddress(address);
-
-            if (personal != null)
-            {
-                ia.setPersonal(personal);
-            }
-        }
-        catch (AddressException e)
-        {
-            e.printStackTrace();
-            System.out.println();
-        }
-        catch (UnsupportedEncodingException e)
-        {
-            e.printStackTrace();
-            System.out.println();
-        }
-
-        return ia;
-    }
-
-    /**
-     * Send the message.  The to, from, subject, host, and body should
-     * be set prior to using this method.
-     *
-     * @return True is message was sent.
-     */
-    public boolean send()
-    {
-        // Create some properties and get the default Session.
-        Properties props = new Properties();
-        props.put("mail.smtp.host", host);
-
-        Session session = Session.getInstance(props, null);
-        session.setDebug(debug);
-
-        try
-        {
-            // Create a message.
-            Message msg = new MimeMessage(session);
-
-            // Set the email address that the message is from.
-            msg.setFrom(from);
-
-            // Set the email addresses that the message is to.
-            msg.setRecipients(Message.RecipientType.TO, to);
-
-            // Set the email addresses that will be carbon-copied.
-            if (cc != null)
-            {
-                msg.setRecipients(Message.RecipientType.CC, cc);
-            }
-
-            // Set the email addresses that will be
-            // blind-carbon-copied.
-            if (bcc != null)
-            {
-                msg.setRecipients(Message.RecipientType.BCC, bcc);
-            }
-
-            // Set the email addresses that reply-to messages are
-            // sent.
-            if (replyTo != null)
-            {
-                msg.setReplyTo(replyTo);
-            }
-
-            // Set the subject of the email message.
-            msg.setSubject(subject);
-
-            // Set the body of the message.  If the desired charset is
-            // known, use setText(text, charset).
-            msg.setText(body);
-
-            // msg.addHeader("X-Mailer", "com.i2a.util.mail.Sendmail");
-
-            if (headers != null)
-            {
-                Enumeration e = headers.keys();
-                while (e.hasMoreElements())
-                {
-                    String name = (String) e.nextElement();
-                    String value = (String) headers.get(name);
-                    msg.addHeader(name, value);
-                }
-            }
-
-            // Send the message.
-            Transport.send(msg);
-        }
-        catch (MessagingException mex)
-        {
-            mex.printStackTrace();
-            Exception ex = null;
-            if ((ex = mex.getNextException()) != null)
-            {
-                ex.printStackTrace();
-            }
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being
-     * blind-carbon-copied to.
-     *
-     * @param bc An InternetAddress[].
-     */
-    public void setBcc(InternetAddress[] bc)
-    {
-        bcc = bc;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being
-     * blind-carbon-copied to.
-     *
-     * @param bc A String.
-     */
-    public void setBcc(String bc)
-    {
-        bcc = parseAddressField(bc);
-    }
-
-    /**
-     * Used to specify the body of the email message.
-     *
-     * @param b A String.
-     */
-    public void setBody(String b)
-    {
-        body = b;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * to.
-     *
-     * @param c An InternetAddress[].
-     */
-    public void setCc(InternetAddress[] c)
-    {
-        cc = c;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being
-     * carbon-copied to.
-     *
-     * @param c A String.
-     */
-    public void setCc(String c)
-    {
-        cc = parseAddressField(c);
-    }
-
-    /**
-     * Setting to true will enable the display of debug information.
-     *
-     * @param str A String.
-     */
-    public void setDebug(String str)
-    {
-        if (str.equals("1"))
-        {
-            debug = true;
-        }
-        else if (str.equals("0"))
-        {
-            debug = false;
-        }
-        else
-        {
-            debug = new Boolean(str).booleanValue();
-        }
-    }
-
-    /**
-     * Setting to true will enable the display of debug information.
-     *
-     * @param d A boolean.
-     */
-    public void setDebug(boolean d)
-    {
-        debug = d;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * from.
-     *
-     * @param f A String.
-     */
-    public void setFrom(String f)
-    {
-        from = parseInternetAddress(f);
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * from.
-     *
-     * @param f An InternetAddress.
-     */
-    public void setFrom(InternetAddress f)
-    {
-        from = f;
-    }
-
-    /**
-     * Used to specify the mail headers.  Example:
-     *
-     * X-Mailer: Sendmail, X-Priority: 1(highest)
-     * or  2(high) 3(normal) 4(low) and 5(lowest)
-     * Disposition-Notification-To: returnR user@domain.net
-     *
-     * @param h A String.
-     */
-    public void setHeaders(String h)
-    {
-        headers = parseHeaderField(h);
-    }
-
-    /**
-     * Used to specify the mail headers.  Example:
-     *
-     * X-Mailer: Sendmail, X-Priority: 1(highest)
-     * or  2(high) 3(normal) 4(low) and 5(lowest)
-     * Disposition-Notification-To: returnR user@domain.net
-     *
-     * @param h A Hashtable.
-     */
-    public void setHeaders(Hashtable h)
-    {
-        headers = h;
-    }
-
-    /**
-     * Used to specify the mail server host.
-     *
-     * @param h A String.
-     */
-    public void setHost(String h)
-    {
-        host = h;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * from.
-     *
-     * @param rt An InternetAddress[].
-     */
-    public void setReplyTo(InternetAddress[] rt)
-    {
-        replyTo = rt;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * from.
-     *
-     * @param rp A String.
-     */
-    public void setReplyTo(String rp)
-    {
-        replyTo = parseAddressField(rp);
-    }
-
-    /**
-     * Used to specify the subject of the email message.
-     *
-     * @param s A String.
-     */
-    public void setSubject(String s)
-    {
-        subject = s;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * to.
-     *
-     * @param t An InternetAddress[].
-     */
-    public void setTo(InternetAddress[] t)
-    {
-        to = t;
-    }
-
-    /**
-     * Used to specify the email address that the mail is being sent
-     * to.
-     *
-     * @param t A String.
-     */
-    public void setTo(String t)
-    {
-        to = parseAddressField(t);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/MultiPartEmail.java b/src/java/org/apache/turbine/util/mail/MultiPartEmail.java
deleted file mode 100644
index 0c8eb0d..0000000
--- a/src/java/org/apache/turbine/util/mail/MultiPartEmail.java
+++ /dev/null
@@ -1,346 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URL;
-
-import java.util.Vector;
-
-import javax.activation.DataHandler;
-import javax.activation.DataSource;
-import javax.activation.URLDataSource;
-
-import javax.mail.MessagingException;
-import javax.mail.internet.MimeBodyPart;
-import javax.mail.internet.MimeMultipart;
-
-import org.apache.torque.util.Criteria;
-
-/**
- * A multipart email.
- *
- * <p>This class is used to send multi-part internet email like
- * messages with attachments.
- *
- * <p>To create a multi-part email, call the default constructor and
- * then you can call setMsg() to set the message and call the
- * different attach() methods.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:unknown">Regis Koenig</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.MultiPartEmail instead.
- */
-public class MultiPartEmail extends Email
-{
-    /** Body portion of the email. */
-    protected MimeMultipart emailBody;
-
-    /** The message container. */
-    protected MimeBodyPart main;
-
-    /** The file server if it exists. */
-    private String fileServer = null;
-
-    /**
-     * Initialize the multipart email.
-     *
-     * @exception MessagingException.
-     */
-    public MultiPartEmail()
-            throws MessagingException
-    {
-        this.init();
-    }
-
-    /**
-     * Constructor used to initialize attributes.
-     *
-     * <p>This method uses the criteria object to set the different
-     * fields of the e-mail. The expected fields of the Criteria are:
-     *
-     * <ul>
-     * <li>SENDER_EMAIL</li>
-     * <li>RECEIVER_EMAIL</li>
-     * <li>EMAIL_SUBJECT</li>
-     * <li>EMAIL_BODY</li>
-     * <li>ATTACHMENTS - A Vector of EmailAttachment.</li>
-     * <li>FILE_SERVER - Where the files are located.  If not given,
-     * they are assumed to be local.</li>
-     * </ul>
-     *
-     * Deprecated, since Criteria is deprecated in mail API.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail(Criteria criteria)
-            throws MessagingException
-    {
-        this.init();
-        this.initCriteria(criteria);
-    }
-
-    /**
-     * Initialize the multipart email.
-     *
-     * @exception MessagingException.
-     */
-    protected void init()
-            throws MessagingException
-    {
-        super.init();
-
-        fileServer = null;
-
-        /* The body of the mail. */
-        emailBody = new MimeMultipart();
-        message.setContent(emailBody);
-
-        /* The main message content. */
-        main = new MimeBodyPart();
-        emailBody.addBodyPart(main);
-    }
-
-    /**
-     * Uses the criteria to set the fields.
-     *
-     * <p>This method uses the criteria object to set the different
-     * fields of the e-mail.  The expected fields of the Criteria are:
-     *
-     * <ul>
-     * <li>SENDER_EMAIL</li>
-     * <li>RECEIVER_EMAIL</li>
-     * <li>EMAIL_SUBJECT</li>
-     * <li>EMAIL_BODY</li>
-     * <li>ATTACHMENTS - A Vector of EmailAttachment.</li>
-     * <li>FILE_SERVER - Where the files are located.  If not given,
-     * they are assumed to be local.</li>
-     * </ul>
-     *
-     * Deprecated, since the Criteria is deprecated.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     */
-    protected void initCriteria(Criteria criteria)
-            throws MessagingException
-    {
-        super.initCriteria(criteria);
-
-        if (criteria.containsKey(EMAIL_BODY))
-        {
-            setMsg(criteria.getString(EMAIL_BODY));
-        }
-        else
-        {
-            setMsg("NO MESSAGE");
-        }
-
-        Vector attachments;
-
-        if (criteria.containsKey(ATTACHMENTS))
-        {
-            attachments = (Vector) criteria.get(ATTACHMENTS);
-        }
-        else
-        {
-            attachments = new Vector();
-        }
-
-        if (criteria.containsKey(FILE_SERVER))
-        {
-            fileServer = criteria.getString(FILE_SERVER);
-        }
-
-        for (int i = 0; i < attachments.size(); i++)
-        {
-            EmailAttachment attachment =
-                    (EmailAttachment) attachments.elementAt(i);
-            attach(attachment);
-        }
-    }
-
-    /**
-     * Set the message of the email.
-     *
-     * @param msg A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setMsg(String msg)
-            throws MessagingException
-    {
-        if (charset != null)
-        {
-            main.setText(msg, charset);
-        }
-        else
-        {
-            main.setText(msg);
-        }
-        return this;
-    }
-
-    /**
-     * Attach an EmailAttachement.
-     *
-     * @param attachment An EmailAttachment.
-     * @return A MultiPartEmail.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail attach(EmailAttachment attachment)
-            throws MessagingException
-    {
-        URL url = attachment.getURL();
-        if (url == null)
-        {
-            try
-            {
-                String file = attachment.getPath();
-                url = new URL("file", fileServer, file);
-            }
-            catch (Exception e)
-            {
-                throw new MessagingException("Cannot find file", e);
-            }
-        }
-
-        return attach(url, attachment.getName(),
-                attachment.getDescription(),
-                attachment.getDisposition());
-    }
-
-    /**
-     * Attach a file located by its URL.  The disposition of the file
-     * is set to mixed.
-     *
-     * @param url The URL of the file (may be any valid URL).
-     * @param name The name field for the attachment.
-     * @param description A description for the attachment.
-     * @return A MultiPartEmail.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail attach(URL url, String name, String description)
-            throws MessagingException
-    {
-        return attach(url, name, description, EmailAttachment.ATTACHMENT);
-    }
-
-    /**
-     * Attach a file located by its URL.
-     *
-     * @param url The URL of the file (may be any valid URL).
-     * @param name The name field for the attachment.
-     * @param description A description for the attachment.
-     * @param disposition Either mixed or inline.
-     * @return A MultiPartEmail.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail attach(URL url,
-                                 String name,
-                                 String description,
-                                 String disposition)
-            throws MessagingException
-    {
-        return attach(new URLDataSource(url), name, description, disposition);
-    }
-
-    /**
-     * Attach a file specified as a DataSource interface.
-     *
-     * @param ds A DataSource interface for the file.
-     * @param name The name field for the attachment.
-     * @param description A description for the attachment.
-     * @return A MultiPartEmail.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail attach(DataSource ds,
-                                 String name,
-                                 String description)
-            throws MessagingException
-    {
-        return attach(ds, name, description, EmailAttachment.ATTACHMENT);
-    }
-
-    /**
-     * Attach a file specified as a DataSource interface.
-     *
-     * @param ds A DataSource interface for the file.
-     * @param name The name field for the attachment.
-     * @param description A description for the attachement.
-     * @param disposition Either mixed or inline.
-     * @return A MultiPartEmail.
-     * @exception MessagingException.
-     */
-    public MultiPartEmail attach(DataSource ds,
-                                 String name,
-                                 String description,
-                                 String disposition)
-            throws MessagingException
-    {
-        MimeBodyPart mbp = new MimeBodyPart();
-        emailBody.addBodyPart(mbp);
-
-        mbp.setDisposition(disposition);
-        mbp.setFileName(name);
-        mbp.setDescription(description);
-        mbp.setDataHandler(new DataHandler(ds));
-
-        return this;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/mail/SimpleEmail.java b/src/java/org/apache/turbine/util/mail/SimpleEmail.java
deleted file mode 100644
index 51fc2f6..0000000
--- a/src/java/org/apache/turbine/util/mail/SimpleEmail.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.apache.turbine.util.mail;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.mail.MessagingException;
-
-import org.apache.torque.util.Criteria;
-
-/**
- * This class is used to send simple internet email messages without
- * attachments.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:frank.kim@clearink.com">Frank Y. Kim</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:unknown">Regis Koenig</a>
- * @version $Id$
- * @deprecated Use org.apache.commons.mail.SimpleEmail instead.
- */
-public class SimpleEmail
-        extends Email
-{
-    /** the conentet type for body of the message */
-    private String contentType = null;
-
-    /**
-     * Default constructor.
-     *
-     * @exception MessagingException.
-     */
-    public SimpleEmail() throws MessagingException
-    {
-        super.init();
-    }
-
-    /**
-     * Constructor used to initialize attributes.  To create a simple
-     * email you need to pass a Criteria object into the SimpleEmail
-     * constructor which contains:
-     *
-     * <ul>
-     * <li>SENDER_EMAIL</li>
-     * <li>SENDER_NAME</li>
-     * <li>RECEIVER_EMAIL</li>
-     * <li>RECEIVER_NAME</li>
-     * <li>EMAIL_SUBJECT</li>
-     * <li>EMAIL_BODY</li>
-     * </ul>
-     *
-     * Deprecated, since Criteria is deprecated in mail API.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     */
-    public SimpleEmail(Criteria criteria)
-            throws MessagingException
-    {
-        super.init();
-        this.initCriteria(criteria);
-    }
-
-    /**
-     * Uses the criteria to set the fields.
-     *
-     * Deprecated, since the Criteria is deprecated.
-     *
-     * @param criteria A Criteria.
-     * @exception MessagingException.
-     */
-    protected void initCriteria(Criteria criteria)
-            throws MessagingException
-    {
-        super.initCriteria(criteria);
-
-        if (criteria.containsKey(CONTENT_TYPE))
-        {
-            contentType = criteria.getString(CONTENT_TYPE);
-        }
-
-        if (criteria.containsKey(EMAIL_BODY))
-        {
-            setMsg(criteria.getString(EMAIL_BODY));
-        }
-        else
-        {
-            setMsg("NO MESSAGE");
-        }
-    }
-
-    /**
-     * Set the content of the mail
-     *
-     * @param msg A String.
-     * @return An Email.
-     * @exception MessagingException.
-     */
-    public Email setMsg(String msg) throws MessagingException
-    {
-        if (contentType == null)
-        {
-            contentType = TEXT_PLAIN;
-        }
-        message.setContent(msg, contentType);
-        return this;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/package.html b/src/java/org/apache/turbine/util/package.html
deleted file mode 100644
index 9c90c87..0000000
--- a/src/java/org/apache/turbine/util/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Various utilities used in Turbine and for Turbine based applications.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/parser/BaseValueParser.java b/src/java/org/apache/turbine/util/parser/BaseValueParser.java
deleted file mode 100644
index 09c0097..0000000
--- a/src/java/org/apache/turbine/util/parser/BaseValueParser.java
+++ /dev/null
@@ -1,1657 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.beans.IndexedPropertyDescriptor;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-
-import java.io.UnsupportedEncodingException;
-
-import java.lang.reflect.Method;
-
-import java.math.BigDecimal;
-
-import java.text.DateFormat;
-import java.text.ParseException;
-
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Map;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.util.DateSelector;
-import org.apache.turbine.util.TimeSelector;
-import org.apache.turbine.util.pool.Recyclable;
-import org.apache.turbine.util.pool.RecyclableSupport;
-
-/**
- * BaseValueParser is a base class for classes that need to parse
- * name/value Parameters, for example GET/POST data or Cookies
- * (DefaultParameterParser and DefaultCookieParser).
- *
- * <p>It can also be used standalone, for an example see DataStreamParser.
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * ValueParser vp = new BaseValueParser();
- * vp.add("ERROR",1);
- * vp.add("eRrOr",2);
- * int result = vp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class BaseValueParser
-        extends RecyclableSupport
-        implements ValueParser, Recyclable
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(BaseValueParser.class);
-
-    /**
-     * Random access storage for parameter data.  The keys must always be
-     * Strings.  The values will be arrays of Strings.
-     */
-    private Map parameters = new HashMap();
-
-    /** The character encoding to use when converting to byte arrays */
-    private String characterEncoding = "US-ASCII";
-
-    /**
-     * Default constructor
-     */
-    public BaseValueParser()
-    {
-        super();
-    }
-
-    /**
-     * Constructor that takes a character encoding
-     */
-    public BaseValueParser(String characterEncoding)
-    {
-        super();
-        recycle(characterEncoding);
-    }
-
-    /**
-     * Recycles the parser.
-     */
-    public void recycle()
-    {
-        recycle("US-ASCII");
-    }
-
-    /**
-     * Recycles the parser with a character encoding.
-     *
-     * @param characterEncoding the character encoding.
-     */
-    public void recycle(String characterEncoding)
-    {
-        setCharacterEncoding(characterEncoding);
-        if (!isDisposed())
-        {
-            super.recycle();
-        }
-    }
-
-    /**
-     * Disposes the parser.
-     */
-    public void dispose()
-    {
-        clear();
-        super.dispose();
-    }
-
-    /**
-     * Clear all name/value pairs out of this object.
-     */
-    public void clear()
-    {
-        parameters.clear();
-    }
-
-    /**
-     * Set the character encoding that will be used by this ValueParser.
-     */
-    public void setCharacterEncoding(String s)
-    {
-        characterEncoding = s;
-    }
-
-    /**
-     * Get the character encoding that will be used by this ValueParser.
-     */
-    public String getCharacterEncoding()
-    {
-        return characterEncoding;
-    }
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A double with the value.
-     */
-    public void add(String name, double value)
-    {
-        add(name, Double.toString(value));
-    }
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value An int with the value.
-     */
-    public void add(String name, int value)
-    {
-        add(name, Integer.toString(value));
-    }
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value An Integer with the value.
-     */
-    public void add(String name, Integer value)
-    {
-        add(name, value.toString());
-    }
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A long with the value.
-     */
-    public void add(String name, long value)
-    {
-        add(name, Long.toString(value));
-    }
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A long with the value.
-     */
-    public void add(String name, String value)
-    {
-        append(name, value);
-    }
-
-    /**
-     * Add an array of Strings for a key. This
-     * is simply adding all the elements in the
-     * array one by one.
-     *
-     * @param name A String with the name.
-     * @param value A String Array.
-     */
-    public void add(String name, String [] value)
-    {
-        for (int i = 0 ; i < value.length; i++)
-        {
-            add(name, value[i]);
-        }
-    }
-
-    /**
-     * Add a String parameters.  If there are any Strings already
-     * associated with the name, append to the array.  This is used
-     * for handling parameters from multipart POST requests.
-     *
-     * @param name A String with the name.
-     * @param value A String with the value.
-     */
-    public void append(String name, String value)
-    {
-        String[] items = this.getStrings(name);
-        if (items == null)
-        {
-            items = new String[1];
-            items[0] = value;
-            parameters.put(convert(name), items);
-        }
-        else
-        {
-            String[] newItems = new String[items.length + 1];
-            System.arraycopy(items, 0, newItems, 0, items.length);
-            newItems[items.length] = value;
-            parameters.put(convert(name), newItems);
-        }
-    }
-
-    /**
-     * Removes the named parameter from the contained hashtable. Wraps to the
-     * contained <code>Map.remove()</code>.
-     *
-     * @return The value that was mapped to the key (a <code>String[]</code>)
-     *         or <code>null</code> if the key was not mapped.
-     */
-    public Object remove(String name)
-    {
-        return parameters.remove(convert(name));
-    }
-
-    /**
-     * Trims the string data and applies the conversion specified in
-     * the property given by URL_CASE_FOLDING.  It returns a new
-     * string so that it does not destroy the value data.
-     *
-     * @param value A String to be processed.
-     * @return A new String converted to lowercase and trimmed.
-     */
-    public String convert(String value)
-    {
-        return ParserUtils.convertAndTrim(value);
-    }
-
-    /**
-     * Determine whether a given key has been inserted.  All keys are
-     * stored in lowercase strings, so override method to account for
-     * this.
-     *
-     * @param key An Object with the key to search for.
-     * @return True if the object is found.
-     */
-    public boolean containsKey(Object key)
-    {
-        return parameters.containsKey(convert((String)key));
-    }
-
-    /**
-     * Check for existence of key_day, key_month and key_year
-     * parameters (as returned by DateSelector generated HTML).
-     *
-     * @param key A String with the selector name.
-     * @return True if keys are found.
-     */
-    public boolean containsDateSelectorKeys(String key)
-    {
-        return (containsKey(key + DateSelector.DAY_SUFFIX) &&
-                containsKey(key + DateSelector.MONTH_SUFFIX) &&
-                containsKey(key + DateSelector.YEAR_SUFFIX));
-    }
-
-    /**
-     * Check for existence of key_hour, key_minute and key_second
-     * parameters (as returned by TimeSelector generated HTML).
-     *
-     * @param key A String with the selector name.
-     * @return True if keys are found.
-     */
-    public boolean containsTimeSelectorKeys(String key)
-    {
-        return (containsKey(key + TimeSelector.HOUR_SUFFIX) &&
-                containsKey(key + TimeSelector.MINUTE_SUFFIX) &&
-                containsKey(key + TimeSelector.SECOND_SUFFIX));
-    }
-
-    /**
-     * Gets the set of keys
-     *
-     * @return A <code>Set</code> of the keys.
-     */
-    public Set keySet()
-    {
-        return parameters.keySet();
-    }
-
-    /**
-     * Returns all the available parameter names.
-     *
-     * @return A object array with the keys.
-     */
-    public Object[] getKeys()
-    {
-        return parameters.keySet().toArray();
-    }
-
-    /**
-     * Return a boolean for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A boolean.
-     */
-    public boolean getBoolean(String name, boolean defaultValue)
-    {
-        Boolean result = getBooleanObject(name);
-        return (result == null ? defaultValue : result.booleanValue());
-    }
-
-    /**
-     * Return a boolean for the given name.  If the name does not
-     * exist, return false.
-     *
-     * @param name A String with the name.
-     * @return A boolean.
-     */
-    public boolean getBoolean(String name)
-    {
-        return getBoolean(name, false);
-    }
-
-    /**
-     * Returns a Boolean object for the given name.  If the parameter
-     * does not exist or can not be parsed as a boolean, null is returned.
-     * <p>
-     * Valid values for true: true, on, 1, yes<br>
-     * Valid values for false: false, off, 0, no<br>
-     * <p>
-     * The string is compared without reguard to case.
-     *
-     * @param name A String with the name.
-     * @return A Boolean.
-     */
-    public Boolean getBooleanObject(String name)
-    {
-        Boolean result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            if (value.equals("1") ||
-                    value.equalsIgnoreCase("true") ||
-                    value.equalsIgnoreCase("yes") ||
-                    value.equalsIgnoreCase("on"))
-            {
-                result = Boolean.TRUE;
-            }
-            else if (value.equals("0") ||
-                    value.equalsIgnoreCase("false") ||
-                    value.equalsIgnoreCase("no") ||
-                    value.equalsIgnoreCase("off"))
-            {
-                result = Boolean.FALSE;
-            }
-            else
-            {
-                logConvertionFailure(name, value, "Boolean");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Returns a Boolean object for the given name.  If the parameter
-     * does not exist or can not be parsed as a boolean, null is returned.
-     * <p>
-     * Valid values for true: true, on, 1, yes<br>
-     * Valid values for false: false, off, 0, no<br>
-     * <p>
-     * The string is compared without reguard to case.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A Boolean.
-     */
-    public Boolean getBooleanObject(String name, Boolean defaultValue)
-    {
-        Boolean result = getBooleanObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return a double for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A double.
-     */
-    public double getDouble(String name, double defaultValue)
-    {
-        double result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = Double.valueOf(value).doubleValue();
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Double");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a double for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @return A double.
-     */
-    public double getDouble(String name)
-    {
-        return getDouble(name, 0.0);
-    }
-
-    /**
-     * Return an array of doubles for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double[].
-     */
-    public double[] getDoubles(String name)
-    {
-        double[] result = null;
-        String value[] = getStrings(name);
-        if (value != null)
-        {
-            result = new double[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Double.parseDouble(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Double");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a Double for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A double.
-     */
-    public Double getDoubleObject(String name, Double defaultValue)
-    {
-        Double result = getDoubleObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return a Double for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double.
-     */
-    public Double getDoubleObject(String name)
-    {
-        Double result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new Double(value);
-            }
-            catch(NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Double");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an array of doubles for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double[].
-     */
-    public Double[] getDoubleObjects(String name)
-    {
-        Double[] result = null;
-        String value[] = getStrings(convert(name));
-        if (value != null)
-        {
-            result = new Double[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Double.valueOf(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Double");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A float.
-     */
-    public float getFloat(String name, float defaultValue)
-    {
-        float result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = Float.valueOf(value).floatValue();
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Float");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @return A float.
-     */
-    public float getFloat(String name)
-    {
-        return getFloat(name, 0.0f);
-    }
-
-    /**
-     * Return an array of floats for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A float[].
-     */
-    public float[] getFloats(String name)
-    {
-        float[] result = null;
-        String value[] = getStrings(name);
-        if (value != null)
-        {
-            result = new float[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Float.parseFloat(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Float");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a Float for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A Float.
-     */
-    public Float getFloatObject(String name, Float defaultValue)
-    {
-        Float result = getFloatObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Float.
-     */
-    public Float getFloatObject(String name)
-    {
-        Float result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new Float(value);
-            }
-            catch(NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Float");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an array of floats for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A float[].
-     */
-    public Float[] getFloatObjects(String name)
-    {
-        Float[] result = null;
-        String value[] = getStrings(convert(name));
-        if (value != null)
-        {
-            result = new Float[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Float.valueOf(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Float");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a BigDecimal for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A BigDecimal.
-     */
-    public BigDecimal getBigDecimal(String name, BigDecimal defaultValue)
-    {
-        BigDecimal result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new BigDecimal(value);
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "BigDecimal");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a BigDecimal for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @return A BigDecimal.
-     */
-    public BigDecimal getBigDecimal(String name)
-    {
-        return getBigDecimal(name, new BigDecimal(0.0));
-    }
-
-    /**
-     * Return an array of BigDecimals for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A BigDecimal[].
-     */
-    public BigDecimal[] getBigDecimals(String name)
-    {
-        BigDecimal[] result = null;
-        String value[] = getStrings(name);
-        if (value != null)
-        {
-            result = new BigDecimal[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if(StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = new BigDecimal(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "BigDecimal");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an int for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return An int.
-     */
-    public int getInt(String name, int defaultValue)
-    {
-        int result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = Integer.valueOf(value).intValue();
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Integer");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an int for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return An int.
-     */
-    public int getInt(String name)
-    {
-        return getInt(name, 0);
-    }
-
-    /**
-     * Return an array of ints for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An int[].
-     */
-    public int[] getInts(String name)
-    {
-        int[] result = null;
-        String value[] = getStrings(name);
-        if (value != null)
-        {
-            result = new int[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Integer.parseInt(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Integer");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an Integer for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return An Integer.
-     */
-    public Integer getIntObject(String name, Integer defaultValue)
-    {
-        Integer result = getIntObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return an Integer for the given name.  If the name does not exist,
-     * return null.
-     *
-     * @param name A String with the name.
-     * @return An Integer.
-     */
-    public Integer getIntObject(String name)
-    {
-        Integer result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new Integer(value);
-            }
-            catch(NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Integer");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an array of Integers for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Integer[].
-     */
-    public Integer[] getIntObjects(String name)
-    {
-        Integer[] result = null;
-        String value[] = getStrings(convert(name));
-        if (value != null)
-        {
-            result = new Integer[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Integer.valueOf(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Integer");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a long for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A long.
-     */
-    public long getLong(String name, long defaultValue)
-    {
-        long result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = Long.valueOf(value).longValue();
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Long");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a long for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A long.
-     */
-    public long getLong(String name)
-    {
-        return getLong(name, 0);
-    }
-
-    /**
-     * Return an array of longs for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A long[].
-     */
-    public long[] getLongs(String name)
-    {
-        long[] result = null;
-        String value[] = getStrings(name);
-        if (value != null)
-        {
-            result = new long[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Long.parseLong(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Long");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return an array of Longs for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Long[].
-     */
-    public Long[] getLongObjects(String name)
-    {
-        Long[] result = null;
-        String value[] = getStrings(convert(name));
-        if (value != null)
-        {
-            result = new Long[value.length];
-            for (int i = 0; i < value.length; i++)
-            {
-                if (StringUtils.isNotEmpty(value[i]))
-                {
-                    try
-                    {
-                        result[i] = Long.valueOf(value[i]);
-                    }
-                    catch (NumberFormatException e)
-                    {
-                        logConvertionFailure(name, value[i], "Long");
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a Long for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Long.
-     */
-    public Long getLongObject(String name)
-    {
-        Long result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new Long(value);
-            }
-            catch(NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Long");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a Long for the given name.  If the name does
-     * not exist, return the default value.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A Long.
-     */
-    public Long getLongObject(String name, Long defaultValue)
-    {
-        Long result = getLongObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A byte.
-     */
-    public byte getByte(String name, byte defaultValue)
-    {
-        byte result = defaultValue;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = Byte.valueOf(value).byteValue();
-            }
-            catch (NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Byte");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A byte.
-     */
-    public byte getByte(String name)
-    {
-        return getByte(name, (byte) 0);
-    }
-
-    /**
-     * Return an array of bytes for the given name.  If the name does
-     * not exist, return null. The array is returned according to the
-     * HttpRequest's character encoding.
-     *
-     * @param name A String with the name.
-     * @return A byte[].
-     * @exception UnsupportedEncodingException
-     */
-    public byte[] getBytes(String name)
-            throws UnsupportedEncodingException
-    {
-        byte result[] = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            result = value.getBytes(getCharacterEncoding());
-        }
-        return result;
-    }
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A byte.
-     */
-    public Byte getByteObject(String name, Byte defaultValue)
-    {
-        Byte result = getByteObject(name);
-        return (result==null ? defaultValue : result);
-    }
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A byte.
-     */
-    public Byte getByteObject(String name)
-    {
-        Byte result = null;
-        String value = getString(name);
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                result = new Byte(value);
-            }
-            catch(NumberFormatException e)
-            {
-                logConvertionFailure(name, value, "Byte");
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A String.
-     */
-    public String getString(String name)
-    {
-        String result = null;
-        try
-        {
-            Object value = parameters.get(convert(name));
-            if (value != null)
-            {
-                value = ((String[]) value)[0];
-            }
-            if (value == null || value.equals("null"))
-            {
-                return null;
-            }
-            result = (String) value;
-        }
-        catch (ClassCastException e)
-        {
-            log.fatal("Parameter ("
-                    + name + ") wasn not stored as a String", e);
-        }
-
-        return result;
-    }
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return null. It is the same as the getString() method
-     * however has been added for simplicity when working with
-     * template tools such as Velocity which allow you to do
-     * something like this:
-     *
-     * <code>$data.Parameters.form_variable_name</code>
-     *
-     * @param name A String with the name.
-     * @return A String.
-     */
-    public String get(String name)
-    {
-        return getString(name);
-    }
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return the defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A String.
-     */
-    public String getString(String name, String defaultValue)
-    {
-        String value = getString(name);
-
-        return (StringUtils.isEmpty(value) ? defaultValue : value );
-    }
-
-    /**
-     * Set a parameter to a specific value.
-     *
-     * This is useful if you want your action to override the values
-     * of the parameters for the screen to use.
-     * @param name The name of the parameter.
-     * @param value The value to set.
-     */
-    public void setString(String name, String value)
-    {
-        if (value != null)
-        {
-            parameters.put(convert(name), new String[]{value});
-        }
-    }
-
-    /**
-     * Return an array of Strings for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A String[].
-     */
-    public String[] getStrings(String name)
-    {
-        return (String[]) parameters.get(convert(name));
-    }
-
-    /**
-     * Return an array of Strings for the given name.  If the name
-     * does not exist, return the defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A String[].
-     */
-    public String[] getStrings(String name, String[] defaultValue)
-    {
-        String[] value = getStrings(name);
-
-        return (value == null || value.length == 0)
-            ? defaultValue : value;
-    }
-
-    /**
-     * Set a parameter to a specific value.
-     *
-     * This is useful if you want your action to override the values
-     * of the parameters for the screen to use.
-     * @param name The name of the parameter.
-     * @param values The value to set.
-     */
-    public void setStrings(String name, String[] values)
-    {
-        if (values != null)
-        {
-            parameters.put(convert(name), values);
-        }
-    }
-
-    /**
-     * Return an Object for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Object.
-     */
-    public Object getObject(String name)
-    {
-        return getString(name);
-    }
-
-    /**
-     * Return an array of Objects for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Object[].
-     */
-    public Object[] getObjects(String name)
-    {
-        return getStrings(name);
-    }
-
-    /**
-     * Returns a {@link java.util.Date} object.  String is parsed by supplied
-     * DateFormat.  If the name does not exist or the value could not be
-     * parsed into a date return the defaultValue.
-     *
-     * @param name A String with the name.
-     * @param df A DateFormat.
-     * @param defaultValue The default value.
-     * @return A Date.
-     */
-    public Date getDate(String name, DateFormat df, Date defaultValue)
-    {
-        Date result = defaultValue;
-        String value = getString(name);
-
-        if (StringUtils.isNotEmpty(value))
-        {
-            try
-            {
-                // Reject invalid dates.
-                df.setLenient(false);
-                result = df.parse(value);
-            }
-            catch (ParseException e)
-            {
-                logConvertionFailure(name, value, "Date");
-            }
-        }
-
-        return result;
-    }
-
-    /**
-     * Returns a {@link java.util.Date} object.  If there are DateSelector or
-     * TimeSelector style parameters then these are used.  If not and there
-     * is a parameter 'name' then this is parsed by DateFormat.  If the
-     * name does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Date.
-     */
-    public Date getDate(String name)
-    {
-        Date date = null;
-
-        if (containsDateSelectorKeys(name))
-        {
-            try
-            {
-                Calendar cal = new GregorianCalendar(
-                        getInt(name + DateSelector.YEAR_SUFFIX),
-                        getInt(name + DateSelector.MONTH_SUFFIX),
-                        getInt(name + DateSelector.DAY_SUFFIX));
-
-                // Reject invalid dates.
-                cal.setLenient(false);
-                date = cal.getTime();
-            }
-            catch (IllegalArgumentException e)
-            {
-                logConvertionFailure(name, "n/a", "Date");
-            }
-        }
-        else if (containsTimeSelectorKeys(name))
-        {
-            try
-            {
-                String ampm = getString(name + TimeSelector.AMPM_SUFFIX);
-                int hour = getInt(name + TimeSelector.HOUR_SUFFIX);
-
-                // Convert from 12 to 24hr format if appropriate
-                if (ampm != null)
-                {
-                    if (hour == 12)
-                    {
-                        hour = (Integer.parseInt(ampm) == Calendar.PM) ? 12 : 0;
-                    }
-                    else if (Integer.parseInt(ampm) == Calendar.PM)
-                    {
-                        hour += 12;
-                    }
-                }
-                Calendar cal = new GregorianCalendar(1, 1, 1,
-                        hour,
-                        getInt(name + TimeSelector.MINUTE_SUFFIX),
-                        getInt(name + TimeSelector.SECOND_SUFFIX));
-
-                // Reject invalid dates.
-                cal.setLenient(false);
-                date = cal.getTime();
-            }
-            catch (IllegalArgumentException e)
-            {
-                logConvertionFailure(name, "n/a", "Date");
-            }
-        }
-        else
-        {
-            DateFormat df = DateFormat.getDateInstance();
-            date = getDate(name, df, null);
-        }
-
-        return date;
-    }
-
-    /**
-     * Returns a {@link java.util.Date} object.  String is parsed by supplied
-     * DateFormat.  If the name does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @param df A DateFormat.
-     * @return A Date.
-     */
-    public Date getDate(String name, DateFormat df)
-    {
-        return getDate(name, df, null);
-    }
-
-    /**
-     * Uses bean introspection to set writable properties of bean from
-     * the parameters, where a (case-insensitive) name match between
-     * the bean property and the parameter is looked for.
-     *
-     * @param bean An Object.
-     * @exception Exception a generic exception.
-     */
-    public void setProperties(Object bean) throws Exception
-    {
-        Class beanClass = bean.getClass();
-        PropertyDescriptor[] props
-                = Introspector.getBeanInfo(beanClass).getPropertyDescriptors();
-
-        for (int i = 0; i < props.length; i++)
-        {
-            String propname = props[i].getName();
-            Method setter = props[i].getWriteMethod();
-            if (setter != null &&
-                    (containsKey(propname) ||
-                    containsDateSelectorKeys(propname) ||
-                    containsTimeSelectorKeys(propname)))
-            {
-                setProperty(bean, props[i]);
-            }
-        }
-    }
-
-    /**
-     * Simple method that attempts to get a textual representation of
-     * this object's name/value pairs.  String[] handling is currently
-     * a bit rough.
-     *
-     * @return A textual representation of the parsed name/value pairs.
-     */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer();
-        for (Iterator iter = keySet().iterator(); iter.hasNext();)
-        {
-            String name = (String) iter.next();
-            try
-            {
-                sb.append('{');
-                sb.append(name);
-                sb.append('=');
-                String[] params = this.getStrings(name);
-                if (params.length <= 1)
-                {
-                    sb.append(params[0]);
-                }
-                else
-                {
-                    for (int i = 0; i < params.length; i++)
-                    {
-                        if (i != 0)
-                        {
-                            sb.append(", ");
-                        }
-                        sb.append('[')
-                                .append(params[i])
-                                .append(']');
-                    }
-                }
-                sb.append("}\n");
-            }
-            catch (Exception ee)
-            {
-                try
-                {
-                    sb.append('{');
-                    sb.append(name);
-                    sb.append('=');
-                    sb.append("ERROR?");
-                    sb.append("}\n");
-                }
-                catch (Exception eee)
-                {
-                }
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Set the property 'prop' in the bean to the value of the
-     * corresponding parameters.  Supports all types supported by
-     * getXXX methods plus a few more that come for free because
-     * primitives have to be wrapped before being passed to invoke
-     * anyway.
-     *
-     * @param bean An Object.
-     * @param prop A PropertyDescriptor.
-     * @exception Exception a generic exception.
-     */
-    protected void setProperty(Object bean,
-                               PropertyDescriptor prop)
-            throws Exception
-    {
-        if (prop instanceof IndexedPropertyDescriptor)
-        {
-            throw new Exception(prop.getName() +
-                    " is an indexed property (not supported)");
-        }
-
-        Method setter = prop.getWriteMethod();
-        if (setter == null)
-        {
-            throw new Exception(prop.getName() +
-                    " is a read only property");
-        }
-
-        Class propclass = prop.getPropertyType();
-        Object[] args = {null};
-
-        if (propclass == String.class)
-        {
-            args[0] = getString(prop.getName());
-        }
-        else if (propclass == Integer.class || propclass == Integer.TYPE)
-        {
-            args[0] = getIntObject(prop.getName());
-        }
-        else if (propclass == Long.class || propclass == Long.TYPE)
-        {
-            args[0] = new Long(getLong(prop.getName()));
-        }
-        else if (propclass == Boolean.class || propclass == Boolean.TYPE)
-        {
-            args[0] = getBooleanObject(prop.getName());
-        }
-        else if (propclass == Double.class || propclass == Double.TYPE)
-        {
-            args[0] = new Double(getDouble(prop.getName()));
-        }
-        else if (propclass == BigDecimal.class)
-        {
-            args[0] = getBigDecimal(prop.getName());
-        }
-        else if (propclass == String[].class)
-        {
-            args[0] = getStrings(prop.getName());
-        }
-        else if (propclass == Object.class)
-        {
-            args[0] = getObject(prop.getName());
-        }
-        else if (propclass == int[].class)
-        {
-            args[0] = getInts(prop.getName());
-        }
-        else if (propclass == Integer[].class)
-        {
-            args[0] = getIntObjects(prop.getName());
-        }
-        else if (propclass == Date.class)
-        {
-            args[0] = getDate(prop.getName());
-        }
-        else
-        {
-            throw new Exception("property "
-                    + prop.getName()
-                    + " is of unsupported type "
-                    + propclass.toString());
-        }
-
-        setter.invoke(bean, args);
-    }
-
-    /**
-     * Writes a log message about a convertion failure.
-     *
-     * @param paramName name of the parameter which could not be converted
-     * @param value value of the parameter
-     * @param type target data type.
-     */
-    private void logConvertionFailure(String paramName,
-                                      String value, String type)
-    {
-        log.warn("Parameter (" + paramName
-                + ") with value of ("
-                + value + ") could not be converted to a " + type);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/CSVParser.java b/src/java/org/apache/turbine/util/parser/CSVParser.java
deleted file mode 100644
index 4af6628..0000000
--- a/src/java/org/apache/turbine/util/parser/CSVParser.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-import java.io.StreamTokenizer;
-import java.util.List;
-
-/**
- * CSVParser is used to parse a stream with comma-separated values and
- * generate ParameterParser objects which can be used to
- * extract the values in the desired type.
- *
- * <p>The class extends the abstract class DataStreamParser and implements
- * initTokenizer with suitable values for CSV files to provide this
- * functionality.
- *
- * <p>The class (indirectly through DataStreamParser) implements the
- * java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $csvfile)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- */
-public class CSVParser extends DataStreamParser
-{
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from. The column headers must be set
-     * independently either explicitly, or by reading the first line
-     * of the CSV values.
-     *
-     * @param in the input reader.
-     */
-    public CSVParser(Reader in)
-    {
-        super(in, null, null);
-    }
-
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from, and a list of column names.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     */
-    public CSVParser(Reader in, List columnNames)
-    {
-        super(in, columnNames, null);
-    }
-
-    /**
-     * Create a new CSVParser instance. Requires a Reader to read the
-     * comma-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public CSVParser(Reader in, List columnNames, String characterEncoding)
-    {
-        super(in, columnNames, characterEncoding);
-    }
-
-    /**
-     * Initialize the StreamTokenizer instance used to read the lines
-     * from the input reader.
-     * It is now only needed to set the fieldSeparator
-     */
-    protected void initTokenizer(StreamTokenizer tokenizer)
-    {
-        // everything is default so let's call super
-        super.initTokenizer(tokenizer);
-        // set the field separator to comma
-        super.setFieldSeparator(',');
-
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/CookieParser.java b/src/java/org/apache/turbine/util/parser/CookieParser.java
deleted file mode 100644
index 9f205e2..0000000
--- a/src/java/org/apache/turbine/util/parser/CookieParser.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.util.uri.URI;
-
-/**
- * CookieParser is an interface to a utility to to get and set values
- * of Cookies on the Client Browser. You can use CookieParser to convert
- * Cookie values to various types or to set Bean values with setParameters().
- * Servlet Spec for more information on Cookies.
- * <p>
- * Use set() or unset() to Create or Destroy Cookies.
- * <p>
- * NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * CookieParser cp = data.getCookies();
- * cp.add("ERROR",1);
- * cp.add("eRrOr",2);
- * int result = cp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @version $Id$
- */
-public interface CookieParser
-        extends ValueParser
-{
-    int AGE_SESSION = -1;
-    int AGE_DELETE = 0;
-
-    /**
-     * Gets the Request Object for this parser.
-     *
-     * @return the HttpServletRequest or null.
-     */
-    HttpServletRequest getRequest();
-
-    /**
-     * Sets Request and Response to be parsed.
-     *
-     * All previous cookies will be cleared.
-     *
-     * @param request The http request from the servlet
-     * @param response The http reponse from the servlet
-     */
-    void setData(HttpServletRequest request,
-            HttpServletResponse response);
-
-    /**
-     * Get the Path where cookies will be stored
-     */
-    URI getCookiePath();
-
-    /**
-     * Set the path for cookie storage
-     */
-    void setCookiePath(URI path);
-
-    /**
-     * Set a cookie that will be stored on the client for
-     * the duration of the session.
-     */
-    void set(String name, String value);
-
-    /**
-     * Set a persisten cookie on the client that will expire
-     * after a maximum age (given in seconds).
-     */
-    void set(String name, String value, int seconds_age);
-
-    /**
-     * Remove a previously set cookie from the client machine.
-     */
-    void unset(String name);
-}
diff --git a/src/java/org/apache/turbine/util/parser/DataStreamParser.java b/src/java/org/apache/turbine/util/parser/DataStreamParser.java
deleted file mode 100644
index e8ffde9..0000000
--- a/src/java/org/apache/turbine/util/parser/DataStreamParser.java
+++ /dev/null
@@ -1,403 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StreamTokenizer;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.NoSuchElementException;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * DataStreamParser is used to parse a stream with a fixed format and
- * generate ValueParser objects which can be used to extract the values
- * in the desired type.
- *
- * <p>The class itself is abstract - a concrete subclass which implements
- * the initTokenizer method such as CSVParser or TSVParser is required
- * to use the functionality.
- *
- * <p>The class implements the java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $datastream)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- */
-public abstract class DataStreamParser implements Iterator
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DataStreamParser.class);
-
-    /**
-     * Conditional compilation flag.
-     */
-    private static final boolean DEBUG = false;
-
-    /**
-     * The constant for empty fields
-     */
-    protected static final String EMPTYFIELDNAME = "UNKNOWNFIELD";
-
-    /**
-     * The list of column names.
-     */
-    private List columnNames;
-
-    /**
-     * The stream tokenizer for reading values from the input reader.
-     */
-    private StreamTokenizer tokenizer;
-
-    /**
-     * The parameter parser holding the values of columns for the current line.
-     */
-    private ValueParser lineValues;
-
-    /**
-     * Indicates whether or not the tokenizer has read anything yet.
-     */
-    private boolean neverRead = true;
-
-    /**
-     * The character encoding of the input
-     */
-    private String characterEncoding;
-
-    /**
-     * The fieldseperator, which can be almost any char
-     */
-    private char fieldSeparator;
-
-    /**
-     * Create a new DataStreamParser instance. Requires a Reader to read the
-     * comma-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public DataStreamParser(Reader in, List columnNames,
-                            String characterEncoding)
-    {
-        this.columnNames = columnNames;
-        this.characterEncoding = characterEncoding;
-
-        if (this.characterEncoding == null)
-        {
-            // try and get the characterEncoding from the reader
-            this.characterEncoding = "US-ASCII";
-            try
-            {
-                this.characterEncoding = ((InputStreamReader) in).getEncoding();
-            }
-            catch (ClassCastException e)
-            {
-            }
-        }
-
-        tokenizer = new StreamTokenizer(new BufferedReader(in));
-        initTokenizer(tokenizer);
-    }
-
-    /**
-     * Initialize the StreamTokenizer instance used to read the lines
-     * from the input reader. This must be implemented in subclasses to
-     * set up other tokenizing properties.
-     *
-     * @param tokenizer the tokenizer to adjust
-     */
-    protected void initTokenizer(StreamTokenizer tokenizer)
-    {
-        // set all numeric characters as ordinary characters
-        // (switches off number parsing)
-        tokenizer.ordinaryChars('0', '9');
-        tokenizer.ordinaryChars('-', '-');
-        tokenizer.ordinaryChars('.', '.');
-
-        // leave out the comma sign (,), we need it for empty fields
-
-        tokenizer.wordChars(' ', Integer.MAX_VALUE);
-
-        // and  set the quote mark as the quoting character
-        tokenizer.quoteChar('"');
-
-        // and finally say that end of line is significant
-        tokenizer.eolIsSignificant(true);
-    }
-
-    /**
-     * This method must be called to setup the field seperator
-     * @param fieldSeparator the char which separates the fields
-     */
-    public void setFieldSeparator(char fieldSeparator)
-    {
-        this.fieldSeparator = fieldSeparator;
-        // make this field also an ordinary char by default.
-        tokenizer.ordinaryChar(fieldSeparator);
-    }
-
-    /**
-     * Set the list of column names explicitly.
-     *
-     * @param columnNames A list of column names.
-     */
-    public void setColumnNames(List columnNames)
-    {
-        this.columnNames = columnNames;
-    }
-
-    /**
-     * Read the list of column names from the input reader using the
-     * tokenizer. If fieldNames are empty, we use the current fieldNumber
-     * + the EMPTYFIELDNAME to make one up.
-     *
-     * @exception IOException an IOException occurred.
-     */
-    public void readColumnNames()
-            throws IOException
-    {
-        columnNames = new ArrayList();
-        int lastTtype = 0;
-        int fieldCounter = 1;
-
-        neverRead = false;
-        tokenizer.nextToken();
-        while (tokenizer.ttype == StreamTokenizer.TT_WORD || tokenizer.ttype == StreamTokenizer.TT_EOL
-                || tokenizer.ttype == '"' || tokenizer.ttype == fieldSeparator)
-        {
-            if (tokenizer.ttype != fieldSeparator && tokenizer.ttype != StreamTokenizer.TT_EOL)
-            {
-                columnNames.add(tokenizer.sval);
-                fieldCounter++;
-            }
-            else if (tokenizer.ttype == fieldSeparator && lastTtype == fieldSeparator)
-            {
-                // we have an empty field name
-                columnNames.add(EMPTYFIELDNAME + fieldCounter);
-                fieldCounter++;
-            }
-            else if (lastTtype == fieldSeparator && tokenizer.ttype == StreamTokenizer.TT_EOL)
-            {
-                columnNames.add(EMPTYFIELDNAME + fieldCounter);
-                break;
-            }
-            else if (tokenizer.ttype == StreamTokenizer.TT_EOL)
-            {
-                break;
-            }
-            lastTtype = tokenizer.ttype;
-            tokenizer.nextToken();
-        }
-    }
-
-    /**
-     * Determine whether a further row of values exists in the input.
-     *
-     * @return true if the input has more rows.
-     * @exception IOException an IOException occurred.
-     */
-    public boolean hasNextRow()
-            throws IOException
-    {
-        // check for end of line ensures that an empty last line doesn't
-        // give a false positive for hasNextRow
-        if (neverRead || tokenizer.ttype == StreamTokenizer.TT_EOL)
-        {
-            tokenizer.nextToken();
-            tokenizer.pushBack();
-            neverRead = false;
-        }
-        return tokenizer.ttype != StreamTokenizer.TT_EOF;
-    }
-
-    /**
-     * Returns a ValueParser object containing the next row of values.
-     *
-     * @return a ValueParser object.
-     * @exception IOException an IOException occurred.
-     * @exception NoSuchElementException there are no more rows in the input.
-     */
-    public ValueParser nextRow()
-            throws IOException, NoSuchElementException
-    {
-        if (!hasNextRow())
-        {
-            throw new NoSuchElementException();
-        }
-
-        if (lineValues == null)
-        {
-            lineValues = new BaseValueParser(characterEncoding);
-        }
-        else
-        {
-            lineValues.clear();
-        }
-
-        Iterator it = columnNames.iterator();
-        tokenizer.nextToken();
-        while (tokenizer.ttype == StreamTokenizer.TT_WORD
-                || tokenizer.ttype == '"' || tokenizer.ttype == fieldSeparator)
-        {
-            int lastTtype = 0;
-            // note this means that if there are more values than
-            // column names, the extra values are discarded.
-            if (it.hasNext())
-            {
-                String colname = it.next().toString();
-                String colval = tokenizer.sval;
-                if (tokenizer.ttype != fieldSeparator && lastTtype != fieldSeparator)
-                {
-                    if (DEBUG)
-                    {
-                        log.debug("DataStreamParser.nextRow(): " +
-                                colname + "=" + colval);
-                    }
-                    lineValues.add(colname, colval);
-                }
-                else if (tokenizer.ttype == fieldSeparator && lastTtype != fieldSeparator)
-                {
-                    lastTtype = tokenizer.ttype;
-                    tokenizer.nextToken();
-                    if (tokenizer.ttype != fieldSeparator && tokenizer.sval != null)
-                    {
-                        lineValues.add(colname, tokenizer.sval);
-                    }
-                    else if (tokenizer.ttype == StreamTokenizer.TT_EOL)
-                    {
-                        tokenizer.pushBack();
-                    }
-                }
-            }
-            tokenizer.nextToken();
-        }
-
-        return lineValues;
-    }
-
-    /**
-     * Determine whether a further row of values exists in the input.
-     *
-     * @return true if the input has more rows.
-     */
-    public boolean hasNext()
-    {
-        boolean hasNext = false;
-
-        try
-        {
-            hasNext = hasNextRow();
-        }
-        catch (IOException e)
-        {
-            log.error("IOException in CSVParser.hasNext", e);
-        }
-
-        return hasNext;
-    }
-
-    /**
-     * Returns a ValueParser object containing the next row of values.
-     *
-     * @return a ValueParser object as an Object.
-     * @exception NoSuchElementException there are no more rows in the input
-     *                                   or an IOException occurred.
-     */
-    public Object next()
-            throws NoSuchElementException
-    {
-        Object nextRow = null;
-
-        try
-        {
-            nextRow = nextRow();
-        }
-        catch (IOException e)
-        {
-            log.error("IOException in CSVParser.next", e);
-            throw new NoSuchElementException();
-        }
-
-        return nextRow;
-    }
-
-    /**
-     * The optional Iterator.remove method is not supported.
-     *
-     * @exception UnsupportedOperationException the operation is not supported.
-     */
-    public void remove()
-            throws UnsupportedOperationException
-    {
-        throw new UnsupportedOperationException();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/DefaultCookieParser.java b/src/java/org/apache/turbine/util/parser/DefaultCookieParser.java
deleted file mode 100644
index 52e7813..0000000
--- a/src/java/org/apache/turbine/util/parser/DefaultCookieParser.java
+++ /dev/null
@@ -1,263 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.Cookie;
-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.turbine.util.RunData;
-import org.apache.turbine.util.pool.Recyclable;
-import org.apache.turbine.util.uri.DataURI;
-import org.apache.turbine.util.uri.URI;
-
-/**
- * CookieParser is used to get and set values of Cookies on the Client
- * Browser.  You can use CookieParser to convert Cookie values to
- * various types or to set Bean values with setParameters(). See the
- * Servlet Spec for more information on Cookies.
- * <p>
- * Use set() or unset() to Create or Destroy Cookies.
- * <p>
- * NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * CookieParser cp = data.getCookies();
- * cp.add("ERROR",1);
- * cp.add("eRrOr",2);
- * int result = cp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:leon@opticode.co.za">Leon Messerschmidt</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DefaultCookieParser
-        extends BaseValueParser
-        implements CookieParser, Recyclable
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DefaultCookieParser.class);
-
-    /** Internal Run Data object containing the parameters to parse */
-    private RunData data = null;
-
-    /** Just like Fulcrum, we actually use the Request and response objects */
-    private HttpServletRequest request;
-
-    /** Just like Fulcrum, we actually use the Request and response objects */
-    private HttpServletResponse response;
-
-    /** The cookie path. */
-    private URI cookiePath = null;
-
-    /**
-     * Constructs a new CookieParser.
-     */
-    public DefaultCookieParser()
-    {
-        super();
-    }
-
-    /**
-     * Disposes the parser.
-     */
-    public void dispose()
-    {
-        this.data = null;
-        this.cookiePath = null;
-        this.request = null;
-        this.response = null;
-        super.dispose();
-    }
-
-    /**
-     * Gets the Request Object for this parser.
-     *
-     * @return the HttpServletRequest or null.
-     */
-    public HttpServletRequest getRequest()
-    {
-        return request;
-    }
-
-    /**
-     * Sets the RunData to be parsed. This is a convenience method to
-     * set the request and response from the RunData object. It is
-     * equivalent to
-     *
-     * <pre>
-     *  setData(data.getRequest(), data.getResponse());
-     * </pre>
-     *
-     * All previous cookies will be cleared.
-     *
-     * @param data the RunData object.
-     */
-    public void setRunData(RunData data)
-    {
-        this.data = data;
-        setData(data.getRequest(), data.getResponse());
-    }
-
-    /**
-     * Sets Request and Response to be parsed.
-     * <p>
-     * All previous cookies will be cleared.
-     *
-     * @param request The http request from the servlet
-     * @param response The http reponse from the servlet
-     */
-    public void setData (HttpServletRequest request,
-                         HttpServletResponse response)
-    {
-        clear();
-
-        String enc = request.getCharacterEncoding();
-        setCharacterEncoding(enc != null ? enc : "US-ASCII");
-
-        cookiePath = new DataURI(data);
-
-        Cookie[] cookies = request.getCookies();
-
-        int cookiesCount = (cookies != null) ? cookies.length : 0;
-
-        log.debug ("Number of Cookies: " + cookiesCount);
-
-        for (int i = 0; i < cookiesCount; i++)
-        {
-            String name = convert (cookies[i].getName());
-            String value = cookies[i].getValue();
-            log.debug("Adding " + name + "=" + value);
-            add(name, value);
-        }
-
-        this.request = request;
-        this.response = response;
-    }
-
-    /**
-     * Get the Path where cookies will be stored
-     *
-     * @return path for cookie storage
-     */
-    public URI getCookiePath()
-    {
-        return cookiePath;
-    }
-
-    /**
-     * Set the path for cookie storage
-     *
-     * @param cookiePath path for cookie storage
-     */
-    public void setCookiePath(URI cookiePath)
-    {
-        this.cookiePath = cookiePath;
-    }
-
-    /**
-     * Set a cookie that will be stored on the client for
-     * the duration of the session.
-     *
-     * @param name name of the cookie
-     * @param value value of the cookie
-     */
-    public void set(String name, String value)
-    {
-        set(name, value, AGE_SESSION);
-    }
-
-    /**
-     * Set a persisten cookie on the client that will expire
-     * after a maximum age (given in seconds).
-     *
-     * @param name name of the cookie
-     * @param value value of the cookie
-     * @param seconds_age max age of the cookie in seconds
-     */
-    public void set(String name, String value, int seconds_age)
-    {
-        if (response == null)
-        {
-            throw new IllegalStateException("Servlet response not available");
-        }
-
-        Cookie cookie = new Cookie(name, value);
-        cookie.setMaxAge(seconds_age);
-        cookie.setPath(cookiePath.getContextPath()+cookiePath.getScriptName());
-        response.addCookie (cookie);
-    }
-
-    /**
-     * Remove a previously set cookie from the client machine.
-     *
-     * @param name name of the cookie
-     */
-    public void unset(String name)
-    {
-        set(name, " ", AGE_DELETE);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/DefaultParameterParser.java b/src/java/org/apache/turbine/util/parser/DefaultParameterParser.java
deleted file mode 100644
index 6db5011..0000000
--- a/src/java/org/apache/turbine/util/parser/DefaultParameterParser.java
+++ /dev/null
@@ -1,385 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URLDecoder;
-
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.StringTokenizer;
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.FileItem;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.upload.TurbineUpload;
-import org.apache.turbine.services.upload.UploadService;
-
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.util.pool.Recyclable;
-
-/**
- * DefaultParameterParser is a utility object to handle parsing and
- * retrieving the data passed via the GET/POST/PATH_INFO arguments.
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * ParameterParser pp = data.getParameters();
- * pp.add("ERROR",1);
- * pp.add("eRrOr",2);
- * int result = pp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- * 
- * Note:  In the jakarta-turbine-2 codebase things look much updated for parsing.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DefaultParameterParser
-    extends BaseValueParser
-    implements ParameterParser, Recyclable
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(DefaultParameterParser.class);
-
-    /** The servlet request to parse. */
-    private HttpServletRequest request = null;
-
-    /** The raw data of a file upload. */
-    private byte[] uploadData = null;
-
-    /** Map of request parameters to FileItem[]'s */
-    private Map fileParameters = new HashMap();
-
-    /** Turbine Upload Service reference */
-    private static UploadService uploadService = null;
-
-    /** Do we have an upload Service? */
-    private static boolean uploadServiceIsAvailable = false;
-
-    /**
-     * Create a new empty instance of ParameterParser.  Uses the
-     * default character encoding (US-ASCII).
-     *
-     * <p>To add name/value pairs to this set of parameters, use the
-     * <code>add()</code> methods.
-     */
-    public DefaultParameterParser()
-    {
-        super();
-        configureUploadService();
-    }
-
-    /**
-     * Create a new empty instance of ParameterParser. Takes a
-     * character encoding name to use when converting strings to
-     * bytes.
-     *
-     * <p>To add name/value pairs to this set of parameters, use the
-     * <code>add()</code> methods.
-     *
-     * @param characterEncoding The character encoding of strings.
-     */
-    public DefaultParameterParser(String characterEncoding)
-    {
-        super (characterEncoding);
-        configureUploadService();
-    }
-
-    /**
-     * Checks for availability of the Upload Service. We do this
-     * check only once at Startup, because the getService() call
-     * is really expensive and we don't have to run it every time
-     * we process a request.
-     */
-    private void configureUploadService()
-    {
-        uploadServiceIsAvailable = TurbineUpload.isAvailable();
-        if (uploadServiceIsAvailable)
-        {
-            uploadService = TurbineUpload.getService();
-        }
-    }
-
-    /**
-     * Disposes the parser.
-     */
-    public void dispose()
-    {
-        this.request = null;
-        this.uploadData = null;
-        this.fileParameters.clear();
-        super.dispose();
-    }
-
-    /**
-     * Gets the parsed servlet request.
-     *
-     * @return the parsed servlet request or null.
-     */
-    public HttpServletRequest getRequest()
-    {
-        return this.request;
-    }
-
-    /**
-     * Sets the servlet request to be parser.  This requires a
-     * valid HttpServletRequest object.  It will attempt to parse out
-     * the GET/POST/PATH_INFO data and store the data into a Map.
-     * There are convenience methods for retrieving the data as a
-     * number of different datatypes.  The PATH_INFO data must be a
-     * URLEncoded() string.
-     * <p>
-     * To add name/value pairs to this set of parameters, use the
-     * <code>add()</code> methods.
-     *
-     * @param request An HttpServletRequest.
-     */
-    public void setRequest(HttpServletRequest request)
-    {
-        clear();
-
-        uploadData = null;
-
-        String enc = request.getCharacterEncoding();
-        setCharacterEncoding(enc != null ? enc : "US-ASCII");
-
-        // String object re-use at its best.
-        String tmp = null;
-
-        tmp = request.getHeader("Content-type");
-
-        if (uploadServiceIsAvailable
-                && uploadService.getAutomatic()
-                && tmp != null
-                && tmp.startsWith("multipart/form-data"))
-        {
-            log.debug("Running the Turbine Upload Service");
-            try
-            {
-                TurbineUpload.parseRequest(request, this);
-            }
-            catch (TurbineException e)
-            {
-                log.error("File upload failed", e);
-            }
-        }
-
-        for (Enumeration names = request.getParameterNames();
-             names.hasMoreElements();)
-        {
-            tmp = (String) names.nextElement();
-            add(convert(tmp),
-                    request.getParameterValues(tmp));
-        }
-
-        // Also cache any pathinfo variables that are passed around as
-        // if they are query string data.
-        try
-        {
-            StringTokenizer st =
-                    new StringTokenizer(request.getPathInfo(), "/");
-            boolean isNameTok = true;
-            String pathPart = null;
-            while (st.hasMoreTokens())
-            {
-                if (isNameTok)
-                {
-                    tmp = URLDecoder.decode(st.nextToken());
-                    isNameTok = false;
-                }
-                else
-                {
-                    pathPart = URLDecoder.decode(st.nextToken());
-                    if (tmp.length() > 0)
-                    {
-                        add(convert(tmp), pathPart);
-                    }
-                    isNameTok = true;
-                }
-            }
-        }
-        catch (Exception e)
-        {
-            // If anything goes wrong above, don't worry about it.
-            // Chances are that the path info was wrong anyways and
-            // things that depend on it being right will fail later
-            // and should be caught later.
-        }
-
-        this.request = request;
-
-        if (log.isDebugEnabled())
-        {
-            log.debug("Parameters found in the Request:");
-            for (Iterator it = keySet().iterator(); it.hasNext();)
-            {
-                String key = (String) it.next();
-                log.debug("Key: " + key + " -> " + getString(key));
-            }
-        }
-    }
-
-    /**
-     * Sets the uploadData byte[]
-     *
-     * @param uploadData A byte[] with data.
-     */
-    public void setUploadData(byte[] uploadData)
-    {
-        this.uploadData = uploadData;
-    }
-
-    /**
-     * Gets the uploadData byte[]
-     *
-     * @return uploadData A byte[] with data.
-     */
-    public byte[] getUploadData()
-    {
-        return this.uploadData;
-    }
-
-    /**
-     * Add a FileItem object as a parameters.  If there are any
-     * FileItems already associated with the name, append to the
-     * array.  The reason for this is that RFC 1867 allows multiple
-     * files to be associated with single HTML input element.
-     *
-     * @param name A String with the name.
-     * @param value A FileItem with the value.
-     */
-    public void append(String name, FileItem value)
-    {
-        FileItem[] items = this.getFileItems(name);
-        if (items == null)
-        {
-            items = new FileItem[1];
-            items[0] = value;
-            fileParameters.put(convert(name), items);
-        }
-        else
-        {
-            FileItem[] newItems = new FileItem[items.length + 1];
-            System.arraycopy(items, 0, newItems, 0, items.length);
-            newItems[items.length] = value;
-            fileParameters.put(convert(name), newItems);
-        }
-    }
-
-    /**
-     * Return a FileItem object for the given name.  If the name does
-     * not exist or the object stored is not a FileItem, return null.
-     *
-     * @param name A String with the name.
-     * @return A FileItem.
-     */
-    public FileItem getFileItem(String name)
-    {
-        try
-        {
-            FileItem value = null;
-            Object object = fileParameters.get(convert(name));
-            if (object != null)
-            {
-                value = ((FileItem[]) object)[0];
-            }
-            return value;
-        }
-        catch (ClassCastException e)
-        {
-            log.error("Parameter ("
-                    + name + ") is not an instance of FileItem", e);
-            return null;
-        }
-    }
-
-    /**
-     * Return an array of FileItem objects for the given name.  If the
-     * name does not exist or the object stored is not a FileItem
-     * array, return null.
-     *
-     * @param name A String with the name.
-     * @return A FileItem[].
-     */
-    public FileItem[] getFileItems(String name)
-    {
-        try
-        {
-            return (FileItem[]) fileParameters.get(convert(name));
-        }
-        catch (ClassCastException e)
-        {
-            log.error("Parameter ("
-                    + name + ") is not an instance of FileItem[]", e);
-            return null;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/ParameterParser.java b/src/java/org/apache/turbine/util/parser/ParameterParser.java
deleted file mode 100644
index b3c9c7c..0000000
--- a/src/java/org/apache/turbine/util/parser/ParameterParser.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletRequest;
-
-import org.apache.commons.fileupload.FileItem;
-
-/**
- * ParameterParser is an interface to a utility to handle parsing and
- * retrieving the data passed via the GET/POST/PATH_INFO arguments.
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * <pre>
- * ParameterParser pp = data.getParameters();
- * pp.add("ERROR",1);
- * pp.add("eRrOr",2);
- * int result = pp.getInt("ERROR");
- * </pre>
- *
- * In the above example, result is 2.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface ParameterParser
-        extends ValueParser
-{
-    /**
-     * Gets the parsed servlet request.
-     *
-     * @return the parsed servlet request or null.
-     */
-    HttpServletRequest getRequest();
-
-    /**
-     * Sets the servlet request to be parser.  This requires a
-     * valid HttpServletRequest object.  It will attempt to parse out
-     * the GET/POST/PATH_INFO data and store the data into a Map.
-     * There are convenience methods for retrieving the data as a
-     * number of different datatypes.  The PATH_INFO data must be a
-     * URLEncoded() string.
-     *
-     * <p>To add name/value pairs to this set of parameters, use the
-     * <code>add()</code> methods.
-     *
-     * @param req An HttpServletRequest.
-     */
-    void setRequest(HttpServletRequest req);
-
-    /**
-     * Sets the uploadData byte[]
-     *
-     * @param uploadData A byte[] with data.
-     */
-    void setUploadData(byte[] uploadData);
-
-    /**
-     * Gets the uploadData byte[]
-     *
-     * @return uploadData A byte[] with data.
-     */
-    byte[] getUploadData();
-
-    /**
-     * Add a FileItem object as a parameters.  If there are any
-     * FileItems already associated with the name, append to the
-     * array.  The reason for this is that RFC 1867 allows multiple
-     * files to be associated with single HTML input element.
-     *
-     * @param name A String with the name.
-     * @param value A FileItem with the value.
-     */
-    void append(String name, FileItem value);
-
-    /**
-     * Return a FileItem object for the given name.  If the name does
-     * not exist or the object stored is not a FileItem, return null.
-     *
-     * @param name A String with the name.
-     * @return A FileItem.
-     */
-    FileItem getFileItem(String name);
-
-    /**
-     * Return an array of FileItem objects for the given name.  If the
-     * name does not exist or the object stored is not a FileItem
-     * array, return null.
-     *
-     * @param name A String with the name.
-     * @return A FileItem[].
-     */
-    FileItem[] getFileItems(String name);
-}
diff --git a/src/java/org/apache/turbine/util/parser/ParserUtils.java b/src/java/org/apache/turbine/util/parser/ParserUtils.java
deleted file mode 100644
index 59cf945..0000000
--- a/src/java/org/apache/turbine/util/parser/ParserUtils.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.services.TurbineServices;
-
-/**
- * Static helpers for folding fields to upper or lower case
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class ParserUtils
-{
-    /** Property for setting the URL folding value */
-    public static final String URL_CASE_FOLDING_KEY = "url.case.folding";
-
-    /** No folding */
-    public static final String URL_CASE_FOLDING_NONE_VALUE  = "none";
-
-    /** Fold to lower case */
-    public static final String URL_CASE_FOLDING_LOWER_VALUE = "lower";
-
-    /** Fold to upper case */
-    public static final String URL_CASE_FOLDING_UPPER_VALUE = "upper";
-
-    /** No folding set */
-    private static final int URL_CASE_FOLDING_UNSET = 0;
-
-    /** Folding set to "no folding" */
-    public static final int URL_CASE_FOLDING_NONE  = 1;
-
-    /** Folding set to "lowercase" */
-    public static final int URL_CASE_FOLDING_LOWER = 2;
-
-    /** Folding set to "uppercase" */
-    public static final int URL_CASE_FOLDING_UPPER = 3;
-
-    /** Logging */
-    private static Log log = LogFactory.getLog(ParserUtils.class);
-
-    /** The folding from the properties */
-    private static int folding = URL_CASE_FOLDING_UNSET;
-
-    /**
-     * Convert a String value according to the url.case.folding property.
-     *
-     * @param value the String to convert
-     *
-     * @return a new String.
-     *
-     */
-    public static String convertAndTrim(String value)
-    {
-        return convertAndTrim(value, getUrlFolding());
-    }
-
-    /**
-     * A static version of the convert method, which
-     * trims the string data and applies the conversion specified in
-     * the property given by URL_CASE_FOLDING.  It returns a new
-     * string so that it does not destroy the value data.
-     *
-     * @param value A String to be processed.
-     * @return A new String converted to lowercase and trimmed.
-     */
-    public static String convertAndTrim(String value, int fold)
-    {
-        String tmp = value.trim();
-
-        switch (fold)
-        {
-        case URL_CASE_FOLDING_NONE:
-            {
-                break;
-            }
-        case URL_CASE_FOLDING_LOWER:
-            {
-                tmp = tmp.toLowerCase();
-                break;
-            }
-        case URL_CASE_FOLDING_UPPER:
-            {
-                tmp = tmp.toUpperCase();
-                break;
-            }
-        default:
-            {
-                log.error("Passed " + fold + " as fold rule, which is illegal!");
-                break;
-            }
-        }
-        return tmp;
-    }
-
-    /**
-     * Gets the folding value from the properties
-     *
-     * @return The current Folding Value
-     */
-    public static int getUrlFolding()
-    {
-        if (folding == URL_CASE_FOLDING_UNSET)
-        {
-            Configuration conf = TurbineServices.getInstance().getConfiguration();
-            String foldString = conf.getString(URL_CASE_FOLDING_KEY,
-                                               URL_CASE_FOLDING_NONE_VALUE).toLowerCase();
-
-            folding = URL_CASE_FOLDING_NONE;
-
-            log.debug("Setting folding from " + foldString);
-            if (StringUtils.isNotEmpty(foldString))
-            {
-                if (foldString.equals(URL_CASE_FOLDING_NONE_VALUE))
-                {
-                    folding = URL_CASE_FOLDING_NONE;
-                }
-                else if (foldString.equals(URL_CASE_FOLDING_LOWER_VALUE))
-                {
-                    folding = URL_CASE_FOLDING_LOWER;
-                }
-                else if (foldString.equals(URL_CASE_FOLDING_UPPER_VALUE))
-                {
-                    folding = URL_CASE_FOLDING_UPPER;
-                }
-                else
-                {
-                    log.error("Got " + foldString + " from " + URL_CASE_FOLDING_KEY + " property, which is illegal!");
-                }
-            }
-        }
-        return folding;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/TSVParser.java b/src/java/org/apache/turbine/util/parser/TSVParser.java
deleted file mode 100644
index 71d4040..0000000
--- a/src/java/org/apache/turbine/util/parser/TSVParser.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Reader;
-import java.io.StreamTokenizer;
-import java.util.List;
-
-/**
- * TSVParser is used to parse a stream with tab-separated values and
- * generate ParameterParser objects which can be used to
- * extract the values in the desired type.
- *
- * <p>The class extends the abstract class DataStreamParser and implements
- * initTokenizer with suitable values for TSV files to provide this
- * functionality.
- *
- * <p>The class (indirectly through DataStreamParser) implements the
- * java.util.Iterator interface for convenience.
- * This allows simple use in a Velocity template for example:
- *
- * <pre>
- * #foreach ($row in $tsvfile)
- *   Name: $row.Name
- *   Description: $row.Description
- * #end
- * </pre>
- *
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- */
-public class TSVParser extends DataStreamParser
-{
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from. The column headers must be set
-     * independently either explicitly, or by reading the first line
-     * of the TSV values.
-     *
-     * @param in the input reader.
-     */
-    public TSVParser(Reader in)
-    {
-        super(in, null, null);
-    }
-
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from, and a list of column names.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     */
-    public TSVParser(Reader in, List columnNames)
-    {
-        super(in, columnNames, null);
-    }
-
-    /**
-     * Create a new TSVParser instance. Requires a Reader to read the
-     * tab-separated values from, a list of column names and a
-     * character encoding.
-     *
-     * @param in the input reader.
-     * @param columnNames a list of column names.
-     * @param characterEncoding the character encoding of the input.
-     */
-    public TSVParser(Reader in, List columnNames, String characterEncoding)
-    {
-        super(in, columnNames, characterEncoding);
-    }
-
-    /**
-     * Initialize the StreamTokenizer instance used to read the lines
-     * from the input reader.
-     * It is now only needed to set the fieldSeparator
-     */
-    protected void initTokenizer(StreamTokenizer tokenizer)
-    {
-        super.initTokenizer(tokenizer);
-        // set the field separator to tabs.
-        super.setFieldSeparator('\t');
-    }
-}
diff --git a/src/java/org/apache/turbine/util/parser/ValueParser.java b/src/java/org/apache/turbine/util/parser/ValueParser.java
deleted file mode 100644
index 8172536..0000000
--- a/src/java/org/apache/turbine/util/parser/ValueParser.java
+++ /dev/null
@@ -1,706 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.UnsupportedEncodingException;
-
-import java.math.BigDecimal;
-
-import java.text.DateFormat;
-
-import java.util.Date;
-import java.util.Set;
-
-
-/**
- * ValueParser is a base interface for classes that need to parse
- * name/value Parameters, for example GET/POST data or Cookies
- * (ParameterParser and CookieParser)
- *
- * <p>NOTE: The name= portion of a name=value pair may be converted
- * to lowercase or uppercase when the object is initialized and when
- * new data is added.  This behaviour is determined by the url.case.folding
- * property in TurbineResources.properties.  Adding a name/value pair may
- * overwrite existing name=value pairs if the names match:
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface ValueParser
-{
-
-    /**
-     * Clear all name/value pairs out of this object.
-     */
-    void clear();
-
-    /**
-     * Set the character encoding that will be used by this ValueParser.
-     */
-    void setCharacterEncoding(String s);
-
-    /**
-     * Get the character encoding that will be used by this ValueParser.
-     */
-    String getCharacterEncoding();
-
-    /**
-     * Trims the string data and applies the conversion specified in
-     * the property given by URL_CASE_FOLDING. It returns a new
-     * string so that it does not destroy the value data.
-     *
-     * @param value A String to be processed.
-     * @return A new String converted to lowercase and trimmed.
-     */
-    String convert(String value);
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A double with the value.
-     */
-    void add(String name, double value);
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value An int with the value.
-     */
-    void add(String name, int value);
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value An Integer with the value.
-     */
-    void add(String name, Integer value);
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A long with the value.
-     */
-    void add(String name, long value);
-
-    /**
-     * Add a name/value pair into this object.
-     *
-     * @param name A String with the name.
-     * @param value A long with the value.
-     */
-    void add(String name, String value);
-
-    /**
-     * Add a String parameter.  If there are any Strings already
-     * associated with the name, append to the array.  This is used
-     * for handling parameters from mulitipart POST requests.
-     *
-     * @param name A String with the name.
-     * @param value A String with the value.
-     */
-    void append(String name, String value);
-
-    /**
-     * Add an array of Strings for a key. This
-     * is simply adding all the elements in the
-     * array one by one.
-     *
-     * @param name A String with the name.
-     * @param value A String Array.
-     */
-    void add(String name, String [] value);
-
-    /**
-     * Removes the named parameter from the contained hashtable. Wraps to the
-     * contained <code>Hashtable.remove()</code>.
-     *
-     *
-     * @return The value that was mapped to the key (a <code>String[]</code>)
-     *         or <code>null</code> if the key was not mapped.
-     */
-    Object remove(String name);
-
-    /**
-     * Determine whether a given key has been inserted.  All keys are
-     * stored in lowercase strings, so override method to account for
-     * this.
-     *
-     * @param key An Object with the key to search for.
-     * @return True if the object is found.
-     */
-    boolean containsKey(Object key);
-
-    /**
-     * Check for existence of key_day, key_month and key_year
-     * parameters (as returned by DateSelector generated HTML).
-     *
-     * @param key A String with the selector name.
-     * @return True if keys are found.
-     */
-    boolean containsDateSelectorKeys(String key);
-
-    /**
-     * Gets the keys.
-     *
-     * @return A <code>Set</code> of the keys.
-     */
-    Set keySet();
-
-    /**
-     * Returns all the available parameter names.
-     *
-     * @return A object array with the keys.
-     */
-    Object[] getKeys();
-
-    /**
-     * Return a boolean for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A boolean.
-     */
-    boolean getBoolean(String name, boolean defaultValue);
-
-    /**
-     * Return a boolean for the given name.  If the name does not
-     * exist, return false.
-     *
-     * @param name A String with the name.
-     * @return A boolean.
-     */
-    boolean getBoolean(String name);
-
-    /**
-     * Returns a Boolean object for the given name.  If the parameter
-     * does not exist or can not be parsed as a boolean, null is returned.
-     * <p>
-     * Valid values for true: true, on, 1, yes<br>
-     * Valid values for false: false, off, 0, no<br>
-     * <p>
-     * The string is compared without reguard to case.
-     *
-     * @param name A String with the name.
-     * @return A Boolean.
-     */
-    Boolean getBooleanObject(String name);
-
-    /**
-     * Returns a Boolean object for the given name.  If the parameter
-     * does not exist or can not be parsed as a boolean, the defaultValue
-     * is returned.
-     * <p>
-     * Valid values for true: true, on, 1, yes<br>
-     * Valid values for false: false, off, 0, no<br>
-     * <p>
-     * The string is compared without reguard to case.
-     *
-     * @param name A String with the name.
-     * @return A Boolean.
-     */
-    Boolean getBooleanObject(String name, Boolean defaultValue);
-
-    /**
-     * Return a double for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A double.
-     */
-    double getDouble(String name, double defaultValue);
-
-    /**
-     * Return a double for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @return A double.
-     */
-    double getDouble(String name);
-
-    /**
-     * Return an array of doubles for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double[].
-     */
-    double[] getDoubles(String name);
-
-    /**
-     * Return a Double for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A double.
-     */
-    Double getDoubleObject(String name, Double defaultValue);
-
-    /**
-     * Return a Double for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double.
-     */
-    Double getDoubleObject(String name);
-
-    /**
-     * Return an array of doubles for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A double[].
-     */
-    Double[] getDoubleObjects(String name);
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A float.
-     */
-    float getFloat(String name, float defaultValue);
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @return A float.
-     */
-    float getFloat(String name);
-
-    /**
-     * Return an array of floats for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A float[].
-     */
-    float[] getFloats(String name);
-
-    /**
-     * Return a Float for the given name.  If the name does not
-     * exist, return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A Float.
-     */
-    Float getFloatObject(String name, Float defaultValue);
-
-    /**
-     * Return a float for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Float.
-     */
-    Float getFloatObject(String name);
-
-    /**
-     * Return an array of floats for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A float[].
-     */
-    Float[] getFloatObjects(String name);
-
-    /**
-     * Return a BigDecimal for the given name.  If the name does not
-     * exist, return 0.0.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A BigDecimal.
-     */
-    BigDecimal getBigDecimal(String name, BigDecimal defaultValue);
-
-    /**
-     * Return a BigDecimal for the given name.  If the name does not
-     * exist, return <code>null</code>.
-     *
-     * @param name A String with the name.
-     * @return A BigDecimal.
-     */
-    BigDecimal getBigDecimal(String name);
-
-    /**
-     * Return an array of BigDecimals for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A BigDecimal[].
-     */
-    BigDecimal[] getBigDecimals(String name);
-
-    /**
-     * Return an int for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return An int.
-     */
-    int getInt(String name, int defaultValue);
-
-    /**
-     * Return an int for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return An int.
-     */
-    int getInt(String name);
-
-    /**
-     * Return an Integer for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return An Integer.
-     */
-    Integer getIntObject(String name, Integer defaultValue);
-
-    /**
-     * Return an Integer for the given name.  If the name does not exist,
-     * return null.
-     *
-     * @param name A String with the name.
-     * @return An Integer.
-     */
-    Integer getIntObject(String name);
-
-    /**
-     * Return an array of ints for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An int[].
-     */
-    int[] getInts(String name);
-
-    /**
-     * Return an array of Integers for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Integer[].
-     */
-    Integer[] getIntObjects(String name);
-
-    /**
-     * Return a long for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A long.
-     */
-    long getLong(String name, long defaultValue);
-
-    /**
-     * Return a long for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A long.
-     */
-    long getLong(String name);
-
-    /**
-     * Return a Long for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A Long.
-     */
-    Long getLongObject(String name, Long defaultValue);
-
-    /**
-     * Return a Long for the given name.  If the name does not exist,
-     * return null.
-     *
-     * @param name A String with the name.
-     * @return A Long.
-     */
-    Long getLongObject(String name);
-
-    /**
-     * Return an array of longs for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A long[].
-     */
-    long[] getLongs(String name);
-
-    /**
-     * Return an array of Longs for the given name.  If the name does
-     * not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Long[].
-     */
-    Long[] getLongObjects(String name);
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A byte.
-     */
-    byte getByte(String name, byte defaultValue);
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A byte.
-     */
-    byte getByte(String name);
-
-    /**
-     * Return an array of bytes for the given name.  If the name does
-     * not exist, return null. The array is returned according to the
-     * HttpRequest's character encoding.
-     *
-     * @param name A String with the name.
-     * @return A byte[].
-     * @exception UnsupportedEncodingException
-     */
-    byte[] getBytes(String name) throws UnsupportedEncodingException;
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A byte.
-     */
-    Byte getByteObject(String name, Byte defaultValue);
-
-    /**
-     * Return a byte for the given name.  If the name does not exist,
-     * return 0.
-     *
-     * @param name A String with the name.
-     * @return A byte.
-     */
-    Byte getByteObject(String name);
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A String.
-     */
-    String getString(String name);
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return null. It is the same as the getString() method
-     * however has been added for simplicity when working with
-     * template tools such as Velocity which allow you to do
-     * something like this:
-     *
-     * <code>$data.Parameters.form_variable_name</code>
-     *
-     * @param name A String with the name.
-     * @return A String.
-     */
-    String get(String name);
-
-    /**
-     * Return a String for the given name.  If the name does not
-     * exist, return the defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A String.
-     */
-    String getString(String name, String defaultValue);
-
-    /**
-     * Set a parameter to a specific value.
-     *
-     * This is useful if you want your action to override the values
-     * of the parameters for the screen to use.
-     * @param name The name of the parameter.
-     * @param value The value to set.
-     */
-    void setString(String name, String value);
-
-    /**
-     * Return an array of Strings for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A String[].
-     */
-    String[] getStrings(String name);
-
-    /**
-     * Return an array of Strings for the given name.  If the name
-     * does not exist, return the defaultValue.
-     *
-     * @param name A String with the name.
-     * @param defaultValue The default value.
-     * @return A String[].
-     */
-    String[] getStrings(String name, String[] defaultValue);
-
-    /**
-     * Set a parameter to a specific value.
-     *
-     * This is useful if you want your action to override the values
-     * of the parameters for the screen to use.
-     * @param name The name of the parameter.
-     * @param values The value to set.
-     */
-    void setStrings(String name, String[] values);
-
-    /**
-     * Return an Object for the given name.  If the name does not
-     * exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Object.
-     */
-    Object getObject(String name);
-
-    /**
-     * Return an array of Objects for the given name.  If the name
-     * does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return An Object[].
-     */
-    Object[] getObjects(String name);
-
-    /**
-     * Returns a java.util.Date object.  String is parsed by supplied
-     * DateFormat.  If the name does not exist, return the
-     * defaultValue.
-     *
-     * @param name A String with the name.
-     * @param df A DateFormat.
-     * @param defaultValue The default value.
-     * @return A Date.
-     */
-    Date getDate(String name, DateFormat df, Date defaultValue);
-
-    /**
-     * Returns a java.util.Date object.  If there are DateSelector
-     * style parameters then these are used.  If not and there is a
-     * parameter 'name' then this is parsed by DateFormat.  If the
-     * name does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @return A Date.
-     */
-    Date getDate(String name);
-
-    /**
-     * Returns a java.util.Date object.  String is parsed by supplied
-     * DateFormat.  If the name does not exist, return null.
-     *
-     * @param name A String with the name.
-     * @param df A DateFormat.
-     * @return A Date.
-     */
-    Date getDate(String name, DateFormat df);
-
-    /**
-     * Uses bean introspection to set writable properties of bean from
-     * the parameters, where a (case-insensitive) name match between
-     * the bean property and the parameter is looked for.
-     *
-     * @param bean An Object.
-     * @exception Exception a generic exception.
-     */
-    void setProperties(Object bean) throws Exception;
-
-    /**
-     * Simple method that attempts to get a toString() representation
-     * of this object.  It doesn't do well with String[]'s though.
-     *
-     * @return A String.
-     */
-    String toString();
-}
diff --git a/src/java/org/apache/turbine/util/parser/package.html b/src/java/org/apache/turbine/util/parser/package.html
deleted file mode 100644
index cbd12fb..0000000
--- a/src/java/org/apache/turbine/util/parser/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Parser for CGI parameters and path info data.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/pool/ArrayCtorRecyclable.java b/src/java/org/apache/turbine/util/pool/ArrayCtorRecyclable.java
deleted file mode 100644
index 497616f..0000000
--- a/src/java/org/apache/turbine/util/pool/ArrayCtorRecyclable.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * An interface for objects that can be pooled and
- * recycled several times by different clients.  This interface
- * presents a recycle method that does not require introspection/reflection.
- *
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public interface ArrayCtorRecyclable extends Recyclable
-{
-    /**
-     * Recycles the object for a new client. Objects implementing
-     * this interface must also provide a matching constructor.
-     * The recycle methods must call their super.
-     */
-    void recycle(Object[] params);
-}
diff --git a/src/java/org/apache/turbine/util/pool/BoundedBuffer.java b/src/java/org/apache/turbine/util/pool/BoundedBuffer.java
deleted file mode 100644
index c4b1e41..0000000
--- a/src/java/org/apache/turbine/util/pool/BoundedBuffer.java
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Efficient array-based bounded buffer class.
- * Adapted from CPJ, chapter 8, which describes design.
- * Originally written by Doug Lea and released into the public domain.
- * <p>[<a href="http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html"> Introduction to this package. </a>] <p>
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class BoundedBuffer
-{
-    /** The default capacity. */
-    public static final int DEFAULT_CAPACITY = 1024;
-
-    protected final Object[] buffer;      // the elements
-
-    protected int takePtr = 0;            // circular indices
-    protected int putPtr = 0;
-
-    protected int usedSlots = 0;          // length
-    protected int emptySlots;             // capacity - length
-
-    /**
-     * Creates a buffer with the given capacity.
-     *
-     * @param capacity the capacity.
-     * @throws IllegalArgumentException if capacity less or equal to zero.
-     */
-    public BoundedBuffer(int capacity)
-            throws IllegalArgumentException
-    {
-        if (capacity <= 0)
-        {
-            throw new IllegalArgumentException(
-                    "Bounded Buffer must have capacity > 0!");
-        }
-
-        buffer = new Object[capacity];
-        emptySlots = capacity;
-    }
-
-    /**
-     * Creates a buffer with the default capacity
-     */
-    public BoundedBuffer()
-    {
-        this(DEFAULT_CAPACITY);
-    }
-
-    /**
-     * Returns the number of elements in the buffer.
-     * This is only a snapshot value, that may change
-     * immediately after returning.
-     *
-     * @return the size.
-     */
-    public synchronized int size()
-    {
-        return usedSlots;
-    }
-
-    /**
-     * Returns the capacity of the buffer.
-     *
-     * @return the capacity.
-     */
-    public int capacity()
-    {
-        return buffer.length;
-    }
-
-    /**
-     * Peeks, but does not remove the top item from the buffer.
-     *
-     * @return the object or null.
-     */
-    public synchronized Object peek()
-    {
-        return (usedSlots > 0)
-                ? buffer[takePtr] : null;
-    }
-
-    /**
-     * Puts an item in the buffer only if there is capacity available.
-     *
-     * @param item the item to be inserted.
-     * @return true if accepted, else false.
-     */
-    public synchronized boolean offer(Object x)
-    {
-        if (x == null)
-        {
-            throw new IllegalArgumentException("Bounded Buffer cannot store a null object");
-        }
-
-        if (emptySlots > 0)
-        {
-            --emptySlots;
-            buffer[putPtr] = x;
-            if (++putPtr >= buffer.length)
-            {
-                putPtr = 0;
-            }
-            usedSlots++;
-            return true;
-        }
-        else
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Polls and removes the top item from the buffer if one is available.
-     *
-     * @return the oldest item from the buffer, or null if the buffer is empty.
-     */
-    public synchronized Object poll()
-    {
-        if (usedSlots > 0)
-        {
-            --usedSlots;
-            Object old = buffer[takePtr];
-            buffer[takePtr] = null;
-            if (++takePtr >= buffer.length)
-            {
-                takePtr = 0;
-            }
-            emptySlots++;
-            return old;
-        }
-        else
-        {
-            return null;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/pool/InitableRecyclable.java b/src/java/org/apache/turbine/util/pool/InitableRecyclable.java
deleted file mode 100644
index 7bd715f..0000000
--- a/src/java/org/apache/turbine/util/pool/InitableRecyclable.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * An interface for objects that can be pooled and recycled several times
- * by different clients.  Pooled objects that implement this interface
- * use no argument ctor and recycle methods.  Initialization is taken
- * care of using the init method.  This is a way to avoid
- * introspection/reflection when pooling an object.
- *
- * @author <a href="mailto:jmcnally@collab.net">John McNally</a>
- * @version $Id$
- */
-public interface InitableRecyclable extends Recyclable
-{
-    /**
-     * This method should be called after retrieving the object from
-     * the pool.
-     */
-    void init(Object initObj) throws TurbineException;
-}
diff --git a/src/java/org/apache/turbine/util/pool/ObjectInputStreamForContext.java b/src/java/org/apache/turbine/util/pool/ObjectInputStreamForContext.java
deleted file mode 100644
index 4c94513..0000000
--- a/src/java/org/apache/turbine/util/pool/ObjectInputStreamForContext.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamClass;
-
-/**
- * A deserialization stream for a specific class loader context.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class ObjectInputStreamForContext extends ObjectInputStream
-{
-    /**
-     * The class loader of the context.
-     */
-    private ClassLoader classLoader;
-
-    /**
-     * Contructs a new object stream for a context.
-     *
-     * @param in the serialized input stream.
-     * @param loader the class loader of the context.
-     * @throws IOException on errors.
-     */
-    public ObjectInputStreamForContext(InputStream in,
-                                       ClassLoader loader)
-            throws IOException
-    {
-        super(in);
-        classLoader = loader;
-    }
-
-    protected Class resolveClass(ObjectStreamClass v)
-            throws IOException,
-            ClassNotFoundException
-    {
-        return classLoader == null ?
-                super.resolveClass(v) : classLoader.loadClass(v.getName());
-    }
-}
diff --git a/src/java/org/apache/turbine/util/pool/Recyclable.java b/src/java/org/apache/turbine/util/pool/Recyclable.java
deleted file mode 100644
index e6b1272..0000000
--- a/src/java/org/apache/turbine/util/pool/Recyclable.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * An interface for objects that can be pooled and
- * recycled several times by different clients.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public interface Recyclable
-{
-    /**
-     * Recycles the object for a new client. Recycle methods with
-     * parameters must be added to implementing object and they will be
-     * automatically called by pool implementations when the object is
-     * taken from the pool for a new client. The parameters must
-     * correspond to the parameters of the constructors of the object.
-     * For new objects, constructors can call their corresponding recycle
-     * methods whenever applicable.
-     * The recycle methods must call their super.
-     */
-    void recycle();
-
-    /**
-     * Disposes the object after use. The method is called
-     * when the object is returned to its pool.
-     * The dispose method must call its super.
-     */
-    void dispose();
-
-    /**
-     * Checks whether the recyclable has been disposed.
-     * @return true, if the recyclable is disposed.
-     */
-    boolean isDisposed();
-}
diff --git a/src/java/org/apache/turbine/util/pool/RecyclableSupport.java b/src/java/org/apache/turbine/util/pool/RecyclableSupport.java
deleted file mode 100644
index f819730..0000000
--- a/src/java/org/apache/turbine/util/pool/RecyclableSupport.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.apache.turbine.util.pool;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.pool.TurbinePool;
-
-/**
- * A support class for recyclable objects implementing default methods.
- *
- * @author <a href="mailto:ilkka.priha@simsoft.fi">Ilkka Priha</a>
- * @version $Id$
- */
-public class RecyclableSupport implements Recyclable
-{
-    /**
-     * The disposed flag.
-     */
-    private boolean disposed;
-
-    /**
-     * Constructs a new recyclable support and calls the default recycle method.
-     */
-    public void Recyclable()
-    {
-        recycle();
-    }
-
-    /**
-     * Recycles the object by removing its disposed flag.
-     */
-    public void recycle()
-    {
-        disposed = false;
-    }
-
-    /**
-     * Disposes the object by setting its disposed flag.
-     */
-    public void dispose()
-    {
-        disposed = true;
-    }
-
-    /**
-     * Checks whether the object is disposed.
-     *
-     * @return true, if the object is disposed.
-     */
-    public boolean isDisposed()
-    {
-        return disposed;
-    }
-
-    /**
-     * A convenience method allowing a clever recyclable object
-     * to put itself into a pool for recycling.
-     *
-     * @return true, if disposal was accepted by the pool.
-     */
-    protected boolean doDispose()
-    {
-        try
-        {
-            return TurbinePool.putInstance(this);
-        }
-        catch (RuntimeException x)
-        {
-            return false;
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/pool/package.html b/src/java/org/apache/turbine/util/pool/package.html
deleted file mode 100644
index 0e05bd5..0000000
--- a/src/java/org/apache/turbine/util/pool/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Some helper classes and interfaces for the Pool Service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/security/AccessControlException.java b/src/java/org/apache/turbine/util/security/AccessControlException.java
deleted file mode 100644
index 8d28960..0000000
--- a/src/java/org/apache/turbine/util/security/AccessControlException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Thrown to indicate that the User attempted to perform an operation that
- * was not permitted by the security settings.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class AccessControlException
-        extends TurbineSecurityException
-{
-    /**
-     * Construct an AccessControlException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public AccessControlException(String msg)
-    {
-        super(msg);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/AccessControlList.java b/src/java/org/apache/turbine/util/security/AccessControlList.java
deleted file mode 100644
index 269b276..0000000
--- a/src/java/org/apache/turbine/util/security/AccessControlList.java
+++ /dev/null
@@ -1,244 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.Serializable;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-
-/**
- * This interface describes a control class that makes it
- * easy to find out if a particular User has a given Permission.
- * It also determines if a User has a a particular Role.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public interface AccessControlList
-        extends Serializable
-{
-    /** The default Session key for the Access Control List */
-    public static final java.lang.String SESSION_KEY = "turbine.AccessControlList";
-
-    /**
-     * Retrieves a set of Roles an user is assigned in a Group.
-     *
-     * @param group the Group
-     * @return the set of Roles this user has within the Group.
-     */
-    RoleSet getRoles(Group group);
-
-    /**
-     * Retrieves a set of Roles an user is assigned in the global Group.
-     *
-     * @return the set of Roles this user has within the global Group.
-     */
-    RoleSet getRoles();
-
-    /**
-     * Retrieves a set of Permissions an user is assigned in a Group.
-     *
-     * @param group the Group
-     * @return the set of Permissions this user has within the Group.
-     */
-    PermissionSet getPermissions(Group group);
-
-    /**
-     * Retrieves a set of Permissions an user is assigned in the global Group.
-     *
-     * @return the set of Permissions this user has within the global Group.
-     */
-    PermissionSet getPermissions();
-
-    /**
-     * Checks if the user is assigned a specific Role in the Group.
-     *
-     * @param role the Role
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Role in the Group.
-     */
-    boolean hasRole(Role role, Group group);
-
-    /**
-     * Checks if the user is assigned a specific Role in any of the given
-     * Groups
-     *
-     * @param role the Role
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Role in any of
-     *         the given Groups.
-     */
-    boolean hasRole(Role role, GroupSet groupset);
-
-    /**
-     * Checks if the user is assigned a specific Role in the Group.
-     *
-     * @param role the Role
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Role in the Group.
-     */
-    boolean hasRole(String role, String group);
-
-    /**
-     * Checks if the user is assigned a specifie Role in any of the given
-     * Groups
-     *
-     * @param rolename the name of the Role
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Role in any of
-     *         the given Groups.
-     */
-    boolean hasRole(String rolename, GroupSet groupset);
-
-    /**
-     * Checks if the user is assigned a specific Role in the global Group.
-     *
-     * @param role the Role
-     * @return <code>true</code> if the user is assigned the Role in the global Group.
-     */
-    boolean hasRole(Role role);
-
-    /**
-     * Checks if the user is assigned a specific Role in the global Group.
-     *
-     * @param role the Role
-     * @return <code>true</code> if the user is assigned the Role in the global Group.
-     */
-    boolean hasRole(String role);
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    boolean hasPermission(Permission permission, Group group);
-
-    /**
-     * Checks if the user is assigned a specific Permission in any of the given
-     * Groups
-     *
-     * @param permission the Permission
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Permission in any
-     *         of the given Groups.
-     */
-    boolean hasPermission(Permission permission, GroupSet groupset);
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    boolean hasPermission(String permission, String group);
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    boolean hasPermission(String permission, Group group);
-
-    /**
-     * Checks if the user is assigned a specifie Permission in any of the given
-     * Groups
-     *
-     * @param permissionName the name of the Permission
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Permission in any
-     *         of the given Groups.
-     */
-    boolean hasPermission(String permissionName, GroupSet groupset);
-
-    /**
-     * Checks if the user is assigned a specific Permission in the global Group.
-     *
-     * @param permission the Permission
-     * @return <code>true</code> if the user is assigned the Permission in the global Group.
-     */
-    boolean hasPermission(Permission permission);
-
-    /**
-     * Checks if the user is assigned a specific Permission in the global Group.
-     *
-     * @param permission the Permission
-     * @return <code>true</code> if the user is assigned the Permission in the global Group.
-     */
-    boolean hasPermission(String permission);
-
-    /**
-     * Returns all groups definded in the system.
-     *
-     * @return An Array of all defined Groups
-     *
-     * This is useful for debugging, when you want to display all roles
-     * and permissions an user is assigned. This method is needed
-     * because you can't call static methods of TurbineSecurity class
-     * from within WebMacro/Velocity template
-     */
-    Group[] getAllGroups();
-}
diff --git a/src/java/org/apache/turbine/util/security/DataBackendException.java b/src/java/org/apache/turbine/util/security/DataBackendException.java
deleted file mode 100644
index b6cad84..0000000
--- a/src/java/org/apache/turbine/util/security/DataBackendException.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Thrown to indicate that there was an error accessing the data
- * backend of the SecurityService.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DataBackendException
-        extends TurbineSecurityException
-{
-    /**
-     * Construct an DataBackendException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public DataBackendException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Construct an DataBackendException with specified detail message
-     * and nested <code>Throwable</code>.
-     *
-     * @param msg The detail message.
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public DataBackendException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/EntityExistsException.java b/src/java/org/apache/turbine/util/security/EntityExistsException.java
deleted file mode 100644
index 52bf3b5..0000000
--- a/src/java/org/apache/turbine/util/security/EntityExistsException.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Thrown upon an attempt to create an User,Role,Group or Permission that
- * already exists.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class EntityExistsException
-        extends TurbineSecurityException
-{
-    /**
-     * Construct an EntityExistsException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public EntityExistsException(String msg)
-    {
-        super(msg);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/GroupSet.java b/src/java/org/apache/turbine/util/security/GroupSet.java
deleted file mode 100755
index 1efcd24..0000000
--- a/src/java/org/apache/turbine/util/security/GroupSet.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.om.security.Group;
-
-/**
- * This class represents a set of Groups. It's useful for building
- * administration UI.  It enforces that only
- * Group objects are allowed in the set and only relevant methods
- * are available.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class GroupSet
-        extends SecuritySet
-{
-    /**
-     * Constructs an empty GroupSet
-     */
-    public GroupSet()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new GroupSet with specified contents.
-     *
-     * If the given collection contains multiple objects that are
-     * identical WRT equals() method, some objects will be overwritten.
-     *
-     * @param groups A collection of groups to be contained in the set.
-     */
-    public GroupSet(Collection groups)
-    {
-        super();
-        add(groups);
-    }
-
-    /**
-     * Adds a Group to this GroupSet.
-     *
-     * @param group A Group.
-     * @return True if Group was added; false if GroupSet
-     * already contained the Group.
-     */
-    public boolean add(Group group)
-    {
-        boolean res = contains(group);
-        nameMap.put(group.getName(), group);
-        idMap.put(group.getIdAsObj(), group);
-        return res;
-    }
-
-    /**
-     * Adds the Groups in a Collection to this GroupSet.
-     *
-     * @param groups A Collection of Groups.
-     * @return True if this GroupSet changed as a result; false
-     * if no change to this GroupSet occurred (this GroupSet
-     * already contained all members of the added GroupSet).
-     */
-    public boolean add(Collection groups)
-    {
-        boolean res = false;
-        for (Iterator it = groups.iterator(); it.hasNext();)
-        {
-            Group g = (Group) it.next();
-            res |= add(g);
-        }
-        return res;
-    }
-
-    /**
-     * Adds the Groups in another GroupSet to this GroupSet.
-     *
-     * @param groupSet A GroupSet.
-     * @return True if this GroupSet changed as a result; false
-     * if no change to this GroupSet occurred (this GroupSet
-     * already contained all members of the added GroupSet).
-     */
-    public boolean add(GroupSet groupSet)
-    {
-        boolean res = false;
-        for( Iterator it = groupSet.iterator(); it.hasNext();)
-        {
-            Group g = (Group) it.next();
-            res |= add(g);
-        }
-        return res;
-    }
-
-    /**
-     * Removes a Group from this GroupSet.
-     *
-     * @param group A Group.
-     * @return True if this GroupSet contained the Group
-     * before it was removed.
-     */
-    public boolean remove(Group group)
-    {
-        boolean res = contains(group);
-        nameMap.remove(group.getName());
-        idMap.remove(group.getIdAsObj());
-        return res;
-    }
-
-    /**
-     * Checks whether this GroupSet contains a Group.
-     *
-     * @param group A Group.
-     * @return True if this GroupSet contains the Group,
-     * false otherwise.
-     */
-    public boolean contains(Group group)
-    {
-        return nameMap.containsValue((Object) group);
-    }
-
-    /**
-     * Returns a Group with the given name, if it is contained in
-     * this GroupSet.
-     *
-     * @param groupName Name of Group.
-     * @return Group if argument matched a Group in this
-     * GroupSet; null if no match.
-     * @deprecated Use <a href="#getGroupByName">getGroupByName</a> instead.
-     */
-    public Group getGroup(String groupName)
-    {
-        return getGroupByName(groupName);
-    }
-
-    /**
-     * Returns a Group with the given name, if it is contained in
-     * this GroupSet.
-     *
-     * @param groupName Name of Group.
-     * @return Group if argument matched a Group in this
-     * GroupSet; null if no match.
-     */
-    public Group getGroupByName(String groupName)
-    {
-        return (StringUtils.isNotEmpty(groupName))
-                ? (Group) nameMap.get(groupName) : null;
-    }
-
-    /**
-     * Returns a Group with the given id, if it is contained in
-     * this GroupSet.
-     *
-     * @param groupId Id of the group
-     * @return Group if argument matched a Group in this
-     * GroupSet; null if no match.
-     */
-    public Group getGroupById(int groupId)
-    {
-        return (groupId != 0)
-                ? (Group) idMap.get(new Integer(groupId)) : null;
-    }
-
-    /**
-     * Returns an Array of Groups in this GroupSet.
-     *
-     * @return An Array of Group objects.
-     */
-    public Group[] getGroupsArray()
-    {
-        return (Group[]) getSet().toArray(new Group[0]);
-    }
-
-    /**
-     * Print out a GroupSet as a String
-     *
-     * @returns The Group Set as String
-     *
-     */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append("GroupSet: ");
-
-        for(Iterator it = iterator(); it.hasNext();)
-        {
-            Group g = (Group) it.next();
-            sb.append('[');
-            sb.append(g.getName());
-            sb.append(" -> ");
-            sb.append(g.getIdAsObj());
-            sb.append(']');
-            if (it.hasNext())
-            {
-                sb.append(", ");
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/PasswordMismatchException.java b/src/java/org/apache/turbine/util/security/PasswordMismatchException.java
deleted file mode 100644
index 3e8d13c..0000000
--- a/src/java/org/apache/turbine/util/security/PasswordMismatchException.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Thrown to indicate that the password supplied by user was incorrect.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PasswordMismatchException
-        extends TurbineSecurityException
-{
-    /**
-     * Construct an PasswordMismatchException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public PasswordMismatchException(String msg)
-    {
-        super(msg);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/PermissionSet.java b/src/java/org/apache/turbine/util/security/PermissionSet.java
deleted file mode 100644
index e5f211b..0000000
--- a/src/java/org/apache/turbine/util/security/PermissionSet.java
+++ /dev/null
@@ -1,262 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.om.security.Permission;
-
-/**
- * This class represents a set of Permissions.  It makes it easy to
- * build a UI that would allow someone to add a group of Permissions
- * to a Role.  It enforces that only
- * Permission objects are allowed in the set and only relevant methods
- * are available.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class PermissionSet
-    extends SecuritySet
-{
-    /**
-     * Constructs an empty PermissionSet
-     */
-    public PermissionSet()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new PermissionSet with specified contents.
-     *
-     * If the given collection contains multiple objects that are
-     * identical WRT equals() method, some objects will be overwritten.
-     *
-     * @param permissions A collection of permissions to be contained in the set.
-     */
-    public PermissionSet(Collection permissions)
-    {
-        super();
-        add(permissions);
-    }
-
-    /**
-     * Adds a Permission to this PermissionSet.
-     *
-     * @param permission A Permission.
-     * @return True if Permission was added; false if PermissionSet
-     * already contained the Permission.
-     */
-    public boolean add(Permission permission)
-    {
-        boolean res = contains(permission);
-        nameMap.put(permission.getName(), permission);
-        idMap.put(permission.getIdAsObj(), permission);
-        return res;
-    }
-
-    /**
-     * Adds the Permissions in a Collection to this PermissionSet.
-     *
-     * @param permissions A Collection of Permissions.
-     * @return True if this PermissionSet changed as a result; false
-     * if no change to this PermissionSet occurred (this PermissionSet
-     * already contained all members of the added PermissionSet).
-     */
-    public boolean add(Collection permissions)
-    {
-        boolean res = false;
-        for (Iterator it = permissions.iterator(); it.hasNext();)
-        {
-            Permission p = (Permission) it.next();
-            res |= add(p);
-        }
-        return res;
-    }
-
-    /**
-     * Adds the Permissions in another PermissionSet to this
-     * PermissionSet.
-     *
-     * @param permissionSet A PermissionSet.
-     * @return True if this PermissionSet changed as a result; false
-     * if no change to this PermissionSet occurred (this PermissionSet
-     * already contained all members of the added PermissionSet).
-     */
-    public boolean add(PermissionSet permissionSet)
-    {
-        boolean res = false;
-        for( Iterator it = permissionSet.iterator(); it.hasNext();)
-        {
-            Permission p = (Permission) it.next();
-            res |= add(p);
-        }
-        return res;
-    }
-
-    /**
-     * Removes a Permission from this PermissionSet.
-     *
-     * @param permission A Permission.
-     * @return True if this PermissionSet contained the Permission
-     * before it was removed.
-     */
-    public boolean remove(Permission permission)
-    {
-        boolean res = contains(permission);
-        nameMap.remove(permission.getName());
-        idMap.remove(permission.getIdAsObj());
-        return res;
-    }
-
-    /**
-     * Checks whether this PermissionSet contains a Permission.
-     *
-     * @param permission A Permission.
-     * @return True if this PermissionSet contains the Permission,
-     * false otherwise.
-     */
-    public boolean contains(Permission permission)
-    {
-        return nameMap.containsValue((Object) permission);
-    }
-
-    /**
-     * Returns a Permission with the given name, if it is contained in
-     * this PermissionSet.
-     *
-     * @param permissionName Name of Permission.
-     * @return Permission if argument matched a Permission in this
-     * PermissionSet; null if no match.
-     * @deprecated Use <a href="#getPermissionByName">getPermissionByName</a> instead.
-     */
-    public Permission getPermission(String permissionName)
-    {
-        return getPermissionByName(permissionName);
-    }
-
-    /**
-     * Returns a Permission with the given name, if it is contained in
-     * this PermissionSet.
-     *
-     * @param permissionName Name of Permission.
-     * @return Permission if argument matched a Permission in this
-     * PermissionSet; null if no match.
-     */
-    public Permission getPermissionByName(String permissionName)
-    {
-        return (StringUtils.isNotEmpty(permissionName))
-                ? (Permission) nameMap.get(permissionName) : null;
-    }
-
-    /**
-     * Returns a Permission with the given id, if it is contained in
-     * this PermissionSet.
-     *
-     * @param permissionId Id of the Permission.
-     * @return Permission if argument matched a Permission in this
-     * PermissionSet; null if no match.
-     */
-    public Permission getPermissionById(int permissionId)
-    {
-        return (permissionId != 0) 
-                ? (Permission) idMap.get(new Integer(permissionId)) : null;
-    }
-
-    /**
-     * Returns an Array of Permissions in this PermissionSet.
-     *
-     * @return An Array of Permission Objects.
-     */
-    public Permission[] getPermissionsArray()
-    {
-        return (Permission[]) getSet().toArray(new Permission[0]);
-    }
-
-    /**
-     * Print out a PermissionSet as a String
-     *
-     * @returns The Permission Set as String
-     *
-     */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append("PermissionSet: ");
-
-        for(Iterator it = iterator(); it.hasNext();)
-        {
-            Permission p = (Permission) it.next();
-            sb.append('[');
-            sb.append(p.getName());
-            sb.append(" -> ");
-            sb.append(p.getIdAsObj());
-            sb.append(']');
-            if (it.hasNext())
-            {
-                sb.append(", ");
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/RoleSet.java b/src/java/org/apache/turbine/util/security/RoleSet.java
deleted file mode 100644
index aa4c03b..0000000
--- a/src/java/org/apache/turbine/util/security/RoleSet.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Collection;
-import java.util.Iterator;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.om.security.Role;
-
-/**
- * This class represents a set of Roles.  It makes it easy to build a
- * UI that would allow someone to add a group of Roles to a User.
- * It enforces that only Role objects are
- * allowed in the set and only relevant methods are available.
- *
- * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class RoleSet
-        extends SecuritySet
-{
-    /**
-     * Constructs an empty RoleSet
-     */
-    public RoleSet()
-    {
-        super();
-    }
-
-    /**
-     * Constructs a new RoleSet with specified contents.
-     *
-     * If the given collection contains multiple objects that are
-     * identical WRT equals() method, some objects will be overwritten.
-     *
-     * @param roles A collection of roles to be contained in the set.
-     */
-    public RoleSet(Collection roles)
-    {
-        super();
-        add(roles);
-    }
-
-    /**
-     * Adds a Role to this RoleSet.
-     *
-     * @param role A Role.
-     * @return True if Role was added; false if RoleSet already
-     * contained the Role.
-     */
-    public boolean add(Role role)
-    {
-        boolean res = contains(role);
-        nameMap.put(role.getName(), role);
-        idMap.put(role.getIdAsObj(), role);
-        return res;
-    }
-
-    /**
-     * Adds the Roles in a Collection to this RoleSet.
-     *
-     * @param roles A Collection of Roles.
-     * @return True if this RoleSet changed as a result; false
-     * if no change to this RoleSet occurred (this RoleSet
-     * already contained all members of the added RoleSet).
-     */
-    public boolean add(Collection roles)
-    {
-        boolean res = false;
-        for (Iterator it = roles.iterator(); it.hasNext();)
-        {
-            Role r = (Role) it.next();
-            res |= add(r);
-        }
-        return res;
-    }
-
-    /**
-     * Adds the Roles in another RoleSet to this RoleSet.
-     *
-     * @param roleSet A RoleSet.
-     * @return True if this RoleSet changed as a result; false
-     * if no change to this RoleSet occurred (this RoleSet
-     * already contained all members of the added RoleSet).
-     */
-    public boolean add(RoleSet roleSet)
-    {
-        boolean res = false;
-        for( Iterator it = roleSet.iterator(); it.hasNext();)
-        {
-            Role r = (Role) it.next();
-            res |= add(r);
-        }
-        return res;
-    }
-
-    /**
-     * Removes a Role from this RoleSet.
-     *
-     * @param role A Role.
-     * @return True if this RoleSet contained the Role
-     * before it was removed.
-     */
-    public boolean remove(Role role)
-    {
-        boolean res = contains(role);
-        nameMap.remove(role.getName());
-        idMap.remove(role.getIdAsObj());
-        return res;
-    }
-
-    /**
-     * Checks whether this RoleSet contains a Role.
-     *
-     * @param role A Role.
-     * @return True if this RoleSet contains the Role,
-     * false otherwise.
-     */
-    public boolean contains(Role role)
-    {
-        return nameMap.containsValue((Object) role);
-    }
-
-    /**
-     * Returns a Role with the given name, if it is contained in
-     * this RoleSet.
-     *
-     * @param roleName Name of Role.
-     * @return Role if argument matched a Role in this
-     * RoleSet; null if no match.
-     * @deprecated Use <a href="#getRoleByName">getRoleByName</a> instead.
-     */
-    public Role getRole(String roleName)
-    {
-        return getRoleByName(roleName);
-    }
-
-    /**
-     * Returns a Role with the given name, if it is contained in
-     * this RoleSet.
-     *
-     * @param roleName Name of Role.
-     * @return Role if argument matched a Role in this
-     * RoleSet; null if no match.
-     */
-    public Role getRoleByName(String roleName)
-    {
-        return (StringUtils.isNotEmpty(roleName))
-                ? (Role) nameMap.get(roleName) : null;
-    }
-
-    /**
-     * Returns a Role with the given id, if it is contained in this
-     * RoleSet.
-     *
-     * @param roleId id of the Role.
-     * @return Role if argument matched a Role in this RoleSet; null
-     * if no match.
-     */
-    public Role getRoleById(int roleId)
-    {
-        return (roleId != 0) 
-                ? (Role) idMap.get(new Integer(roleId)) : null;
-    }
-
-    /**
-     * Returns an Array of Roles in this RoleSet.
-     *
-     * @return An Array of Role objects.
-     */
-    public Role[] getRolesArray()
-    {
-        return (Role[]) getSet().toArray(new Role[0]);
-    }
-
-    /**
-     * Print out a RoleSet as a String
-     *
-     * @returns The Role Set as String
-     *
-     */
-    public String toString()
-    {
-        StringBuffer sb = new StringBuffer();
-        sb.append("RoleSet: ");
-
-        for(Iterator it = iterator(); it.hasNext();)
-        {
-            Role r = (Role) it.next();
-            sb.append('[');
-            sb.append(r.getName());
-            sb.append(" -> ");
-            sb.append(r.getIdAsObj());
-            sb.append(']');
-            if (it.hasNext())
-            {
-                sb.append(", ");
-            }
-        }
-
-        return sb.toString();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/SecuritySet.java b/src/java/org/apache/turbine/util/security/SecuritySet.java
deleted file mode 100644
index 323a39e..0000000
--- a/src/java/org/apache/turbine/util/security/SecuritySet.java
+++ /dev/null
@@ -1,227 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import java.io.Serializable;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * This class represents a set of Security Entities.
- * It makes it easy to build a UI.
- * It wraps a TreeSet object to enforce that only relevant
- * methods are available.
- * TreeSet's contain only unique Objects (no duplicates).
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public abstract class SecuritySet
-        implements Serializable
-{
-    /** Map for "name" -> "security object" */
-    protected Map nameMap = null;
-
-    /** Map for "id" -> "security object" */
-    protected Map idMap = null;
-
-    /**
-     * Constructs an empty Set
-     */
-    public SecuritySet()
-    {
-        nameMap = new TreeMap();
-        idMap = new TreeMap();
-    }
-
-    /**
-     * Returns a set of security objects in this object.
-     *
-     * @return A Set Object
-     *
-     */
-    public Set getSet()
-    {
-        return new HashSet(nameMap.values());
-    }
-
-    /**
-     * Returns a set of Names in this Object.
-     *
-     * @return The Set of Names in this Object,
-     *         backed by the actual data.
-     */
-    public Set getNames()
-    {
-        return nameMap.keySet();
-    }
-
-    /**
-     * Returns a set of Id values in this Object.
-     *
-     * @return The Set of Ids in this Object,
-     *         backed by the actual data.
-     */
-    public Set getIds()
-    {
-        return idMap.keySet();
-    }
-
-    /**
-     * Removes all Objects from this Set.
-     */
-    public void clear()
-    {
-        nameMap.clear();
-        idMap.clear();
-    }
-
-    /**
-     * Searches if an Object with a given name is in the
-     * Set
-     *
-     * @param roleName Name of the Security Object.
-     * @return True if argument matched an Object in this Set; false
-     * if no match.
-     * @deprecated Use containsName(groupName) instead.
-     */
-    public boolean contains(String groupName)
-    {
-        return containsName(groupName);
-    }
-
-    /**
-     * Searches if an Object with a given name is in the
-     * Set
-     *
-     * @param roleName Name of the Security Object.
-     * @return True if argument matched an Object in this Set; false
-     * if no match.
-     */
-    public boolean containsName(String name)
-    {
-        return (StringUtils.isNotEmpty(name)) ? nameMap.containsKey(name) : false;
-    }
-
-    /**
-     * Searches if an Object with a given Id is in the
-     * Set
-     *
-     * @param id Id of the Security Object.
-     * @return True if argument matched an Object in this Set; false
-     * if no match.
-     */
-    public boolean containsId(int id)
-    {
-        return (id == 0) ? false:  idMap.containsKey(new Integer(id));
-    }
-
-    /**
-     * Returns an Iterator for Objects in this Set.
-     *
-     * @return An iterator for the Set
-     */
-    public Iterator iterator()
-    {
-        return nameMap.values().iterator();
-    }
-
-    /**
-     * @deprecated Use iterator() instead.
-     */
-    public Iterator elements()
-    {
-        return iterator();
-    }
-
-    /**
-     * Returns size (cardinality) of this set.
-     *
-     * @return The cardinality of this Set.
-     */
-    public int size()
-    {
-        return nameMap.size();
-    }
-
-    /**
-     * list of role names in this set
-     *
-     * @return The string representation of this Set.
-     */
-    public String toString()
-    {
-        StringBuffer sbuf = new StringBuffer(12 * size());
-        for(Iterator it = nameMap.keySet().iterator(); it.hasNext(); )
-        {
-            sbuf.append((String) it.next());
-
-            if(it.hasNext())
-            {
-                sbuf.append(", ");
-            }
-        }
-        return sbuf.toString();
-    }
-}
-
diff --git a/src/java/org/apache/turbine/util/security/TurbineAccessControlList.java b/src/java/org/apache/turbine/util/security/TurbineAccessControlList.java
deleted file mode 100644
index 4f84267..0000000
--- a/src/java/org/apache/turbine/util/security/TurbineAccessControlList.java
+++ /dev/null
@@ -1,494 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.services.security.TurbineSecurity;
-
-/**
- * This is a control class that makes it easy to find out if a
- * particular User has a given Permission.  It also determines if a
- * User has a a particular Role.
- *
- * @author <a href="mailto:jmcnally@collab.net">John D. McNally</a>
- * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
- * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
- * @version $Id$
- */
-public class TurbineAccessControlList
-        implements AccessControlList
-{
-    /** The sets of roles that the user has in different groups */
-    private Map roleSets;
-
-    /** The sets of permissions that the user has in different groups */
-    private Map permissionSets;
-
-    /** The name of this ACL. Needed for the SecurityEntity Interface */
-    private String name;
-
-    /**
-     * Constructs a new AccessControlList.
-     *
-     * This class follows 'immutable' pattern - it's objects can't be modified
-     * once they are created. This means that the permissions the users have are
-     * in effect form the moment they log in to the moment they log out, and
-     * changes made to the security settings in that time are not reflected
-     * in the state of this object. If you need to reset an user's permissions
-     * you need to invalidate his session. <br>
-     * The objects that constructs an AccessControlList must supply hashtables
-     * of role/permission sets keyed with group objects. <br>
-     *
-     * @param roleSets a hashtable containing RoleSet objects keyed with Group objects
-     * @param permissionSets a hashtable containing PermissionSet objects keyed with Group objects
-     */
-    public TurbineAccessControlList(Map roleSets, Map permissionSets)
-    {
-        this.roleSets = roleSets;
-        this.permissionSets = permissionSets;
-    }
-
-    /**
-     * Returns the name of this ACL.
-     *
-     * @return The ACL Name
-     *
-     */
-    public String getName()
-    {
-        return this.name;
-    }
-
-    /**
-     * Sets the name of this ACL.
-     *
-     * @param name The new ACL name.
-     *
-     */
-    public void setName(String name)
-    {
-        this.name = name;
-    }
-
-    /**
-     * Retrieves a set of Roles an user is assigned in a Group.
-     *
-     * @param group the Group
-     * @return the set of Roles this user has within the Group.
-     */
-    public RoleSet getRoles(Group group)
-    {
-        if (group == null)
-        {
-            return null;
-        }
-        return (RoleSet) roleSets.get(group);
-    }
-
-    /**
-     * Retrieves a set of Roles an user is assigned in the global Group.
-     *
-     * @return the set of Roles this user has within the global Group.
-     */
-    public RoleSet getRoles()
-    {
-        return getRoles(TurbineSecurity.getGlobalGroup());
-    }
-
-    /**
-     * Retrieves a set of Permissions an user is assigned in a Group.
-     *
-     * @param group the Group
-     * @return the set of Permissions this user has within the Group.
-     */
-    public PermissionSet getPermissions(Group group)
-    {
-        if (group == null)
-        {
-            return null;
-        }
-        return (PermissionSet) permissionSets.get(group);
-    }
-
-    /**
-     * Retrieves a set of Permissions an user is assigned in the global Group.
-     *
-     * @return the set of Permissions this user has within the global Group.
-     */
-    public PermissionSet getPermissions()
-    {
-        return getPermissions(TurbineSecurity.getGlobalGroup());
-    }
-
-    /**
-     * Checks if the user is assigned a specific Role in the Group.
-     *
-     * @param role the Role
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Role in the Group.
-     */
-    public boolean hasRole(Role role, Group group)
-    {
-        RoleSet set = getRoles(group);
-        if (set == null || role == null)
-        {
-            return false;
-        }
-        return set.contains(role);
-    }
-
-    /**
-     * Checks if the user is assigned a specific Role in any of the given
-     * Groups
-     *
-     * @param role the Role
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Role in any of
-     *         the given Groups.
-     */
-    public boolean hasRole(Role role, GroupSet groupset)
-    {
-        if (role == null)
-        {
-            return false;
-        }
-        for (Iterator groups = groupset.iterator(); groups.hasNext();)
-        {
-            Group group = (Group) groups.next();
-            RoleSet roles = getRoles(group);
-            if (roles != null)
-            {
-                if (roles.contains(role))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the user is assigned a specific Role in the Group.
-     *
-     * @param role the Role
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Role in the Group.
-     */
-    public boolean hasRole(String role, String group)
-    {
-        try
-        {
-            return hasRole(TurbineSecurity.getRoleByName(role),
-                    TurbineSecurity.getGroupByName(group));
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Checks if the user is assigned a specifie Role in any of the given
-     * Groups
-     *
-     * @param rolename the name of the Role
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Role in any of
-     *         the given Groups.
-     */
-    public boolean hasRole(String rolename, GroupSet groupset)
-    {
-        Role role;
-        try
-        {
-            role = TurbineSecurity.getRoleByName(rolename);
-        }
-        catch (TurbineSecurityException e)
-        {
-            return false;
-        }
-        if (role == null)
-        {
-            return false;
-        }
-        for (Iterator groups = groupset.iterator(); groups.hasNext();)
-        {
-            Group group = (Group) groups.next();
-            RoleSet roles = getRoles(group);
-            if (roles != null)
-            {
-                if (roles.contains(role))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the user is assigned a specific Role in the global Group.
-     *
-     * @param role the Role
-     * @return <code>true</code> if the user is assigned the Role in the global Group.
-     */
-    public boolean hasRole(Role role)
-    {
-        return hasRole(role, TurbineSecurity.getGlobalGroup());
-    }
-
-    /**
-     * Checks if the user is assigned a specific Role in the global Group.
-     *
-     * @param role the Role
-     * @return <code>true</code> if the user is assigned the Role in the global Group.
-     */
-    public boolean hasRole(String role)
-    {
-        try
-        {
-            return hasRole(TurbineSecurity.getRoleByName(role));
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    public boolean hasPermission(Permission permission, Group group)
-    {
-        PermissionSet set = getPermissions(group);
-        if (set == null || permission == null)
-        {
-            return false;
-        }
-        return set.contains(permission);
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in any of the given
-     * Groups
-     *
-     * @param permission the Permission
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Permission in any
-     *         of the given Groups.
-     */
-    public boolean hasPermission(Permission permission, GroupSet groupset)
-    {
-        if (permission == null)
-        {
-            return false;
-        }
-        for (Iterator groups = groupset.iterator(); groups.hasNext();)
-        {
-            Group group = (Group) groups.next();
-            PermissionSet permissions = getPermissions(group);
-            if (permissions != null)
-            {
-                if (permissions.contains(permission))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    public boolean hasPermission(String permission, String group)
-    {
-        try
-        {
-            return hasPermission(TurbineSecurity.getPermissionByName(permission),
-                    TurbineSecurity.getGroupByName(group));
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in the Group.
-     *
-     * @param permission the Permission
-     * @param group the Group
-     * @return <code>true</code> if the user is assigned the Permission in the Group.
-     */
-    public boolean hasPermission(String permission, Group group)
-    {
-        try
-        {
-            return hasPermission(
-                    TurbineSecurity.getPermissionByName(permission), group);
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Checks if the user is assigned a specifie Permission in any of the given
-     * Groups
-     *
-     * @param permissionName the name of the Permission
-     * @param groupset a Groupset
-     * @return <code>true</code> if the user is assigned the Permission in any
-     *         of the given Groups.
-     */
-    public boolean hasPermission(String permissionName, GroupSet groupset)
-    {
-        Permission permission;
-        try
-        {
-            permission = TurbineSecurity.getPermissionByName(permissionName);
-        }
-        catch (TurbineSecurityException e)
-        {
-            return false;
-        }
-        if (permission == null)
-        {
-            return false;
-        }
-        for (Iterator groups = groupset.iterator(); groups.hasNext();)
-        {
-            Group group = (Group) groups.next();
-            PermissionSet permissions = getPermissions(group);
-            if (permissions != null)
-            {
-                if (permissions.contains(permission))
-                {
-                    return true;
-                }
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in the global Group.
-     *
-     * @param permission the Permission
-     * @return <code>true</code> if the user is assigned the Permission in the global Group.
-     */
-    public boolean hasPermission(Permission permission)
-    {
-        return hasPermission(permission, TurbineSecurity.getGlobalGroup());
-    }
-
-    /**
-     * Checks if the user is assigned a specific Permission in the global Group.
-     *
-     * @param permission the Permission
-     * @return <code>true</code> if the user is assigned the Permission in the global Group.
-     */
-    public boolean hasPermission(String permission)
-    {
-        try
-        {
-            return hasPermission(TurbineSecurity.getPermissionByName(permission));
-        }
-        catch (Exception e)
-        {
-            return false;
-        }
-    }
-
-    /**
-     * Returns all groups definded in the system.
-     *
-     * This is useful for debugging, when you want to display all roles
-     * and permissions an user is assingned. This method is needed
-     * because you can't call static methods of TurbineSecurity class
-     * from within WebMacro/Velocity template
-     *
-     * @return A Group [] of all groups in the system.
-     */
-    public Group[] getAllGroups()
-    {
-        try
-        {
-            return TurbineSecurity.getAllGroups().getGroupsArray();
-        }
-        catch (TurbineSecurityException e)
-        {
-            return new Group[0];
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/TurbineSecurityException.java b/src/java/org/apache/turbine/util/security/TurbineSecurityException.java
deleted file mode 100644
index 669e988..0000000
--- a/src/java/org/apache/turbine/util/security/TurbineSecurityException.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * Thrown by SecurityService methods to indicate various problems.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TurbineSecurityException
-        extends TurbineException
-{
-    /**
-     * Construct an SecurityException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public TurbineSecurityException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Construct an SecurityException with specified detail message
-     * and nested <code>Throwable</code>.
-     *
-     * @param msg The detail message.
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public TurbineSecurityException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/UnknownEntityException.java b/src/java/org/apache/turbine/util/security/UnknownEntityException.java
deleted file mode 100644
index 004f761..0000000
--- a/src/java/org/apache/turbine/util/security/UnknownEntityException.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.apache.turbine.util.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * Thrown to indicate that the User,Role,Group or Permission that
- * was requested does not exist.
- *
- * @author <a href="mailto:krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class UnknownEntityException
-        extends TurbineSecurityException
-{
-    /**
-     * Construct an UnknownEntityException with specified detail message.
-     *
-     * @param msg The detail message.
-     */
-    public UnknownEntityException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Construct an UnknownEntityException with specified detail message
-     * and nested <code>Throwable</code>.
-     *
-     * @param msg The detail message.
-     * @param nested the exception or error that caused this exception
-     *               to be thrown.
-     */
-    public UnknownEntityException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/security/package.html b/src/java/org/apache/turbine/util/security/package.html
deleted file mode 100644
index c6cf430..0000000
--- a/src/java/org/apache/turbine/util/security/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Some helper classes and interfaces for the Security Service.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java b/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java
deleted file mode 100644
index 00f349b..0000000
--- a/src/java/org/apache/turbine/util/template/HtmlPageAttributes.java
+++ /dev/null
@@ -1,736 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.ArrayList;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-
-/**
- * Template context tool that can be used to set various attributes of a
- * HTML page.  This tool does not automatically make the changes in the HTML
- * page for you.  You must use this tool in your layout template to retrieve
- * the attributes.
- * <p>
- * The set/add methods are can be used from a screen template, action, screen
- * class, layour template, or anywhere else.  The get methods should be used in
- * your layout template(s) to construct the appropriate HTML tags.
- *<p>
- * Example usage of this tool to build the HEAD and BODY tags in your layout
- * templates:
- * <p>
- *  <code>
- *  ## Set defaults for all pages using this layout.  Anything set here can<br>
- *  ## be overridden in the screen template.<br>
- *  $page.setTitle("My default page title");<br>
- *  $page.setHttpEquiv("Content-Style-Type","text/css")<br>
- *  $page.addStyleSheet($content.getURI("myStyleSheet.css"))<br>
- *  $page.addScript($content.getURI("globalJavascriptCode.js"))<br>
- *  <br>
- *  ## build the HTML, HEAD, and BODY tags dynamically<br>
- *  &lt;html&gt;<br>
- *    &lt;head&gt;<br>
- *      #if( $page.Title != "" )<br>
- *      &lt;title&gt;$page.Title&lt;/title&gt;<br>
- *      #end<br>
- *      #foreach($metaTag in $page.MetaTags.keySet())<br>
- *      &lt;meta name="$metaTag" content="$page.MetaTags.get($metaTag)"&gt;<br>
- *      #end<br>
- *      #foreach($httpEquiv in $page.HttpEquivs.keySet())<br>
- *      &lt;meta http-equiv="$httpEquiv" content="$page.HttpEquivs.get($httpEquiv)"&gt;<br>
- *      #end<br>
- *      #foreach( $styleSheet in $page.StyleSheets )<br>
- *        &lt;link rel="stylesheet" href="$styleSheet.Url"<br>
- *          #if($styleSheet.Type != "" ) type="$styleSheet.Type" #end<br>
- *          #if($styleSheet.Media != "") media="$styleSheet.Media" #end<br>
- *          #if($styleSheet.Title != "") title="$styleSheet.Title" #end<br>
- *        &gt;<br>
- *      #end<br>
- *      #foreach( $script in $page.Scripts )<br>
- *        &lt;script type="text/javascript" src="$script" language="JavaScript"&gt;&lt;/script&gt;<br>
- *      #end<br>
- *    &lt;/head&gt;<br>
- *<br>
- *    ## Construct the body tag.  Iterate through the body attributes to build the opening tag<br>
- *    &lt;body<br>
- *      #foreach( $attributeName in $page.BodyAttributes.keySet() )<br>
- *        $attributeName = "$page.BodyAttributes.get($attributeName)"<br>
- *      #end<br>
- *     &gt;
- * </code>
- * <p>
- * Example usages of this tool in your screen templates:<br>
- *   <code>$page.addScript($content.getURI("myJavascript.js")<br>
- *   $page.setTitle("My page title")<br>
- *   $page.setHttpEquiv("refresh","5; URL=http://localhost/nextpage.html")</code>
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:seade@backstagetech.com.au">Scott Eade</a>
- * @version $Id$
- */
-public class HtmlPageAttributes
-        implements ApplicationTool
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(HtmlPageAttributes.class);
-
-    /** The title */
-    private String title;
-
-    /** Body Attributes */
-    private Map bodyAttributes = new HashMap();
-
-    /** Script references */
-    private List scripts = new ArrayList();
-
-    /** Stylesheet references */
-    private List styleSheets = new ArrayList();
-
-    /** Inline styles */
-    private List styles = new ArrayList();
-
-    /** Meta tags for the HEAD */
-    private Map metaTags = new HashMap();
-
-    /** http-equiv tags */
-    private Map httpEquivs = new HashMap();
-
-    /** Doctype */
-    private String doctype = null;
-
-    /**
-     * Default constructor. The init method must be called before use
-     */
-    public HtmlPageAttributes()
-    {
-    }
-
-    /**
-     * Construct a new instance with the given RunData object.
-     *
-     * @param data a RunData instance
-     */
-    public HtmlPageAttributes(RunData data)
-    {
-        init(data);
-    }
-
-    /**
-     * Initialise this instance with the given RunData object.
-     * (ApplicationTool method)
-     *
-     * @param data Assumed to be a RunData instance
-     */
-    public void init(Object data)
-    {
-        this.title = null;
-        this.bodyAttributes.clear();
-        this.scripts.clear();
-        this.styleSheets.clear();
-        this.styles.clear();
-        this.metaTags.clear();
-        this.httpEquivs.clear();
-    }
-
-    /**
-     * Refresh method - does nothing
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /**
-     * Set the title in the page.  This returns an empty String so
-     * that the template doesn't complain about getting a null return
-     * value.  Subsequent calls to this method will replace the current
-     * title.
-     *
-     * @param title A String with the title.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setTitle(String title)
-    {
-        this.title = title;
-        return this;
-    }
-
-    /**
-     * Get the title in the page.  This returns an empty String if
-     * empty so that the template doesn't complain about getting a null
-     * return value.
-     *
-     * @return A String with the title.
-     */
-    public String getTitle()
-    {
-        if (StringUtils.isEmpty(this.title))
-        {
-            return "";
-        }
-        return title;
-    }
-
-    /**
-     * Adds an attribute to the BODY tag.
-     *
-     * @param name A String.
-     * @param value A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     * @deprecated Use addBodyAttribute instead.
-     */
-    public HtmlPageAttributes addAttribute(String name, String value)
-    {
-        log.info("Use of the addAttribute(name,value) method is deprecated.  Please use " +
-                "addBodyAttribute(name,value) instead.");
-        return addBodyAttribute(name, value);
-    }
-
-    /**
-     * Adds an attribute to the BODY tag.
-     *
-     * @param name A String.
-     * @param value A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes addBodyAttribute(String name, String value)
-    {
-        this.bodyAttributes.put(name, value);
-        return this;
-    }
-
-    /**
-     * Returns the map of body attributes
-     *
-     * @return the map
-     */
-    public Map getBodyAttributes()
-    {
-        return this.bodyAttributes;
-    }
-
-    /**
-     * Adds a script reference
-     *
-     * @param scriptURL
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes addScript(String scriptURL)
-    {
-        this.scripts.add(scriptURL);
-        return this;
-    }
-
-    /**
-     * Adds a script reference
-     *
-     * @param scriptURL
-     * @return a <code>HtmlPageAttributes</code> (self).
-     * @deprecated Use addScript instead
-     */
-    public HtmlPageAttributes setScript(String scriptURL)
-    {
-        log.info("Use of the setScript(scriptURL) method is deprecated.  Please use " +
-                "addScript(scriptURL) instead.");
-        return addScript(scriptURL);
-    }
-
-    /**
-     * Returns a collection of script URLs
-     *
-     * @return list of String objects constainings URLs of javascript files
-     * to include
-     */
-    public List getScripts()
-    {
-        return this.scripts;
-    }
-
-    /**
-     * Adds a style sheet reference
-     *
-     * @param styleSheetURL URL of the style sheet
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes addStyleSheet(String styleSheetURL)
-    {
-        addStyleSheet(styleSheetURL, "screen", null, "text/css");
-        return this;
-    }
-
-    /**
-     * Adds a style sheet reference
-     *
-     * @param styleSheetURL URL of the style sheet
-     * @param media name of the media
-     * @param title title of the stylesheet
-     * @param type content type
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes addStyleSheet(String styleSheetURL,
-                                            String media, String title, String type)
-    {
-        StyleSheet ss = new StyleSheet(styleSheetURL);
-        ss.setMedia(media);
-        ss.setTitle(title);
-        ss.setType(type);
-        this.styleSheets.add(ss);
-        return this;
-    }
-
-    /**
-     * Adds a style sheet reference
-     *
-     * @param styleSheetURL
-     * @return a <code>HtmlPageAttributes</code> (self).
-     * @deprecated use addStyleSheet instead
-     */
-    public HtmlPageAttributes setStyleSheet(String styleSheetURL)
-    {
-        log.info("Use of the setStyleSheet(styleSheetURL) method is deprecated.  Please use " +
-                "addStyleSheet(styleSheetURL) instead.");
-        return addStyleSheet(styleSheetURL);
-    }
-
-    /**
-     * Adds a style sheet reference
-     *
-     * @param styleSheetURL
-     * @param media name of the media
-     * @return a <code>HtmlPageAttributes</code> (self).
-     * @deprecated use addStyleSheet instead
-     */
-    public HtmlPageAttributes setStyleSheet(String styleSheetURL, String media)
-    {
-        log.info("Use of the setStyleSheet(styleSheetURL,media) method is deprecated.  " +
-                "Please use addStyleSheet(styleSheetURL,media) instead.");
-        return addStyleSheet(styleSheetURL, media, null, "text/css");
-    }
-
-    /**
-     * Returns a collection of script URLs
-     *
-     * @return list StyleSheet objects (inner class)
-     */
-    public List getStyleSheets()
-    {
-        return this.styleSheets;
-    }
-
-    /**
-     * Adds a STYLE element to the HEAD of the page with the provided content.
-     *
-     * @param styleText The contents of the <code>style</code> tag.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     * @deprecated use addStyle instead
-     */
-    public HtmlPageAttributes setStyle(String styleText)
-    {
-        log.info("Use of the setStyle(styleText) method is deprecated.  Please use " +
-                "addStyle(styleText) instead.");
-        return addStyle(styleText);
-    }
-
-    /**
-     * Adds a STYLE element to the HEAD of the page with the provided content.
-     *
-     * @param styleText The contents of the <code>style</code> tag.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes addStyle(String styleText)
-    {
-        this.styles.add(styleText);
-        return this;
-    }
-
-    /**
-     * Returns a collection of styles
-     *
-     * @return list of String objects containing the contents of style tags
-     */
-    public List getStyles()
-    {
-        return this.styles;
-    }
-
-    /**
-     * Set a keywords META tag in the HEAD of the page.
-     *
-     * @param keywords A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setKeywords(String keywords)
-    {
-        this.metaTags.put("keywords", keywords);
-        return this;
-    }
-
-    /**
-     * Sets a HttpEquiv META tag in the HEAD of the page, usage:
-     * <br><code>setHttpEquiv("refresh", "5; URL=http://localhost/nextpage.html")</code>
-     * <br><code>setHttpEquiv("Expires", "Tue, 20 Aug 1996 14:25:27 GMT")</code>
-     *
-     * @param httpEquiv The value to use for the http-equiv attribute.
-     * @param content   The text for the content attribute of the meta tag.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setHttpEquiv(String httpEquiv, String content)
-    {
-        this.httpEquivs.put(httpEquiv, content);
-        return this;
-    }
-
-    /**
-     * Add a description META tag to the HEAD of the page.
-     *
-     * @param description A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setDescription(String description)
-    {
-        this.metaTags.put("description", description);
-        return this;
-    }
-
-    /**
-     * Set the background image for the BODY tag.
-     *
-     * @param url A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setBackground(String url)
-    {
-        this.bodyAttributes.put("background", url);
-        return this;
-    }
-
-    /**
-     * Set the background color for the BODY tag.  You can use either
-     * color names or color values (e.g. "white" or "#ffffff" or
-     * "ffffff").
-     *
-     * @param color A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setBgColor(String color)
-    {
-        this.bodyAttributes.put("BGCOLOR", color);
-        return this;
-    }
-
-    /**
-     * Set the text color for the BODY tag.  You can use either color
-     * names or color values (e.g. "white" or "#ffffff" or "ffffff").
-     *
-     * @param color A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setTextColor(String color)
-    {
-        this.bodyAttributes.put("TEXT", color);
-        return this;
-    }
-
-    /**
-     * Set the link color for the BODY tag.  You can use either color
-     * names or color values (e.g. "white" or "#ffffff" or "ffffff").
-     *
-     * @param color A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setLinkColor(String color)
-    {
-        this.bodyAttributes.put("LINK", color);
-        return this;
-    }
-
-    /**
-     * Set the visited link color for the BODY tag.
-     *
-     * @param color A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setVlinkColor(String color)
-    {
-        this.bodyAttributes.put("VLINK", color);
-        return this;
-    }
-
-    /**
-     * Set the active link color for the BODY tag.
-     *
-     * @param color A String.
-     * @return a <code>HtmlPageAttributes</code> (self).
-     */
-    public HtmlPageAttributes setAlinkColor(String color)
-    {
-        this.bodyAttributes.put("ALINK", color);
-        return this;
-    }
-
-    /**
-     * Gets the map of http equiv tags
-     *
-     * @return Map of http equiv names to the contents
-     */
-    public Map getHttpEquivs()
-    {
-        return this.httpEquivs;
-    }
-
-    /**
-     * Gets the map of meta tags
-     *
-     * @return Map of http equiv names to the contents
-     */
-    public Map getMetaTags()
-    {
-        return this.metaTags;
-    }
-
-    /**
-     * A dummy toString method that returns an empty string.
-     *
-     * @return An empty String ("").
-     */
-    public String toString()
-    {
-        return "";
-    }
-
-    /**
-     * Helper class to hold data about a stylesheet
-     */
-    public class StyleSheet
-    {
-        private String url;
-        private String title;
-        private String media;
-        private String type;
-
-        /**
-         * Constructor requiring the URL to be set
-         *
-         * @param url URL of the external style sheet
-         */
-        public StyleSheet(String url)
-        {
-            setUrl(url);
-        }
-
-        /**
-         * Gets the content type of the style sheet
-         *
-         * @return content type
-         */
-        public String getType()
-        {
-            return (StringUtils.isEmpty(type) ? "" : type);
-        }
-
-        /**
-         * Sets the content type of the style sheet
-         *
-         * @param type content type
-         */
-        public void setType(String type)
-        {
-            this.type = type;
-        }
-
-        /**
-         * @return String representation of the URL
-         */
-        public String getUrl()
-        {
-            return url;
-        }
-
-        /**
-         * Sets the URL of the external style sheet
-         *
-         * @param url The URL of the stylesheet
-         */
-        private void setUrl(String url)
-        {
-            this.url = url;
-        }
-
-        /**
-         * Gets the title of the style sheet
-         *
-         * @return title
-         */
-        public String getTitle()
-        {
-            return (StringUtils.isEmpty(title) ? "" : title);
-        }
-
-        /**
-         * Sets the title of the stylesheet
-         *
-         * @param title
-         */
-        public void setTitle(String title)
-        {
-            this.title = title;
-        }
-
-        /**
-         * Gets the media for which the stylesheet should be applied.
-         *
-         * @return name of the media
-         */
-        public String getMedia()
-        {
-            return (StringUtils.isEmpty(media) ? "" : media);
-        }
-
-        /**
-         * Sets the media for which the stylesheet should be applied.
-         *
-         * @param media name of the media
-         */
-        public void setMedia(String media)
-        {
-            this.media = media;
-        }
-
-    }
-    
-    /**
-     * Retrieve the default Doctype as configured by the 
-     * TurbineResources.peoperties 
-     * default.doctype.root.element, default.doctype.identifier and
-     * default.doctype.url properties (defaults are "HTML", 
-     * "-//W3C//DTD HTML 4.01 Transitional//EN" and 
-     * "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd" respectively).
-     * 
-     * @return the DOCTYPE tag constructed from the properties in 
-     * TurbineResources.properties.
-     */
-    public String getDefaultDoctype()
-    {
-	Configuration conf = Turbine.getConfiguration();
-        if (doctype == null)
-        {
-            String tag = conf.getString(
-                    TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_KEY,
-                    TurbineConstants.DEFAULT_HTML_DOCTYPE_ROOT_ELEMENT_DEFAULT);
-
-            if (StringUtils.isEmpty(tag))
-            {
-                doctype = "";
-            }
-            else
-            {
-                String identifier = conf.getString(
-                        TurbineConstants.DEFAULT_HTML_DOCTYPE_IDENTIFIER_KEY,
-                        TurbineConstants.DEFAULT_HTML_DOCTYPE_IDENTIFIER_DEFAULT);
-
-                String uri = conf.getString(
-                        TurbineConstants.DEFAULT_HTML_DOCTYPE_URI_KEY,
-                        TurbineConstants.DEFAULT_HTML_DOCTYPE_URI_DEFAULT);
-
-                doctype = buildDoctype(tag, identifier, uri);
-            }
-        }
-        return doctype;
-    }
-    
-    /**
-     * Build the doctype element.
-     * 
-     * @param tag the tag whose DTD is being declared.
-     * @param identifier the identifier for the doctype declaration.
-     * @param uri the uri for the doctype declaration.
-     * @return the doctype.
-     */
-    private String buildDoctype(String tag, String identifier, String uri)
-    {
-        StringBuffer doctypeBuf = new StringBuffer("<!DOCTYPE ");
-        doctypeBuf.append(tag);
-
-        if (StringUtils.isNotEmpty(identifier))
-        {
-            doctypeBuf.append(" PUBLIC \"");
-            doctypeBuf.append(identifier);
-            doctypeBuf.append("\" \"");
-        }
-        else
-        {
-            doctypeBuf.append(" SYSTEM \"");
-        }
-
-        doctypeBuf.append(uri);
-        doctypeBuf.append("\">");
-
-        return doctypeBuf.toString();
-    }
-    
-}
diff --git a/src/java/org/apache/turbine/util/template/SelectorBox.java b/src/java/org/apache/turbine/util/template/SelectorBox.java
deleted file mode 100644
index 04394b6..0000000
--- a/src/java/org/apache/turbine/util/template/SelectorBox.java
+++ /dev/null
@@ -1,354 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.ecs.html.Option;
-import org.apache.ecs.html.Select;
-
-/**
- * This class is for generating a SelectorBox. It is good when used
- * with WM because you can stuff it into the context and then just
- * call it to generate the HTML.  It can be used in other cases as
- * well, but WM is the best case for it right now.
- *
- * <p>For example code showing the usage for this module, please see
- * the toString() method below to see how it would be refered to from
- * WM.
- *
- * <pre>
- * // get the roles for a user
- * RoleSet userRoles = new DefaultAccessControl().getRoles(loginid, null);
- * if ( userRoles != null )
- * {
- *     context.put("hasRoleSet", Boolean.TRUE);
- *
- *     // get an array of the users roles
- *     Role[] usersRoles = userRoles.getRolesArray();
- *     // get an array of all the roles in the system
- *     Role[] allRoles = ((RoleSet)RolePeer.retrieveSet()).getRolesArray();
- *
- *     Object[] names = new Object[allRoles.length];
- *     Object[] values = new Object[allRoles.length];
- *     for ( int i=0;i&lt;allRoles.length; i++ )
- *     {
- *         names[i] = new Integer(allRoles[i].getPrimaryKey()).toString();
- *         values[i] = allRoles[i].getName();
- *     }
- *
- *     SelectorBox sb = new SelectorBox("roleSetBox", names, values);
- *     sb.buildBooleans(usersRoles, allRoles);
- *     context.put("roleSetBox", sb);
- * }
- * else
- * {
- *     context.put("hasRoleSet", Boolean.FALSE);
- * }
- * </pre>
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @version $Id$
- */
-public class SelectorBox
-{
-    /** This is the Select ECS element. */
-    private Select sel = null;
-
-    /** This is the size of the Select statement. */
-    private int size = 1;
-
-    /** This is the name= value. */
-    private String name = null;
-
-    /** This is the value= portion of the option element. */
-    private Object[] names = null;
-
-    /** This is the data after the option element. */
-    private Object[] values = null;
-
-    /** This is an array of which items are selected. */
-    private boolean[] selected = null;
-
-    /**
-     * Generic constructor, builds a select box with a default size of
-     * 1 and no selected items.
-     *
-     * @param name A String with the name for the select box.
-     * @param names An Object[] with the names.
-     * @param values An Object[] with the values.
-     */
-    public SelectorBox(String name, Object[] names, Object[] values)
-    {
-        this(name, names, values, 1, null);
-    }
-
-    /**
-     * Generic constructor builds a select box.
-     *
-     * @param name A String with the name for the select box.
-     * @param names An Object[] with the names.
-     * @param values An Object[] with the values.
-     * @param size An int specifying the size.
-     */
-    public SelectorBox(String name, Object[] names, Object[] values, int size)
-    {
-        this(name, names, values, size, null);
-    }
-
-    /**
-     * Generic constructor builds a select box.
-     *
-     * @param name A String with the name for the select box.
-     * @param names An Object[] with the names.
-     * @param values An Object[] with the values.
-     * @param selected A boolean[] with the selected items.
-     */
-    public SelectorBox(String name, Object[] names, Object[] values,
-                       boolean[] selected)
-    {
-        this(name, names, values, 1, selected);
-    }
-
-    /**
-     * Primary constructor for everything.
-     *
-     * @param name A String with the name for the select box.
-     * @param names An Object[] with the names.
-     * @param values An Object[] with the values.
-     * @param size An int specifying the size.
-     * @param selected A boolean[] with the selected items.
-     */
-    public SelectorBox(String name, Object[] names, Object[] values, int size,
-                       boolean[] selected)
-    {
-        this.name = name;
-        this.names = names;
-        this.values = values;
-        this.size = size;
-        this.selected = selected;
-
-        sel = new Select(name, size);
-        sel.setName(name);
-        sel.setSize(size);
-    }
-
-    /**
-     * Pass in an array of selected items and the entire set of items
-     * and it will determine which items in the selected set are also
-     * in the entireset and then build a boolean[] up that is the same
-     * size as the entireSet with markings to tell whether or not the
-     * items are marked or not.  It uses toString().equalsIgnoreCase()
-     * on the Object in the Object[] to determine if the items are
-     * equal.
-     *
-     * @param selectedSet An Object[].
-     * @param entireSet An Object[].
-     */
-    public void buildBooleans(Object[] selectedSet, Object[] entireSet)
-    {
-        selected = new boolean[entireSet.length];
-        for (int j = 0; j < entireSet.length; j++)
-        {
-            Object r2 = entireSet[j];
-            for (int i = 0; i < selectedSet.length; i++)
-            {
-                Object r1 = selectedSet[i];
-                if (r1 != null && r2 != null &&
-                        r1.toString().equalsIgnoreCase(r2.toString()))
-                {
-                    selected[j] = true;
-                }
-            }
-        }
-    }
-
-    /**
-     * This builds out the select box at a certain size.  To use this
-     * element in WM, you simply build this object in your java code,
-     * put it into the context and then call $selectBox.toString(5).
-     *
-     * @param size An int with the size.
-     * @return A String with the HTML code.
-     */
-    public String toString(int size)
-    {
-        sel.setSize(size);
-        sel.setName(name);
-        for (int f = 0; f < values.length; f++)
-        {
-            Option opt = new Option((String) values[f]);
-            opt.addElement((String) names[f]);
-            if (selected != null && selected[f] == true)
-            {
-                opt.setSelected(true);
-            }
-            sel.addElement(opt);
-        }
-        String output = sel.toString();
-        reset();
-        return output;
-    }
-
-    /**
-     * Resets the internal state of the SelectorBox.
-     */
-    public void reset()
-    {
-        sel = new Select(name, size);
-    }
-
-    /**
-     * This builds out the select box at a certain size.  To use this
-     * element in WM, you simply build this object in your java code,
-     * put it into the context and then call $selectBox and it will
-     * build it with the default size of 1.
-     *
-     * @return A String with the HTML code.
-     */
-    public String toString()
-    {
-        return this.toString(size);
-    }
-
-    /**
-     * This allows you to set the multiple attribute to the select
-     * element.  Example usage from within WM is like this:
-     *
-     * <p>
-     * $selectBox.setMultiple(true).toString(4)
-     *
-     * @param val True if multiple selection should be allowed.
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setMultiple(boolean val)
-    {
-        sel.setMultiple(val);
-        return this;
-    }
-
-    /**
-     * This allows one to set the name= attribute to the select
-     * element.
-     *
-     * @param name A String with the name.
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setName(String name)
-    {
-        this.name = name;
-        sel.setName(name);
-        return this;
-    }
-
-    /**
-     * This allows one to set the size of the select element.
-     *
-     * @param size An int with the size.
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setSize(int size)
-    {
-        this.size = size;
-        sel.setSize(size);
-        return this;
-    }
-
-    /**
-     * This allows one to set an onChange attribute on the select tag
-     *
-     * @param script A string with the script to put in onChange
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setOnChange(String script)
-    {
-        sel.setOnChange(script);
-        return this;
-    }
-
-    /**
-     * This allows one to set the array of selected booleans.
-     *
-     * @param an array of booleans
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setSelected(boolean[] bools)
-    {
-        this.selected = bools;
-        return this;
-    }
-
-    /**
-     * This will set all elements as unselected, except for the
-     * element(s) with the given name.
-     *
-     * @param name The name to appear as selected.
-     * @return A SelectorBox (self).
-     */
-    public SelectorBox setSelected(Object name)
-    {
-        if (name != null)
-        {
-            selected = new boolean[names.length];
-            for (int i = 0; i < names.length; i++)
-            {
-                Object o = names[i];
-                if (o != null && o.toString().equalsIgnoreCase(name.toString()))
-                {
-                    selected[i] = true;
-                }
-            }
-        }
-        return this;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/TemplateInfo.java b/src/java/org/apache/turbine/util/template/TemplateInfo.java
deleted file mode 100644
index b15424b..0000000
--- a/src/java/org/apache/turbine/util/template/TemplateInfo.java
+++ /dev/null
@@ -1,324 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Map;
-import java.util.HashMap;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.uri.URIConstants;
-
-
-/**
- * This is a wrapper for Template specific information.  It's part of
- * the RunData object and can extract the information it needs to do
- * the job directly from the data.getParameters().
- *
- * @author <a href="mailto:mbryson@mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TemplateInfo
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplateInfo.class);
-
-
-    /* Constants for tempStorage hash map. */
-    public static final String NAVIGATION_TEMPLATE = "00navigation_template00";
-    public static final String LAYOUT_TEMPLATE = "00layout_template00";
-    public static final String SERVICE_NAME = "template_service";
-
-    /* Handle to the RunData object. */
-    private RunData data = null;
-
-    /* Place to store information about templates. */
-    private Map tempStorage = null;
-
-    /**
-     * Constructor
-     *
-     * @param RunData A Turbine Rundata object.
-     */
-    public TemplateInfo(RunData data)
-    {
-        this.data = data;
-        tempStorage = new HashMap(10);
-    }
-
-    /**
-     * Get the value of navigationTemplate.
-     *
-     * @return A String with the value of navigationTemplate.
-     */
-    public String getNavigationTemplate()
-    {
-        return getString(TemplateInfo.NAVIGATION_TEMPLATE);
-    }
-
-    /**
-     * Set the value of navigationTemplate.
-     *
-     * @param v Value to assign to navigationTemplate.
-     */
-    public void setNavigationTemplate(String v)
-    {
-        setTemp(TemplateInfo.NAVIGATION_TEMPLATE, v);
-    }
-
-    /**
-     * Get the value of screen for the RunData parameters.  This
-     * information comes from PathInfo or a QueryString. 
-     *
-     * @return A String with the value of screen.
-     */
-    public String getScreenTemplate()
-    {
-        return data.getParameters().getString(URIConstants.CGI_TEMPLATE_PARAM, null);
-    }
-
-    /**
-     * Set the value of screen.  This is really just a method to hide
-     * using the RunData Parameter.
-     *
-     * @param v Value to assign to screen.
-     */
-    public void setScreenTemplate(String v)
-    {
-        data.getParameters().setString(URIConstants.CGI_TEMPLATE_PARAM, v);
-
-        // We have changed the screen template so
-        // we should now update the layout template
-        // as well. We will use the template service
-        // to help us out.
-        try
-        {
-            setLayoutTemplate(TurbineTemplate.getLayoutTemplateName(v));
-        }
-        catch (Exception e)
-        {
-            /*
-             * do nothing.
-             */
-        }
-    }
-
-    /**
-     * Get the value of layout.
-     *
-     * @return A String with the value of layout.
-     */
-    public String getLayoutTemplate()
-    {
-        String value = getString(TemplateInfo.LAYOUT_TEMPLATE);
-        return value;
-    }
-
-    /**
-     * Set the value of layout.
-     *
-     * @param v Value to assign to layout.
-     */
-    public void setLayoutTemplate(String v)
-    {
-        setTemp(TemplateInfo.LAYOUT_TEMPLATE, v);
-    }
-
-    /**
-     * Get the value of Template context.  This will be cast to the
-     * proper Context by its Service.
-     *
-     * @param name The name of the template context.
-     * @return An Object with the Value of context.
-     */
-    public Object getTemplateContext(String name)
-    {
-        return getTemp(name);
-    }
-
-    /**
-     * Set the value of context.
-     *
-     * @param name The name of the template context.
-     * @param v Value to assign to context.
-     */
-    public void setTemplateContext(String name, Object v)
-    {
-        setTemp(name, v);
-    }
-
-    /**
-     * Get the value of service.
-     *
-     * @return A String with the value of service.
-     */
-    public String getService()
-    {
-        return getString(TemplateInfo.SERVICE_NAME);
-    }
-
-    /**
-     * Set the value of service.
-     *
-     * @param v Value to assign to service.
-     */
-    public void setService(String v)
-    {
-        setTemp(TemplateInfo.SERVICE_NAME, v);
-    }
-
-    /**
-     * Get an object from temporary storage.
-     *
-     * @param name A String with the name of the object.
-     * @return An Object.
-     */
-    public Object getTemp(String name)
-    {
-        return tempStorage.get(name);
-    }
-
-    /**
-     * Get an object from temporary storage, or a default value.
-     *
-     * @param name A String with the name of the object.
-     * @param def An Object, the default value.
-     * @return An Object.
-     */
-    public Object getTemp(String name, Object def)
-    {
-        try
-        {
-            Object val = tempStorage.get(name);
-            return (val != null) ? val : def;
-        }
-        catch (Exception e)
-        {
-            return def;
-        }
-    }
-
-    /**
-     * Put an object into temporary storage.
-     *
-     * @param name A String with the name of the object.
-     * @param value An Object, the value.
-     */
-    public void setTemp(String name, Object value)
-    {
-        tempStorage.put(name, value);
-    }
-
-    /**
-     * Return a String[] from the temp hash map.
-     *
-     * @param name A String with the name of the object.
-     * @return A String[].
-     */
-    public String[] getStringArray(String name)
-    {
-        String[] value = null;
-        Object object = getTemp(name, null);
-        if (object != null)
-        {
-            value = (String[]) object;
-        }
-        return value;
-    }
-
-    /**
-     * Return a String from the temp hash map.
-     *
-     * @param name A String with the name of the object.
-     * @return A String.
-     */
-    public String getString(String name)
-    {
-        String value = null;
-        Object object = getTemp(name, null);
-        if (object != null)
-        {
-            value = (String) object;
-        }
-        return value;
-    }
-
-    /**
-     * Remove an object from the  temporary storage.
-     *
-     * @param name A String with the name of the object.
-     * @return The object that was removed or <code>null</code>
-     *         if the name was not a key.
-     */
-    public Object removeTemp(String name)
-    {
-        return tempStorage.remove(name);
-    }
-
-    /*
-     * Returns all the available names in the temporary storage.
-     *
-     * @return A object array with the keys.
-     */
-    public Object[] getTempKeys()
-    {
-        return tempStorage.keySet().toArray();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/TemplateNavigation.java b/src/java/org/apache/turbine/util/template/TemplateNavigation.java
deleted file mode 100644
index f3f7744..0000000
--- a/src/java/org/apache/turbine/util/template/TemplateNavigation.java
+++ /dev/null
@@ -1,160 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.modules.NavigationLoader;
-
-import org.apache.turbine.services.template.TurbineTemplate;
-
-import org.apache.turbine.util.RunData;
-
-/**
- * Returns output of a Navigation module.  An instance of this is
- * placed in the WebMacro context by the WebMacroSiteLayout.  This
- * allows template authors to set the navigation template they'd like
- * to place in their templates.  Here's how it's used in a
- * template:
- *
- * <p><code>
- * $navigation.setTemplate("admin_navigation.wm")
- * </code>
- *
- * @author <a href="mbryson@mont.mindspring.com">Dave Bryson</a>
- * @version $Id$
- */
-public class TemplateNavigation
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplateNavigation.class);
-
-    /* The RunData object. */
-    private RunData data;
-
-    /* The name of the navigation template. */
-    private String template = null;     
-
-    /**
-     * Constructor
-     *
-     * @param data A Turbine RunData object.
-     */
-    public TemplateNavigation(RunData data)
-    {
-        this.data = data;
-    }
-
-    /**
-     * Set the template.
-     *
-     * @param template A String with the name of the navigation
-     * template.
-     * @return A TemplateNavigation (self).
-     */
-    public TemplateNavigation setTemplate(String template)
-    {
-        log.debug("setTemplate(" + template + ")");
-        this.template = template;
-        return this;
-    }
-
-    /**
-     * Builds the output of the navigation template.
-     *
-     * @return A String.
-     */
-    public String toString()
-    {
-        String module = null;
-        String returnValue = null;
-
-        try
-        {
-            if (template == null)
-            {
-                returnValue = "Navigation Template is null (Might be unset)";
-                throw new Exception(returnValue);
-            }
-
-            data.getTemplateInfo().setNavigationTemplate(template);
-            module = TurbineTemplate.getNavigationName(template);
-                
-            if (module == null)
-            {
-                returnValue = "Template Service returned null for Navigation Template " + template;
-                throw new Exception(returnValue);
-            }
-            
-            ConcreteElement results = 
-                    NavigationLoader.getInstance().eval(data, module);
-            returnValue = results.toString();
-        }
-        catch (Exception e)
-        {
-            if (returnValue == null)
-            {
-                returnValue = "Error processing navigation template: "
-                        + template + ", using module: " + module;
-            }
-            log.error(returnValue, e);
-        }
-
-        return returnValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/TemplatePageAttributes.java b/src/java/org/apache/turbine/util/template/TemplatePageAttributes.java
deleted file mode 100644
index 2f4ead5..0000000
--- a/src/java/org/apache/turbine/util/template/TemplatePageAttributes.java
+++ /dev/null
@@ -1,380 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.ecs.HtmlColor;
-import org.apache.ecs.html.Link;
-import org.apache.ecs.html.Meta;
-import org.apache.ecs.html.Script;
-import org.apache.ecs.html.Style;
-import org.apache.ecs.html.Title;
-import org.apache.turbine.services.pull.ApplicationTool;
-import org.apache.turbine.util.RunData;
-
-/**
- * Template context tool that will set various attributes of the HTML
- * page.  It is automatically placed in the Template context as
- * '$page'.  Here's an example of some uses:
- *
- * <p><pre><code>
- * $page.setBgColor("#ffffff");
- * $page.setBgColor("white");
- * $page.setBackground("/images/standardbg.jpeg");
- * $page.setTitle("This is the title!");
- * $page.setKeywords("turbine, cool, servlet framework");
- * $page.setStyleSheet("/style.css");
- * </code></pre></p>
- *
- * @author <a href="mailto:sean@somacity.com">Sean Legassick</a>
- * @deprecated Use HtmlPageAttributes along with VelocityOnlyLayout instead
- * @version $Id$
- */
-public class TemplatePageAttributes
-        implements ApplicationTool
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplatePageAttributes.class);
-
-    /** The RunData object. */
-    private RunData data = null;
-
-    /** The title. */
-    private String cachedTitle = null;
-
-    /**
-     * Default constructor. The init method must be called before use
-     */
-    public TemplatePageAttributes()
-    {
-    }
-
-    /**
-     * Construct a new instance with the given RunData object.
-     *
-     * @param data a RunData instance
-     */
-    public TemplatePageAttributes(RunData data)
-    {
-        this.data = data;
-    }
-
-    /**
-     * Initialise this instance with the given RunData object.
-     * (ApplicationTool method)
-     *
-     * @param data Assumed to be a RunData instance
-     */
-    public void init(Object data)
-    {
-        log.warn("This class is deprecated.  Use HtmlPageAttributes instead.");
-
-        // we blithely cast to RunData as the runtime error thrown
-        // if data is null or not RunData is appropriate.
-        this.data = (RunData) data;
-
-        // clear cached title
-        this.cachedTitle = null;
-    }
-
-    /**
-     * Refresh method - does nothing
-     */
-    public void refresh()
-    {
-        // empty
-    }
-
-    /**
-     * Set the title in the page.  This returns an empty String so
-     * that the template doesn't complain about getting a null return
-     * value.
-     *
-     * @param intitle A String with the title.
-     */
-    public TemplatePageAttributes setTitle(String intitle)
-    {
-        Title title = data.getPage().getTitle();
-        if (cachedTitle != null)
-        {
-            cachedTitle += intitle;
-        }
-        else
-        {
-            cachedTitle = intitle;
-        }
-        title.addElement(intitle);
-        return this;
-    }
-
-    /**
-     * Get the title in the page.  This returns an empty String if
-     * empty so that the template doesn't complain about getting a null
-     * return value.
-     *
-     * @return A String with the title.
-     */
-    public String getTitle()
-    {
-        if (cachedTitle == null)
-        {
-            return "";
-        }
-        return cachedTitle;
-    }
-
-    /**
-     * Adds a LINK to a CSS styleshet to the HEAD of the page.
-     *
-     * @param url A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setStyleSheet(String url)
-    {
-        data.getPage().getHead().addElement(new Link()
-                .setRel("stylesheet").setType("text/css").setHref(url));
-        return this;
-    }
-
-    /**
-     * Adds a LINK to a CSS stylesheet to the HEAD of the page, allowing the
-     * media type to be specified.
-     *
-     * @param url The value for the <code>href</code> attribute.
-     * @param media The value for the <code>media</code> attribute.
-     * @return a <code>TemplatePageAttributes</code> (self).
-     */
-    public TemplatePageAttributes setStyleSheet(String url, String media)
-    {
-        data.getPage().getHead().addElement(new Link().setRel("stylesheet")
-                .setType("text/css").setMedia(media).setHref(url));
-        return this;
-    }
-
-    /**
-     * Adds a STYLE element to the HEAD of the page with the provided content.
-     *
-     * @param styleText The contents of the <code>style</code> tag.
-     * @return a <code>TemplatePageAttributes</code> (self).
-     */
-    public TemplatePageAttributes setStyle(String styleText)
-    {
-        data.getPage().getHead().addElement(new Style("text/css", styleText));
-        return this;
-    }
-
-    /**
-     * Adds a LINK to a javascript file to the HEAD of the page.
-     *
-     * @param url A String.
-     * @return A TemplatePageAttributesEx (self).
-     */
-    public TemplatePageAttributes setScript(String url)
-    {
-        data.getPage().getHead().addElement(new Script().setSrc(url)
-                .setType("text/javascript").setLanguage("JavaScript"));
-        return this;
-    }
-
-    /**
-     * Set a keywords META tag in the HEAD of the page.
-     *
-     * @param keywords A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setKeywords(String keywords)
-    {
-        data.getPage().getHead().addElement(
-                new Meta().setName("keywords").setContent(keywords));
-        return this;
-    }
-
-    /**
-     * Sets a HttpEquiv META tag in the HEAD of the page, usage:
-     * <br><code>setHttpEquiv("refresh", "5; URL=http://localhost/nextpage.html")</code>
-     * <br><code>setHttpEquiv("Expires", "Tue, 20 Aug 1996 14:25:27 GMT")</code>
-     *
-     * @param httpEquiv The value to use for the http-equiv attribute.
-     * @param content   The text for the content attribute of the meta tag.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setHttpEquiv(String httpEquiv, String content)
-    {
-        data.getPage().getHead().addElement(
-                new Meta().setHttpEquiv(httpEquiv).setContent(content));
-        return this;
-    }
-
-    /**
-     * Add a description META tag to the HEAD of the page.
-     *
-     * @param description A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setDescription(String description)
-    {
-        data.getPage().getHead().addElement(
-                new Meta().setName("description").setContent(description));
-        return this;
-    }
-
-    /**
-     * Set the background image for the BODY tag.
-     *
-     * @param url A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setBackground(String url)
-    {
-        data.getPage().getBody().setBackground(url);
-        return this;
-    }
-
-    /**
-     * Set the background color for the BODY tag.  You can use either
-     * color names or color values (e.g. "white" or "#ffffff" or
-     * "ffffff").
-     *
-     * @param color A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setBgColor(String color)
-    {
-        String hexColor = HtmlColor.getColor(color);
-        if (hexColor == null)
-        {
-            hexColor = color;
-        }
-        data.getPage().getBody().setBgColor(hexColor);
-        return this;
-    }
-
-    /**
-     * Set the text color for the BODY tag.  You can use either color
-     * names or color values (e.g. "white" or "#ffffff" or "ffffff").
-     *
-     * @param color A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setTextColor(String color)
-    {
-        String hexColor = HtmlColor.getColor(color);
-        if (hexColor == null)
-        {
-            hexColor = color;
-        }
-        data.getPage().getBody().setText(hexColor);
-        return this;
-    }
-
-    /**
-     * Set the link color for the BODY tag.  You can use either color
-     * names or color values (e.g. "white" or "#ffffff" or "ffffff").
-     *
-     * @param color A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setLinkColor(String color)
-    {
-        String hexColor = HtmlColor.getColor(color);
-        if (hexColor == null)
-        {
-            hexColor = color;
-        }
-        data.getPage().getBody().setLink(hexColor);
-        return this;
-    }
-
-    /**
-     * Set the visited link color for the BODY tag.
-     *
-     * @param color A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes setVlinkColor(String color)
-    {
-        String hexColor = HtmlColor.getColor(color);
-        if (hexColor == null)
-        {
-            hexColor = color;
-        }
-        data.getPage().getBody().setVlink(hexColor);
-        return this;
-    }
-
-    /**
-     * Adds an attribute to the BODY tag.
-     *
-     * @param name A String.
-     * @param value A String.
-     * @return A TemplatePageAttributes (self).
-     */
-    public TemplatePageAttributes addAttribute(String name, String value)
-    {
-        data.getPage().getBody().addAttribute(name, value);
-        return this;
-    }
-
-    /**
-     * A dummy toString method that returns an empty string.
-     *
-     * @return An empty String ("").
-     */
-    public String toString()
-    {
-        return "";
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/TemplateScreen.java b/src/java/org/apache/turbine/util/template/TemplateScreen.java
deleted file mode 100644
index 845ba14..0000000
--- a/src/java/org/apache/turbine/util/template/TemplateScreen.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.ecs.ConcreteElement;
-
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.util.RunData;
-
-/**
- * Returns output of a Screen module.  An instance of this is
- * placed in the Velocity context by the VelocityDirectLayout.  This
- * allows the screen to be executed only at rendering.
- * Here's how it's used in a template:
- *
- * <p>
- * <code>
- * $screen_placeholder
- * </code>
- * <p>
- * <code>
- * $screen_placeholder.setScreen("Test")
- * </code>
- * </p>
- *
- * @author <a href="raphael@apache.org">Raphaël Luta</a>
- * @version $Id$
- */
-public class TemplateScreen
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TemplateScreen.class);
-
-    /* The RunData object. */
-    private RunData data;
-
-    /* The name of the screen template. */
-    private String screen;
-
-    /**
-     * Constructor
-     *
-     * @param data A Turbine RunData object.
-     */
-    public TemplateScreen(RunData data)
-    {
-        this.data = data;
-        this.screen = data.getScreen();
-    }
-
-    /**
-     * Set the screen.
-     *
-     * @param screen A String with the name of the screen module
-     * @return A TemplateScreen (self).
-     */
-    public TemplateScreen setScreen(String screen)
-    {
-        this.screen = screen;
-        return this;
-    }
-
-    /**
-     * Builds the output of the navigation template.
-     *
-     * @return A String.
-     */
-    public String toString()
-    {
-        String returnValue = "";
-
-        try
-        {
-            ConcreteElement results = ScreenLoader.getInstance()
-                    .eval(data, this.screen);
-
-            if (results != null)
-            {
-                returnValue = results.toString();
-            }
-        }
-        catch (Exception e)
-        {
-            log.error(e);
-        }
-
-        return returnValue;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java b/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
deleted file mode 100644
index 6f1a0cd..0000000
--- a/src/java/org/apache/turbine/util/template/TemplateSecurityCheck.java
+++ /dev/null
@@ -1,247 +0,0 @@
-package org.apache.turbine.util.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.services.template.TurbineTemplate;
-import org.apache.turbine.util.RunData;
-
-/**
- * Utility class to help check for proper authorization when using
- * template screens.  Sample usages:
- *
- * <p><pre><code>
- * TemplateSecurityCheck secCheck = new TemplateSecurityCheck( data );
- * secCheck.setMessage( "Sorry, you do not have permission to " +
- *                      "access this area." );
- * secCheck.setFailTemplate("login.wm");
- * if ( !secCheck.hasRole("ADMIN") )
- *     return;
- * </pre></code>
- *
- * @author <a href="mbryson@mont.mindspring.com">Dave Bryson</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TemplateSecurityCheck
-{
-    private String message =
-            "Sorry, you do not have permission to access this area.";
-    private String failScreen = TurbineTemplate.getDefaultScreen();
-    private String failTemplate;
-    private RunData data = null;
-
-    /**
-     * Constructor.
-     *
-     * @param data A Turbine RunData object.
-     * @param message A String with the message to display upon
-     * failure.
-     */
-    public TemplateSecurityCheck(RunData data, String message)
-    {
-        this.data = data;
-        this.message = message;
-    }
-
-    /**
-     * Generic Constructor.
-     *
-     * @param data A Turbine RunData object.
-     */
-    public TemplateSecurityCheck(RunData data)
-    {
-        this.data = data;
-    }
-
-    /**
-     * Does the User have this role?
-     *
-     * @param role The role to be checked.
-     * @return Whether the user has the role.
-     * @exception Exception Trouble validating.
-     */
-    public boolean hasRole(Role role)
-        throws Exception
-    {
-        if (!checkLogin())
-        {
-            return false;
-        }
-
-        if (data.getACL() == null || !data.getACL().hasRole(role))
-        {
-            data.setScreen(getFailScreen());
-            data.getTemplateInfo().setScreenTemplate(getFailTemplate());
-            data.setMessage(getMessage());
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Does the User have this permission?
-     *
-     * @param permission The permission to be checked.
-     * @return Whether the user has the permission.
-     * @exception Exception Trouble validating.
-     */
-    public boolean hasPermission(Permission permission)
-        throws Exception
-    {
-        boolean value = true;
-        if (data.getACL() == null || !data.getACL().hasPermission(permission))
-        {
-            data.setScreen(getFailScreen());
-            data.getTemplateInfo().setScreenTemplate(getFailTemplate());
-            data.setMessage(getMessage());
-            value = false;
-        }
-
-        return value;
-    }
-
-    /**
-     * Check that the user has logged in.
-     *
-     * @return True if user has logged in.
-     * @exception Exception, a generic exception.
-     */
-    public boolean checkLogin()
-        throws Exception
-    {
-        boolean value = true;
-
-        // Do it like the AccessController
-        if (!TurbineSecurity.isAnonymousUser(data.getUser())
-            && !data.getUser().hasLoggedIn())
-        {
-            data.setMessage(Turbine.getConfiguration()
-                .getString(TurbineConstants.LOGIN_MESSAGE));
-
-            data.getTemplateInfo().setScreenTemplate(getFailTemplate());
-            value = false;
-        }
-
-        return value;
-    }
-
-    /**
-     * Set the message that should be displayed.  This is initialized
-     * in the constructor.
-     *
-     * @param v A String with the message that should be displayed.
-     */
-    public void setMessage(String v)
-    {
-        this.message = v;
-    }
-
-    /**
-     * Get the message that should be displayed.  This is initialized
-     * in the constructor.
-     *
-     * @return A String with the message that should be displayed.
-     */
-    public String getMessage()
-    {
-        return message;
-    }
-
-    /**
-     * Get the value of failScreen.
-     *
-     * @return A String with the value of failScreen.
-     */
-    public String getFailScreen()
-    {
-        return failScreen;
-    }
-
-    /**
-     * Set the value of failScreen.
-     *
-     * @param v A String with the value of failScreen.
-     */
-    public void setFailScreen(String v)
-    {
-        this.failScreen = v;
-    }
-
-    /**
-     * Get the value of failTemplate.
-     *
-     * @return A String with the value of failTemplate.
-     */
-    public String getFailTemplate()
-    {
-        return failTemplate;
-    }
-
-    /**
-     * Set the value of failTemplate.
-     *
-     * @param v A String with the value of failTemplate.
-     */
-    public void setFailTemplate(String v)
-    {
-        this.failTemplate = v;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/template/package.html b/src/java/org/apache/turbine/util/template/package.html
deleted file mode 100644
index 56246b8..0000000
--- a/src/java/org/apache/turbine/util/template/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Template related utilities.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/upload/FileItem.java b/src/java/org/apache/turbine/util/upload/FileItem.java
deleted file mode 100644
index f0a606f..0000000
--- a/src/java/org/apache/turbine/util/upload/FileItem.java
+++ /dev/null
@@ -1,477 +0,0 @@
-package org.apache.turbine.util.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.UnsupportedEncodingException;
-import javax.activation.DataSource;
-
-import org.apache.turbine.services.uniqueid.TurbineUniqueId;
-import org.apache.turbine.services.upload.TurbineUpload;
-
-/**
- * <p> This class represents a file that was received by Turbine using
- * <code>multipart/form-data</code> POST request.
- *
- * <p> After retrieving an instance of this class from the {@link
- * org.apache.turbine.util.ParameterParser ParameterParser} (see
- * {@link org.apache.turbine.util.ParameterParser#getFileItem(String)
- * ParameterParser.getFileItem(String)} and {@link
- * org.apache.turbine.util.ParameterParser#getFileItems(String)
- * ParameterParser.getFileItems(String)}) you can use it to acces the
- * data that was sent by the browser.  You may either request all
- * contents of file at once using {@link #get()} or request an {@link
- * java.io.InputStream InputStream} with {@link #getStream()} and
- * process the file without attempting to load it into memory, which
- * may come handy with large files.
- *
- * Implements the javax.activation.DataSource interface (which allows
- * for example the adding of a FileItem as an attachment to a multipart
- * email).
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @version $Id$
- * @deprecated use commons-fileupload instead
- */
-public class FileItem implements DataSource
-{
-    /**
-     * The maximal size of request that will have it's elements stored
-     * in memory.
-     */
-    public static final int DEFAULT_UPLOAD_SIZE_THRESHOLD = 10240;
-
-    /** The original filename in the user's filesystem. */
-    protected String fileName;
-
-    /**
-     * The content type passed by the browser or <code>null</code> if
-     * not defined.
-     */
-    protected String contentType;
-
-    /** Cached contents of the file. */
-    protected byte[] content;
-
-    /** Temporary storage location. */
-    protected File storeLocation;
-
-    /** Temporary storage for in-memory files. */
-    protected ByteArrayOutputStream byteStream;
-
-    /**
-     * Constructs a new <code>FileItem</code>.
-     *
-     * <p>Use {@link #newInstance(String,String,String,int)} to
-     * instantiate <code>FileItems</code>.
-     *
-     * @param fileName The original filename in the user's filesystem.
-     * @param contentType The content type passed by the browser or
-     * <code>null</code> if not defined.
-     */
-    protected FileItem(String fileName, String contentType)
-    {
-        this.fileName = fileName;
-        this.contentType = contentType;
-    }
-
-    /**
-     * Returns the original filename in the user's filesystem.
-     * (implements DataSource method)
-     *
-     * @return The original filename in the user's filesystem.
-     */
-    public String getName()
-    {
-        return getFileName();
-    }
-
-    /**
-     * Returns the original filename in the user's filesystem.
-     *
-     * @return The original filename in the user's filesystem.
-     */
-    public String getFileName()
-    {
-        return fileName;
-    }
-
-    /**
-     * Returns the content type passed by the browser or
-     * <code>null</code> if not defined. (implements
-     * DataSource method).
-     *
-     * @return The content type passed by the browser or
-     * <code>null</code> if not defined.
-     */
-    public String getContentType()
-    {
-        return contentType;
-    }
-
-    /**
-     * Provides a hint if the file contents will be read from memory.
-     *
-     * @return <code>True</code> if the file contents will be read
-     * from memory.
-     */
-    public boolean inMemory()
-    {
-        return (content != null || byteStream != null);
-    }
-
-    /**
-     * Returns the size of the file.
-     *
-     * @return The size of the file.
-     */
-    public long getSize()
-    {
-        if (storeLocation != null)
-        {
-            return storeLocation.length();
-        }
-        else if (byteStream != null)
-        {
-            return byteStream.size();
-        }
-        else
-        {
-            return content.length;
-        }
-    }
-
-    /**
-     * Returns the contents of the file as an array of bytes.  If the
-     * contents of the file were not yet cached int the memory, they
-     * will be loaded from the disk storage and chached.
-     *
-     * @return The contents of the file as an array of bytes.
-     */
-    public byte[] get()
-    {
-        if (content == null)
-        {
-            if (storeLocation != null)
-            {
-                content = new byte[(int) getSize()];
-                try
-                {
-                    FileInputStream fis = new FileInputStream(storeLocation);
-                    fis.read(content);
-                }
-                catch (Exception e)
-                {
-                    content = null;
-                }
-            }
-            else
-            {
-                content = byteStream.toByteArray();
-                byteStream = null;
-            }
-        }
-        return content;
-    }
-
-    /**
-     * Returns the contents of the file as a String, using default
-     * encoding.  This method uses {@link #get()} to retrieve the
-     * contents of the file.
-     *
-     * @return The contents of the file.
-     */
-    public String getString()
-    {
-        return new String(get());
-    }
-
-    /**
-     * Returns the contents of the file as a String, using specified
-     * encoding.  This method uses {@link #get()} to retireve the
-     * contents of the file.<br>
-     *
-     * @param encoding The encoding to use.
-     * @return The contents of the file.
-     * @exception UnsupportedEncodingException.
-     */
-    public String getString(String encoding)
-            throws UnsupportedEncodingException
-    {
-        return new String(get(), encoding);
-    }
-
-    /**
-     * Returns an {@link java.io.InputStream InputStream} that can be
-     * used to retrieve the contents of the file. (implements DataSource
-     * method)
-     *
-     * @return An {@link java.io.InputStream InputStream} that can be
-     * used to retrieve the contents of the file.
-     * @exception Exception, a generic exception.
-     */
-    public InputStream getInputStream()
-            throws IOException
-    {
-        return getStream();
-    }
-
-    /**
-     * Returns an {@link java.io.InputStream InputStream} that can be
-     * used to retrieve the contents of the file.
-     *
-     * @return An {@link java.io.InputStream InputStream} that can be
-     * used to retrieve the contents of the file.
-     * @exception Exception, a generic exception.
-     */
-    public InputStream getStream()
-            throws IOException
-    {
-        if (content == null)
-        {
-            if (storeLocation != null)
-            {
-                return new FileInputStream(storeLocation);
-            }
-            else
-            {
-                content = byteStream.toByteArray();
-                byteStream = null;
-            }
-        }
-        return new ByteArrayInputStream(content);
-    }
-
-    /**
-     * Returns the {@link java.io.File} objects for the FileItems's
-     * data temporary location on the disk.  Note that for
-     * <code>FileItems</code> that have their data stored in memory
-     * this method will return <code>null</code>.  When handling large
-     * files, you can use {@link java.io.File#renameTo(File)} to
-     * move the file to new location without copying the data, if the
-     * source and destination locations reside within the same logical
-     * volume.
-     *
-     * @return A File.
-     */
-    public File getStoreLocation()
-    {
-        return storeLocation;
-    }
-
-    /**
-     * Removes the file contents from the temporary storage.
-     */
-    protected void finalize()
-    {
-        if (storeLocation != null && storeLocation.exists())
-        {
-            storeLocation.delete();
-        }
-    }
-
-    /**
-     * Returns an {@link java.io.OutputStream OutputStream} that can
-     * be used for storing the contents of the file.
-     * (implements DataSource method)
-     *
-     * @return an {@link java.io.OutputStream OutputStream} that can be
-     * used for storing the contensts of the file.
-     * @exception IOException.
-     */
-    public OutputStream getOutputStream()
-            throws IOException
-    {
-        if (storeLocation == null)
-        {
-            return byteStream;
-        }
-        else
-        {
-            return new FileOutputStream(storeLocation);
-        }
-    }
-
-    /**
-     * Instantiates a FileItem.  It uses <code>requestSize</code> to
-     * decide what temporary storage approach the new item should
-     * take.  The largest request that will have its items cached in
-     * memory can be configured in
-     * <code>TurbineResources.properties</code> in the entry named
-     * <code>file.upload.size.threshold</code>
-     *
-     * @param path A String.
-     * @param name The original filename in the user's filesystem.
-     * @param contentType The content type passed by the browser or
-     * <code>null</code> if not defined.
-     * @param requestSize The total size of the POST request this item
-     * belongs to.
-     * @return A FileItem.
-     */
-    public static FileItem newInstance(String path,
-                                       String name,
-                                       String contentType,
-                                       int requestSize)
-    {
-        FileItem item = new FileItem(name, contentType);
-        if (requestSize > TurbineUpload.getSizeThreshold())
-        {
-            String instanceName = TurbineUniqueId.getInstanceId();
-            String fileName = TurbineUniqueId.getUniqueId();
-            fileName = instanceName + "_upload_" + fileName + ".tmp";
-            fileName = path + "/" + fileName;
-            item.storeLocation = new File(fileName);
-            item.storeLocation.deleteOnExit();
-        }
-        else
-        {
-            item.byteStream = new ByteArrayOutputStream();
-        }
-        return item;
-    }
-
-    /**
-     * A convenience method to write an uploaded
-     * file to disk. The client code is not concerned
-     * whether or not the file is stored in memory,
-     * or on disk in a temporary location. They just
-     * want to write the uploaded file to disk.
-     *
-     * @param String full path to location where uploaded
-     *               should be stored.
-     */
-    public void write(String file) throws Exception
-    {
-        if (inMemory())
-        {
-            FileOutputStream fout = null;
-            try
-            {
-                fout = new FileOutputStream(file);
-                fout.write(get());
-            }
-            finally
-            {
-                if (fout != null)
-                {
-                    fout.close();
-                }
-            }
-        }
-        else if (storeLocation != null)
-        {
-            /*
-             * The uploaded file is being stored on disk
-             * in a temporary location so move it to the
-             * desired file.
-             */
-            if (storeLocation.renameTo(new File(file)) == false)
-            {
-                BufferedInputStream in = null;
-                BufferedOutputStream out = null;
-                try
-                {
-                    in = new BufferedInputStream(
-                            new FileInputStream(storeLocation));
-                    out = new BufferedOutputStream(new FileOutputStream(file));
-                    byte[] bytes = new byte[2048];
-                    int s = 0;
-                    while ((s = in.read(bytes)) != -1)
-                    {
-                        out.write(bytes, 0, s);
-                    }
-                }
-                finally
-                {
-                    try
-                    {
-                        in.close();
-                    }
-                    catch (Exception e)
-                    {
-                        // ignore
-                    }
-                    try
-                    {
-                        out.close();
-                    }
-                    catch (Exception e)
-                    {
-                        // ignore
-                    }
-                }
-            }
-        }
-        else
-        {
-            /*
-             * For whatever reason we cannot write the
-             * file to disk.
-             */
-            throw new Exception("Cannot write uploaded file to disk!");
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/upload/MultipartStream.java b/src/java/org/apache/turbine/util/upload/MultipartStream.java
deleted file mode 100644
index 9e2e21d..0000000
--- a/src/java/org/apache/turbine/util/upload/MultipartStream.java
+++ /dev/null
@@ -1,762 +0,0 @@
-package org.apache.turbine.util.upload;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-/**
- * This class can be used to process data streams conforming to MIME
- * 'multipart' format as defined in <a
- * href="http://rf.cs/rfc1521.html">RFC&nbsp;1251</a>.  Arbitrary
- * large amouns of data in the stream can be processed under constant
- * memory usage.
- *
- * <p>The format of the stream is defined in the following way:<br>
- *
- * <code>
- *   multipart-body := preamble 1*encapsulation close-delimiter epilogue<br>
- *   encapsulation := delimiter body CRLF<br>
- *   delimiter := "--" boundary CRLF<br>
- *   close-delimiter := "--" boudary "--"<br>
- *   preamble := &lt;ignore&gt;<br>
- *   epilogue := &lt;ignore&gt;<br>
- *   body := header-part CRLF body-part<br>
- *   header-part := 1*header CRLF<br>
- *   header := header-name ":" header-value<br>
- *   header-name := &lt;printable ascii characters except ":"&gt;<br>
- *   header-value := &lt;any ascii characters except CR & LF&gt;<br>
- *   body-data := &lt;arbitrary data&gt;<br>
- * </code>
- *
- * <p>Note that body-data can contain another mulipart entity.  There
- * is limited support for single pass processing of such nested
- * streams.  The nested stream is <strong>required</strong> to have a
- * boundary token of the same length as the parent stream (see {@link
- * #setBoundary(byte[])}).
- *
- * <p>Here is an exaple of usage of this class.<br>
- *
- * <pre>
- *    try {
- *        MultipartStream multipartStream = new MultipartStream(input,
- *                                                              boundary);
- *        boolean nextPart = malitPartStream.skipPreamble();
- *        OutputStream output;
- *        while(nextPart) {
- *            header = chunks.readHeader();
- *            // process headers
- *            // create some output stream
- *            multipartStream.readBodyPart(output);
- *            nextPart = multipartStream.readBoundary();
- *        }
- *    } catch(MultipartStream.MalformedStreamException e) {
- *          // the stream failed to follow required syntax
- *    } catch(IOException) {
- *          // a read or write error occurred
- *    }
- * </pre>
- *
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- * @deprecated use commons-fileupload instead
- */
-public class MultipartStream
-{
-    /**
-     * The maximum lenght of <code>header-part</code> that will be
-     * processed (10 kilobytes = 10240 bytes.
-     )*/
-    public static final int HEADER_PART_SIZE_MAX = 10240;
-
-    /** The stream were data is read from. */
-    protected InputStream input;
-
-    /**
-     * The lenght of boundary token plus leading <code>CRLF--</code>.
-     */
-    protected int boundaryLength;
-
-    /**
-     * The amount of data that must be kept in the buffer in order to
-     * detect delimiters reliably.
-     */
-    protected int keepRegion;
-
-    /** A byte sequence that partitions the stream. */
-    protected byte[] boundary;
-
-    /** The lenght of the buffer used for processing. */
-    protected int bufSize;
-
-    /** The default lenght of the buffer used for processing. */
-    protected static final int DEFAULT_BUFSIZE = 4096;
-
-    /** The buffer used for processing. */
-    protected byte[] buffer;
-
-    /**
-     * The index of first valid character in the buffer.
-     *
-     * 0 <= head < bufSize
-     */
-    protected int head;
-
-    /**
-     * The index of last valid characer in the buffer + 1.
-     *
-     * 0 <= tail <= bufSize
-     */
-    protected int tail;
-
-    /**
-     * A byte sequence that marks the end of <code>header-part</code>
-     * (<code>CRLFCRLF</code>).
-     */
-    protected static final byte[] HEADER_SEPARATOR = {0x0D, 0x0A, 0x0D, 0x0A};
-
-    /**
-     * A byte sequence that that follows a delimiter that will be
-     * followed by an encapsulation (<code>CRLF</code>).
-     */
-    protected static final byte[] FIELD_SEPARATOR = {0x0D, 0x0A};
-
-    /**
-     * A byte sequence that that follows a delimiter of the last
-     * encapsulation in the stream (<code>--</code>).
-     */
-    protected static final byte[] STREAM_TERMINATOR = {0x2D, 0x2D};
-
-    /**
-     * Constructs a MultipartStream with a custom size buffer.
-     *
-     * <p>Note that the buffer must be at least big enough to contain
-     * the boundary string, plus 4 characters for CR/LF and double
-     * dash, plus at least one byte of data.  Too small buffer size
-     * setting will degrade performance.
-     *
-     * @param input The <code>InputStream</code> to serve as a data
-     * source.
-     * @param boundary The token used for dividing the stream into
-     * <code>encapsulations</code>.
-     * @param bufSize The size of the buffer to be used in bytes.
-     * @exception MalformedStreamException.
-     * @exception IOException.
-     */
-    public MultipartStream(InputStream input,
-                           byte[] boundary,
-                           int bufSize)
-            throws MalformedStreamException,
-            IOException
-    {
-        this.input = input;
-        this.bufSize = bufSize;
-        this.buffer = new byte[bufSize];
-
-        // We prepend CR/LF to the boundary to chop trailng CR/LF from
-        // body-data tokens.
-        this.boundary = new byte[boundary.length + 4];
-        this.boundaryLength = boundary.length + 4;
-        this.keepRegion = boundary.length + 3;
-        this.boundary[0] = 0x0D;
-        this.boundary[1] = 0x0A;
-        this.boundary[2] = 0x2D;
-        this.boundary[3] = 0x2D;
-        System.arraycopy(boundary, 0, this.boundary, 4, boundary.length);
-
-        head = 0;
-        tail = 0;
-    }
-
-    /**
-     * Constructs a MultipartStream with a defalut size buffer.
-     *
-     * @param input The <code>InputStream</code> to serve as a data
-     * source.
-     * @param boundary The token used for dividing the stream into
-     * <code>encapsulations</code>.
-     * @exception IOException.
-     */
-    public MultipartStream(InputStream input,
-                           byte[] boundary)
-            throws IOException
-    {
-        this(input, boundary, DEFAULT_BUFSIZE);
-    }
-
-    /**
-     * Reads a byte from the <code>buffer</code>, and refills it as
-     * neccessary.
-     *
-     * @return Next byte from the input stream.
-     * @exception IOException, if there isn't any more data available.
-     */
-    public byte readByte()
-            throws IOException
-    {
-        // Buffer depleted ?
-        if (head == tail)
-        {
-            head = 0;
-            // Refill.
-            tail = input.read(buffer, head, bufSize);
-            if (tail == -1)
-            {
-                // No more data available.
-                throw new IOException("No more data is available");
-            }
-        }
-        return buffer[head++];
-    }
-
-    /**
-     * Skips a <code>boundary</code> token, and checks wether more
-     * <code>encapsulations</code> are contained in the stream.
-     *
-     * @return <code>True</code> if there are more encapsulations in
-     * this stream.
-     * @exception MalformedStreamException if the stream ends
-     * unexpecetedly or fails to follow required syntax.
-     */
-    public boolean readBoundary()
-            throws MalformedStreamException
-    {
-        byte[] marker = new byte[2];
-        boolean nextChunk = false;
-
-        head += boundaryLength;
-        try
-        {
-            marker[0] = readByte();
-            marker[1] = readByte();
-            if (arrayequals(marker, STREAM_TERMINATOR, 2))
-            {
-                nextChunk = false;
-            }
-            else if (arrayequals(marker, FIELD_SEPARATOR, 2))
-            {
-                nextChunk = true;
-            }
-            else
-            {
-                throw new MalformedStreamException("Unexpected characters follow a boundary");
-            }
-        }
-        catch (IOException e)
-        {
-            throw new MalformedStreamException("Stream ended unexpectedly");
-        }
-        return nextChunk;
-    }
-
-    /**
-     * Changes the boundary token used for partitioning the stream.
-     *
-     * <p>This method allows single pass processing of nested
-     * multipart streams.
-     *
-     * <p>The boundary token of the nested stream is
-     * <code>required</code> to be of the same length as the boundary
-     * token in parent stream.
-     *
-     * <p>Restoring parent stream boundary token after processing of a
-     * nested stream is left ot the application. <br>
-     *
-     * @param boundary A boundary to be used for parsing of the nested
-     * stream.
-     * @exception IllegalBoundaryException, if <code>boundary</code>
-     * has diffrent lenght than the one being currently in use.
-     */
-    public void setBoundary(byte[] boundary)
-            throws IllegalBoundaryException
-    {
-        if (boundary.length != boundaryLength - 4)
-        {
-            throw new IllegalBoundaryException("The length of a boundary token can not be changed");
-        }
-        System.arraycopy(boundary, 0, this.boundary, 4, boundary.length);
-    }
-
-    /**
-     * <p>Reads <code>header-part</code> of the current
-     * <code>encapsulation</code>
-     *
-     * <p>Headers are returned verbatim to the input stream, including
-     * traling <code>CRLF</code> marker. Parsing is left to the
-     * application.
-     *
-     * <p><strong>TODO</strong> allow limiting maximum header size to
-     * protect against abuse.<br>
-     *
-     * @return <code>header-part</code> of the current encapsulation.
-     * @exception MalformedStreamException, if the stream ends
-     * unexpecetedly.
-     */
-    public String readHeaders()
-            throws MalformedStreamException
-    {
-        int i = 0;
-        byte b[] = new byte[1];
-        StringBuffer buf = new StringBuffer();
-        int sizeMax = HEADER_PART_SIZE_MAX;
-        int size = 0;
-        while (i < 4)
-        {
-            try
-            {
-                b[0] = readByte();
-            }
-            catch (IOException e)
-            {
-                throw new MalformedStreamException("Stream ended unexpectedly");
-            }
-            size++;
-            if (b[0] == HEADER_SEPARATOR[i])
-            {
-                i++;
-            }
-            else
-            {
-                i = 0;
-            }
-            if (size <= sizeMax)
-            {
-                buf.append(new String(b));
-            }
-        }
-        return buf.toString();
-    }
-
-    /**
-     * Reads <code>body-data</code> from the current
-     * <code>encapsulation</code> and writes its contents into the
-     * output <code>Stream</code>.
-     *
-     * <p>Arbitrary large amouts of data can be processed by this
-     * method using a constant size buffer. (see {@link
-     * #MultipartStream(InputStream,byte[],int) constructor}).
-     *
-     * @param output The <code>Stream</code> to write data into.
-     * @return the amount of data written.
-     * @exception MalformedStreamException
-     * @exception IOException
-     */
-    public int readBodyData(OutputStream output)
-            throws MalformedStreamException,
-            IOException
-    {
-        boolean done = false;
-        int pad;
-        int pos;
-        int bytesRead;
-        int total = 0;
-        while (!done)
-        {
-            // Is boundary token present somewere in the buffer?
-            pos = findSeparator();
-            if (pos != -1)
-            {
-                // Write the rest of the data before the boundary.
-                output.write(buffer, head, pos - head);
-                total += pos - head;
-                head = pos;
-                done = true;
-            }
-            else
-            {
-                // Determine how much data should be kept in the
-                // buffer.
-                if (tail - head > keepRegion)
-                {
-                    pad = keepRegion;
-                }
-                else
-                {
-                    pad = tail - head;
-                }
-                // Write out the data belonging to the body-data.
-                output.write(buffer, head, tail - head - pad);
-
-                // Move the data to the beging of the buffer.
-                total += tail - head - pad;
-                System.arraycopy(buffer, tail - pad, buffer, 0, pad);
-
-                // Refill buffer with new data.
-                head = 0;
-                bytesRead = input.read(buffer, pad, bufSize - pad);
-
-                // [pprrrrrrr]
-                if (bytesRead != -1)
-                {
-                    tail = pad + bytesRead;
-                }
-                else
-                {
-                    // The last pad amount is left in the buffer.
-                    // Boundary can't be in there so write out the
-                    // data you have and signal an error condition.
-                    output.write(buffer, 0, pad);
-                    output.flush();
-                    total += pad;
-                    throw new MalformedStreamException("Stream ended unexpectedly");
-                }
-            }
-        }
-        output.flush();
-        return total;
-    }
-
-    /**
-     * Reads <code>body-data</code> from the current
-     * <code>encapsulation</code> and discards it.
-     *
-     * <p>Use this method to skip encapsulations you don't need or
-     * don't understand.
-     *
-     * @return The amount of data discarded.
-     * @exception MalformedStreamException
-     * @exception IOException
-     */
-    public int discardBodyData()
-            throws MalformedStreamException,
-            IOException
-    {
-        boolean done = false;
-        int pad;
-        int pos;
-        int bytesRead;
-        int total = 0;
-        while (!done)
-        {
-            // Is boundary token present somewere in the buffer?
-            pos = findSeparator();
-            if (pos != -1)
-            {
-                // Write the rest of the data before the boundary.
-                total += pos - head;
-                head = pos;
-                done = true;
-            }
-            else
-            {
-                // Determine how much data should be kept in the
-                // buffer.
-                if (tail - head > keepRegion)
-                {
-                    pad = keepRegion;
-                }
-                else
-                {
-                    pad = tail - head;
-                }
-                total += tail - head - pad;
-
-                // Move the data to the beging of the buffer.
-                System.arraycopy(buffer, tail - pad, buffer, 0, pad);
-
-                // Refill buffer with new data.
-                head = 0;
-                bytesRead = input.read(buffer, pad, bufSize - pad);
-
-                // [pprrrrrrr]
-                if (bytesRead != -1)
-                {
-                    tail = pad + bytesRead;
-                }
-                else
-                {
-                    // The last pad amount is left in the buffer.
-                    // Boundary can't be in there so signal an error
-                    // condition.
-                    total += pad;
-                    throw new MalformedStreamException("Stream ended unexpectedly");
-                }
-            }
-        }
-        return total;
-    }
-
-    /**
-     * Finds the beginning of the first <code>encapsulation</code>.
-     *
-     * @return <code>True</code> if an <code>encapsulation</code> was
-     * found in the stream.
-     * @exception IOException
-     */
-    public boolean skipPreamble()
-            throws IOException
-    {
-        // First delimiter may be not preceeded with a CRLF.
-        System.arraycopy(boundary, 2, boundary, 0, boundary.length - 2);
-        boundaryLength = boundary.length - 2;
-        try
-        {
-            // Discard all data up to the delimiter.
-            discardBodyData();
-
-            // Read boundary - if succeded, the stream contains an
-            // encapsulation.
-            return readBoundary();
-        }
-        catch (MalformedStreamException e)
-        {
-            return false;
-        }
-        finally
-        {
-            // Restore delimiter.
-            System.arraycopy(boundary, 0, boundary, 2, boundary.length - 2);
-            boundaryLength = boundary.length;
-            boundary[0] = 0x0D;
-            boundary[1] = 0x0A;
-        }
-    }
-
-    /**
-     * Compares <code>count</code> first bytes in the arrays
-     * <code>a</code> and <code>b</code>.
-     *
-     * @param a The first array to compare.
-     * @param b The second array to compare.
-     * @param count How many bytes should be compared.
-     * @return <code>true</code> if <code>count</code> first bytes in
-     * arrays <code>a</code> and <code>b</code> are equal.
-     */
-    public static boolean arrayequals(byte[] a,
-                                      byte[] b,
-                                      int count)
-    {
-        for (int i = 0; i < count; i++)
-        {
-            if (a[i] != b[i])
-            {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Searches a byte of specified value in the <code>buffer</code>
-     * starting at specified <code>position</code>.
-     *
-     * @param value the value to find.
-     * @param pos The starting position for searching.
-     * @return The position of byte found, counting from beginning of
-     * the <code>buffer</code>, or <code>-1</code> if not found.
-     */
-    protected int findByte(byte value,
-                           int pos)
-    {
-        for (int i = pos; i < tail; i++)
-            if (buffer[i] == value)
-                return i;
-
-        return -1;
-    }
-
-    /**
-     * Searches the <code>boundary</code> in <code>buffer</code>
-     * region delimited by <code>head</code> and <code>tail</code>.
-     *
-     * @return The position of the boundary found, counting from
-     * beginning of the <code>buffer</code>, or <code>-1</code> if not
-     * found.
-     */
-    protected int findSeparator()
-    {
-        int first;
-        int match = 0;
-        int maxpos = tail - boundaryLength;
-        for (first = head;
-             (first <= maxpos) && (match != boundaryLength);
-             first++)
-        {
-            first = findByte(boundary[0], first);
-            if (first == -1 || (first > maxpos))
-                return -1;
-            for (match = 1; match < boundaryLength; match++)
-            {
-                if (buffer[first + match] != boundary[match])
-                    break;
-            }
-        }
-        if (match == boundaryLength)
-        {
-            return first - 1;
-        }
-        return -1;
-    }
-
-    /**
-     * Thrown to indicate that the input stream fails to follow the
-     * required syntax.
-     */
-    public class MalformedStreamException
-            extends IOException
-    {
-        /**
-         * Constructs a <code>MalformedStreamException</code> with no
-         * detail message.
-         */
-        public MalformedStreamException()
-        {
-            super();
-        }
-
-        /**
-         * Constructs an <code>MalformedStreamException</code> with
-         * the specified detail message.
-         *
-         * @param message The detail message.
-         */
-        public MalformedStreamException(String message)
-        {
-            super(message);
-        }
-    }
-
-    /**
-     * Thrown upon attempt of setting an invalid boundary token.
-     */
-    public class IllegalBoundaryException
-            extends IOException
-    {
-        /**
-         * Constructs an <code>IllegalBoundaryException</code> with no
-         * detail message.
-         */
-        public IllegalBoundaryException()
-        {
-            super();
-        }
-
-        /**
-         * Constructs an <code>IllegalBoundaryException</code> with
-         * the specified detail message.
-         *
-         * @param message The detail message.
-         */
-        public IllegalBoundaryException(String message)
-        {
-            super(message);
-        }
-    }
-
-    /*-------------------------------------------------------------
-
-    // These are the methods that were used to debug this stuff.
-
-    // Dump data.
-    protected void dump()
-    {
-        System.out.println("01234567890");
-        byte[] temp = new byte[buffer.length];
-        for(int i=0; i<buffer.length; i++)
-        {
-            if(buffer[i] == 0x0D || buffer[i] == 0x0A)
-            {
-                temp[i] = 0x21;
-            }
-            else
-            {
-                temp[i] = buffer[i];
-            }
-        }
-        System.out.println(new String(temp));
-        int i;
-        for(i=0; i<head; i++)
-            System.out.print(" ");
-        System.out.println("h");
-        for(i=0; i<tail; i++)
-            System.out.print(" ");
-        System.out.println("t");
-        System.out.flush();
-    }
-
-    // Main routine, for testing purposes only.
-    //
-    // @param args A String[] with the command line arguments.
-    // @exception Exception, a generic exception.
-    public static void main( String[] args )
-        throws Exception
-    {
-        File boundaryFile = new File("boundary.dat");
-        int boundarySize = (int)boundaryFile.length();
-        byte[] boundary = new byte[boundarySize];
-        FileInputStream input = new FileInputStream(boundaryFile);
-        input.read(boundary,0,boundarySize);
-
-        input = new FileInputStream("multipart.dat");
-        MultipartStream chunks = new MultipartStream(input, boundary);
-
-        int i = 0;
-        String header;
-        OutputStream output;
-        boolean nextChunk = chunks.skipPreamble();
-        while(nextChunk)
-        {
-            header = chunks.readHeaders();
-            System.out.println("!"+header+"!");
-            System.out.println("wrote part"+i+".dat");
-            output = new FileOutputStream("part"+(i++)+".dat");
-            chunks.readBodyData(output);
-            nextChunk = chunks.readBoundary();
-        }
-    }
-
-    */
-}
diff --git a/src/java/org/apache/turbine/util/uri/BaseURI.java b/src/java/org/apache/turbine/util/uri/BaseURI.java
deleted file mode 100644
index 99a4eee..0000000
--- a/src/java/org/apache/turbine/util/uri/BaseURI.java
+++ /dev/null
@@ -1,547 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-
-/**
- * This is the base class for all dynamic URIs in the Turbine System.
- *
- * All of the classes used for generating URIs are derived from this.
- *
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-
-public abstract class BaseURI
-        implements URI,
-                   URIConstants
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(BaseURI.class);
-
-    /** ServerData Object for scheme, name, port etc. */
-    private ServerData serverData =
-            new ServerData(null, HTTP_PORT, HTTP, null, null);
-
-    /** Whether we want to redirect or not. */
-    private boolean redirect = false;
-
-    /** Servlet response interface. */
-    private HttpServletResponse response = null;
-
-    /** Reference Anchor (#ref) */
-    private String reference = null;
-
-    /*
-     * ========================================================================
-     *
-     * Constructors
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Empty C'tor. Uses Turbine.getDefaultServerData().
-     *
-     */
-    public BaseURI()
-    {
-        init(Turbine.getDefaultServerData());
-        setResponse(null);
-    }
-
-    /**
-     * Constructor with a RunData object
-     *
-     * @param runData A RunData object
-     */
-    public BaseURI(RunData runData)
-    {
-        init(runData.getServerData());
-        setResponse(runData.getResponse());
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param runData A RunData object
-     * @param redirect True if redirection allowed.
-     */
-    public BaseURI(RunData runData, boolean redirect)
-    {
-        init(runData.getServerData());
-        setResponse(runData.getResponse());
-        setRedirect(redirect);
-    }
-
-    /**
-     * Constructor with a ServerData object
-     *
-     * @param serverData A ServerData object
-     */
-    public BaseURI(ServerData serverData)
-    {
-        init(serverData);
-        setResponse(null);
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param serverData A ServerData object
-     * @param redirect True if redirection allowed.
-     */
-    public BaseURI(ServerData serverData, boolean redirect)
-    {
-        init(serverData);
-        setResponse(null);
-        setRedirect(redirect);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Init
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Init with a ServerData object
-     *
-     * @param serverData A ServerData object
-     *
-     */
-    private void init(ServerData serverData)
-    {
-        log.debug("init(" + serverData + ")");
-
-        if(serverData != null)
-        {
-            // We must clone this, because if BaseURI is used in a pull tool,
-            // then the fields might be changed. If we don't clone, this might pull
-            // through to the ServerData object saved at firstRequest() in the
-            // Turbine object.
-            this.serverData = (ServerData) serverData.clone();
-        }
-        else
-        {
-            log.error("Passed null ServerData object!");
-        }
-        reference = null;
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Getter / Setter
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Set the redirect Flag
-     *
-     * @param redirect The new value of the redirect flag.
-     */
-    public void setRedirect(boolean redirect)
-    {
-        this.redirect = redirect;
-    }
-
-    /**
-     * Returns the current value of the Redirect flag
-     *
-     * @return True if Redirect is allowed
-     *
-     */
-    public boolean isRedirect()
-    {
-        return redirect;
-    }
-
-    /**
-     * Gets the script name (/servlets/Turbine).
-     *
-     * @return A String with the script name.
-     */
-    public String getScriptName()
-    {
-        return serverData.getScriptName();
-    }
-
-    /**
-     * Sets the script name (/servlets/Turbine).
-     *
-     * @param scriptName A String with the script name.
-     */
-    public void setScriptName(String scriptName)
-    {
-        serverData.setScriptName(scriptName);
-    }
-
-    /**
-     * Gets the context path.
-     *
-     * @return A String with the context path.
-     */
-    public String getContextPath()
-    {
-        return serverData.getContextPath();
-    }
-
-    /**
-     * Sets the context path.
-     *
-     * @param contextPath A String with the context path
-     */
-    public void setContextPath(String contextPath)
-    {
-        serverData.setContextPath(contextPath);
-    }
-
-    /**
-     * Gets the server name.
-     *
-     * @return A String with the server name.
-     */
-    public String getServerName()
-    {
-        return serverData.getServerName();
-    }
-
-    /**
-     * Sets the server name.
-     *
-     * @param serverName A String with the server name.
-     */
-    public void setServerName(String serverName)
-    {
-        serverData.setServerName(serverName);
-    }
-
-    /**
-     * Gets the server port.
-     *
-     * @return A String with the server port.
-     */
-    public int getServerPort()
-    {
-        int serverPort = serverData.getServerPort();
-
-        if (serverPort == 0)
-        {
-            if(getServerScheme().equals(HTTPS))
-            {
-                serverPort = HTTPS_PORT;
-            }
-            else
-            {
-                serverPort = HTTP_PORT;
-            }
-        }
-        return serverPort;
-    }
-
-    /**
-     * Sets the server port.
-     *
-     * @param serverPort An int with the port.
-     */
-    public void setServerPort(int serverPort)
-    {
-        serverData.setServerPort(serverPort);
-    }
-
-    /**
-     * Method to specify that a URI should use SSL. The default port
-     * is used.
-     */
-    public void setSecure()
-    {
-        setSecure(HTTPS_PORT);
-    }
-
-    /**
-     * Method to specify that a URI should use SSL.
-     * Whether or not it does is determined from Turbine.properties.
-     * If use.ssl in the Turbine.properties is set to false, then
-     * http is used in any case. (Default of use.ssl is true).
-     *
-     * @param port An int with the port number.
-     */
-    public void setSecure(int port)
-    {
-        boolean useSSL =
-                Turbine.getConfiguration()
-                .getBoolean(TurbineConstants.USE_SSL_KEY,
-                        TurbineConstants.USE_SSL_DEFAULT);
-
-        setServerScheme(useSSL ? HTTPS : HTTP);
-        setServerPort(port);
-    }
-
-    /**
-     * Sets the scheme (HTTP or HTTPS).
-     *
-     * @param serverScheme A String with the scheme.
-     */
-    public void setServerScheme(String serverScheme)
-    {
-        serverData.setServerScheme(StringUtils.isNotEmpty(serverScheme)
-                ? serverScheme : "");
-    }
-
-    /**
-     * Returns the current Server Scheme
-     *
-     * @return The current Server scheme
-     *
-     */
-    public String getServerScheme()
-    {
-        String serverScheme = serverData.getServerScheme();
-
-        return StringUtils.isNotEmpty(serverScheme) ? serverScheme : HTTP;
-    }
-
-    /**
-     * Sets a reference anchor (#ref).
-     *
-     * @param reference A String containing the reference.
-     */
-    public void setReference(String reference)
-    {
-        this.reference = reference;
-    }
-
-    /**
-     * Returns the current reference anchor.
-     *
-     * @return A String containing the reference.
-     */
-    public String getReference()
-    {
-        return hasReference() ? reference : "";
-    }
-
-    /**
-     * Does this URI contain an anchor? (#ref)
-     *
-     * @return True if this URI contains an anchor.
-     */
-    public boolean hasReference()
-    {
-        return StringUtils.isNotEmpty(reference);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Protected / Private Methods
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Set a Response Object to use when creating the
-     * response string.
-     *
-     */
-    protected void setResponse(HttpServletResponse response)
-    {
-        this.response = response;
-    }
-
-    /**
-     * Returns the Response Object from the Servlet Container.
-     *
-     * @return The Servlet Response object or null
-     *
-     */
-    protected HttpServletResponse getResponse()
-    {
-        return response;
-    }
-
-    /**
-     * Append the Context Path and Script Name to the passed
-     * String Buffer.
-     *
-     * <p>
-     * This is a convenience method to be
-     * used in the Link output routines of derived classes to
-     * easily append the correct path.
-     *
-     * @param sb The StringBuffer to store context path and script name.
-     */
-    protected void getContextAndScript(StringBuffer sb)
-    {
-        String context = getContextPath();
-
-        if(StringUtils.isNotEmpty(context))
-        {
-            if(context.charAt(0) != '/')
-            {
-                sb.append('/');
-            }
-            sb.append (context);
-        }
-
-        // /servlet/turbine
-        String script = getScriptName();
-
-        if(StringUtils.isNotEmpty(script))
-        {
-            if(script.charAt(0) != '/')
-            {
-                sb.append('/');
-            }
-            sb.append (script);
-        }
-    }
-
-    /**
-     * Appends Scheme, Server and optionally the port to the
-     * supplied String Buffer.
-     *
-     * <p>
-     * This is a convenience method to be
-     * used in the Link output routines of derived classes to
-     * easily append the correct server scheme.
-     *
-     * @param sb The StringBuffer to store the scheme and port information.
-     */
-    protected void getSchemeAndPort(StringBuffer sb)
-    {
-        // http(s)://<servername>
-        sb.append(getServerScheme());
-        sb.append(URIConstants.URI_SCHEME_SEPARATOR);
-        sb.append(getServerName());
-
-        // (:<port>)
-        if ((getServerScheme().equals(HTTP)
-                    && getServerPort() != HTTP_PORT)
-                || (getServerScheme().equals(HTTPS)
-                        && getServerPort() != HTTPS_PORT))
-        {
-            sb.append(':');
-            sb.append(getServerPort());
-        }
-    }
-
-    /**
-     * Encodes a Response Uri according to the Servlet Container.
-     * This might add a Java session identifier or do redirection.
-     * The resulting String can be used in a page or template.
-     *
-     * @param uri The Uri to encode
-     *
-     * @return An Uri encoded by the container.
-     */
-    protected String encodeResponse(String uri)
-    {
-        String res = uri;
-
-        HttpServletResponse response = getResponse();
-
-        if(response == null)
-        {
-            log.debug("No Response Object!");
-        }
-        else
-        {
-            try
-            {
-                if(isRedirect())
-                {
-                    log.debug("Should Redirect");
-                    res = response.encodeRedirectURL(uri);
-                }
-                else
-                {
-                    res = response.encodeURL(uri);
-                }
-            }
-            catch(Exception e)
-            {
-                log.error("response" + response + ", uri: " + uri);
-                log.error("While trying to encode the URI: ", e);
-            }
-        }
-
-        log.debug("encodeResponse():  " + res);
-        return res;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/DataURI.java b/src/java/org/apache/turbine/util/uri/DataURI.java
deleted file mode 100644
index 742553a..0000000
--- a/src/java/org/apache/turbine/util/uri/DataURI.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-
-/**
- * This class can convert a simple link into a turbine relative
- * URL. It should be used to convert references for images, style
- * sheets and similar references.
- *
- * The resulting links have no query data or path info. If you need
- * this, use TurbineURI or TemplateURI.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- *
- */
-
-public class DataURI
-        extends BaseURI
-        implements URIConstants
-{
-    /**
-     * Empty C'tor. Uses Turbine.getDefaultServerData().
-     *
-     */
-    public DataURI()
-    {
-        super();
-    }
-
-    /**
-     * Constructor with a RunData object
-     *
-     * @param runData A RunData object
-     */
-    public DataURI(RunData runData)
-    {
-        super(runData);
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param runData A RunData object
-     * @param redirect True if redirection allowed.
-     */
-    public DataURI(RunData runData, boolean redirect)
-    {
-        super(runData, redirect);
-    }
-
-    /**
-     * Constructor with a ServerData object
-     *
-     * @param serverData A ServerData object
-     */
-    public DataURI(ServerData serverData)
-    {
-        super(serverData);
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param serverData A ServerData object
-     * @param redirect True if redirection allowed.
-     */
-    public DataURI(ServerData serverData, boolean redirect)
-    {
-        super(serverData, redirect);
-    }
-
-
-    /**
-     * Content Tool wants to be able to turn the encoding
-     * of the servlet container off. After calling this method,
-     * the encoding will not happen any longer.
-     */
-    public void clearResponse()
-    {
-        setResponse(null);
-    }
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is absolute; it starts with http/https...
-     *
-     * <p>
-     * <code><pre>
-     * TurbineURI tui = new TurbineURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getAbsoluteLink();
-     * </pre></code>
-     *
-     *  The above call to absoluteLink() would return the String:
-     *
-     * <p>
-     * http://www.server.com/servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * @return A String with the built URL.
-     */
-    public String getAbsoluteLink()
-    {
-        StringBuffer output = new StringBuffer();
-
-        getSchemeAndPort(output);
-        getContextAndScript(output);
-
-        if (hasReference())
-        {
-            output.append('#');
-            output.append(getReference());
-        }
-
-        //
-        // Encode Response does all the fixup for the Servlet Container
-        //
-        return encodeResponse(output.toString());
-    }
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is relative to the webserver root.
-     *
-     * <p>
-     * <code><pre>
-     * TurbineURI tui = new TurbineURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getRelativeLink();
-     * </pre></code>
-     *
-     *  The above call to absoluteLink() would return the String:
-     *
-     * <p>
-     * /servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * @return A String with the built URL.
-     */
-    public String getRelativeLink()
-    {
-        StringBuffer output = new StringBuffer();
-
-        getContextAndScript(output);
-
-        if (hasReference())
-        {
-            output.append('#');
-            output.append(getReference());
-        }
-
-        //
-        // Encode Response does all the fixup for the Servlet Container
-        //
-        return encodeResponse(output.toString());
-    }
-
-    /**
-     * toString() simply calls getAbsoluteLink. You should not use this in your
-     * code unless you have to. Use getAbsoluteLink.
-     *
-     * @return This URI as a String
-     *
-     */
-    public String toString()
-    {
-        return getAbsoluteLink();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/TemplateURI.java b/src/java/org/apache/turbine/util/uri/TemplateURI.java
deleted file mode 100644
index e25f9ac..0000000
--- a/src/java/org/apache/turbine/util/uri/TemplateURI.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Iterator;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.parser.ParameterParser;
-
-/**
- * This class allows you to keep all the information needed for a single
- * link at one place. It keeps your query data, path info, the server
- * scheme, name, port and the script path. It is tuned for usage with a
- * Template System e.g. Velocity.
- *
- * If you must generate a Turbine Link in a Template System, use this class.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TemplateURI
-        extends TurbineURI
-{
-    /**
-     * Empty C'tor. Uses Turbine.getDefaultServerData().
-     *
-     */
-    public TemplateURI()
-    {
-        super();
-    }
-
-    /**
-     * Constructor with a RunData object
-     *
-     * @param runData A RunData object
-     */
-    public TemplateURI(RunData runData)
-    {
-        super(runData);
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param runData A RunData object
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(RunData runData, boolean redirect)
-    {
-        super(runData, redirect);
-    }
-
-    /**
-     * Constructor, set Template
-     *
-     * @param runData A RunData object
-     * @param template A Template Name
-     */
-    public TemplateURI(RunData runData, String template)
-    {
-        super(runData);
-        setTemplate(template);
-    }
-
-    /**
-     * Constructor, set Template, set explicit redirection
-     *
-     * @param runData A RunData object
-     * @param template A Template Name
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(RunData runData, String template, boolean redirect)
-    {
-        super(runData, redirect);
-        setTemplate(template);
-    }
-
-    /**
-     * Constructor, set Template and Action
-     *
-     * @param runData A RunData object
-     * @param template A Template Name
-     * @param action An Action Name
-     */
-    public TemplateURI(RunData runData, String template, String action)
-    {
-        this(runData, template);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, set Template and Action, set explicit redirection
-     *
-     * @param runData A RunData object
-     * @param template A Template Name
-     * @param action An Action Name
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(RunData runData, String template, String action, boolean redirect)
-    {
-        this(runData, template, redirect);
-        setAction(action);
-    }
-
-    /**
-     * Constructor with a ServerData object
-     *
-     * @param serverData A ServerData object
-     */
-    public TemplateURI(ServerData serverData)
-    {
-        super(serverData);
-    }
-
-    /**
-     * Constructor, set explicit redirection
-     *
-     * @param serverData A ServerData object
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(ServerData serverData, boolean redirect)
-    {
-        super(serverData, redirect);
-    }
-
-    /**
-     * Constructor, set Template
-     *
-     * @param serverData A ServerData object
-     * @param template A Template Name
-     */
-    public TemplateURI(ServerData serverData, String template)
-    {
-        super(serverData);
-        setTemplate(template);
-    }
-
-    /**
-     * Constructor, set Template, set explicit redirection
-     *
-     * @param serverData A ServerData object
-     * @param template A Template Name
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(ServerData serverData, String template, boolean redirect)
-    {
-        super(serverData, redirect);
-        setTemplate(template);
-    }
-
-    /**
-     * Constructor, set Template and Action
-     *
-     * @param serverData A ServerData object
-     * @param template A Template Name
-     * @param action An Action Name
-     */
-    public TemplateURI(ServerData serverData, String template, String action)
-    {
-        this(serverData, template);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, set Template and Action, set explicit redirection
-     *
-     * @param serverData A ServerData object
-     * @param template A Template Name
-     * @param action An Action Name
-     * @param redirect True if redirection allowed.
-     */
-    public TemplateURI(ServerData serverData, String template, String action, boolean redirect)
-    {
-        this(serverData, template, redirect);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, user Turbine.getDefaultServerData(), set Template and Action
-     *
-     * @param template A Template Name
-     * @param action An Action Name
-     */
-    public TemplateURI(String template, String action)
-    {
-        this();
-        setTemplate(template);
-        setAction(action);
-    }
-
-    /**
-     * Sets the template= value for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data. An empty value (null or "") cleans out
-     * an existing value.
-     *
-     * @param template A String with the template value.
-     */
-    public void setTemplate(String template)
-    {
-        if(StringUtils.isNotEmpty(template))
-        {
-            add(PATH_INFO, CGI_TEMPLATE_PARAM, template);
-        }
-        else
-        {
-            clearTemplate();
-        }
-    }
-
-    /**
-     * Clears the template= value for this URL.
-     *
-     */
-    public void clearTemplate()
-    {
-        removePathInfo(CGI_TEMPLATE_PARAM);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Protected / Private Methods
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Method for a quick way to add all the parameters in a
-     * ParameterParser.
-     *
-     * <p>If the type is P (0), then add name/value to the pathInfo
-     * hashtable.
-     *
-     * <p>If the type is Q (1), then add name/value to the queryData
-     * hashtable.
-     *
-     * @param type Type of insertion (@see #add(char type, String name, String value))
-     * @param pp A ParameterParser.
-     */
-    protected void add(int type,
-            ParameterParser pp)
-    {
-        for(Iterator it = pp.keySet().iterator(); it.hasNext();)
-        {
-            String key = (String) it.next();
-
-            if (!key.equalsIgnoreCase(CGI_ACTION_PARAM) &&
-                    !key.equalsIgnoreCase(CGI_SCREEN_PARAM) &&
-                    !key.equalsIgnoreCase(CGI_TEMPLATE_PARAM))
-            {
-                String[] values = pp.getStrings(key);
-                for (int i = 0; i < values.length; i++)
-                {
-                    add(type, key, values[i]);
-                }
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/TurbineURI.java b/src/java/org/apache/turbine/util/uri/TurbineURI.java
deleted file mode 100644
index e0fead0..0000000
--- a/src/java/org/apache/turbine/util/uri/TurbineURI.java
+++ /dev/null
@@ -1,930 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URLEncoder;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.parser.ParameterParser;
-import org.apache.turbine.util.parser.ParserUtils;
-
-/**
- * This class allows you to keep all the information needed for a single
- * link at one place. It keeps your query data, path info, the server
- * scheme, name, port and the script path.
- *
- * If you must generate a Turbine Link, use this class.
- *
- * @author <a href="mailto:jon@clearink.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TurbineURI
-        extends BaseURI
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(TurbineURI.class);
-
-    /** Contains the PathInfo and QueryData vectors */
-    private List [] dataVectors = null;
-
-    /*
-     * ========================================================================
-     *
-     * Constructors
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Empty C'tor. Uses Turbine.getDefaultServerData().
-     */
-    public TurbineURI()
-    {
-        super();
-        init();
-    }
-
-    /**
-     * Constructor with a RunData object.
-     *
-     * @param runData A RunData object
-     */
-    public TurbineURI(RunData runData)
-    {
-        super(runData);
-        init();
-    }
-
-    /**
-     * Constructor, set explicit redirection.
-     *
-     * @param runData A RunData object
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(RunData runData, boolean redirect)
-    {
-        super(runData, redirect);
-        init();
-    }
-
-    /**
-     * Constructor, set Screen.
-     *
-     * @param runData A RunData object
-     * @param screen A Screen Name
-     */
-    public TurbineURI(RunData runData, String screen)
-    {
-        this(runData);
-        setScreen(screen);
-    }
-
-    /**
-     * Constructor, set Screen, set explicit redirection.
-     *
-     * @param runData A RunData object
-     * @param screen A Screen Name
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(RunData runData, String screen, boolean redirect)
-    {
-        this(runData, redirect);
-        setScreen(screen);
-    }
-
-    /**
-     * Constructor, set Screen and Action.
-     *
-     * @param runData A RunData object
-     * @param screen A Screen Name
-     * @param action An Action Name
-     */
-    public TurbineURI(RunData runData, String screen, String action)
-    {
-        this(runData, screen);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, set Screen and Action, set explicit redirection.
-     *
-     * @param runData A RunData object
-     * @param screen A Screen Name
-     * @param action An Action Name
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(RunData runData, String screen, String action, boolean redirect)
-    {
-        this(runData, screen, redirect);
-        setAction(action);
-    }
-
-    /**
-     * Constructor with a ServerData object.
-     *
-     * @param serverData A ServerData object
-     */
-    public TurbineURI(ServerData serverData)
-    {
-        super(serverData);
-        init();
-    }
-
-    /**
-     * Constructor, set explicit redirection.
-     *
-     * @param serverData A ServerData object
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(ServerData serverData, boolean redirect)
-    {
-        super(serverData, redirect);
-        init();
-    }
-
-    /**
-     * Constructor, set Screen.
-     *
-     * @param serverData A ServerData object
-     * @param screen A Screen Name
-     */
-    public TurbineURI(ServerData serverData, String screen)
-    {
-        this(serverData);
-        setScreen(screen);
-    }
-
-    /**
-     * Constructor, set Screen, set explicit redirection.
-     *
-     * @param serverData A ServerData object
-     * @param screen A Screen Name
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(ServerData serverData, String screen, boolean redirect)
-    {
-        this(serverData, redirect);
-        setScreen(screen);
-    }
-
-    /**
-     * Constructor, set Screen and Action.
-     *
-     * @param serverData A ServerData object
-     * @param screen A Screen Name
-     * @param action An Action Name
-     */
-    public TurbineURI(ServerData serverData, String screen, String action)
-    {
-        this(serverData, screen);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, set Screen and Action, set explicit redirection.
-     *
-     * @param serverData A ServerData object
-     * @param screen A Screen Name
-     * @param action An Action Name
-     * @param redirect True if redirection allowed.
-     */
-    public TurbineURI(ServerData serverData, String screen, String action,
-                      boolean redirect)
-    {
-        this(serverData, screen, redirect);
-        setAction(action);
-    }
-
-    /**
-     * Constructor, user Turbine.getDefaultServerData(), set Screen and Action.
-     *
-     * @param screen A Screen Name
-     * @param action An Action Name
-     */
-    public TurbineURI(String screen, String action)
-    {
-        this();
-        setScreen(screen);
-        setAction(action);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Init
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Init the TurbineURI.
-     */
-    private void init()
-    {
-        dataVectors = new List[2];
-        dataVectors[PATH_INFO]  = new ArrayList();
-        dataVectors[QUERY_DATA] = new ArrayList();
-    }
-
-    /**
-     * Sets the action= value for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data. An empty value (null or "") cleans out
-     * an existing value.
-     *
-     * @param action A String with the action value.
-     */
-    public void setAction(String action)
-    {
-        if(StringUtils.isNotEmpty(action))
-        {
-            add(PATH_INFO, CGI_ACTION_PARAM, action);
-        }
-        else
-        {
-            clearAction();
-        }
-    }
-
-    /**
-     * Sets the action= and eventSubmit= values for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data. An empty value (null or "") for the action cleans out
-     * an existing value.  An empty value (null or "") for the event has no
-     * effect.
-     *
-     * @param action A String with the action value.
-     * @param event A string with the event name.
-     */
-    public void setActionEvent(String action, String event)
-    {
-        setAction(action);
-        if(StringUtils.isNotEmpty(event))
-        {
-            add(PATH_INFO, EVENT_PREFIX + event, event);
-        }
-    }
-
-    /**
-     * Clears the action= value for this URL.
-     */
-    public void clearAction()
-    {
-        removePathInfo(CGI_ACTION_PARAM);
-    }
-
-    /**
-     * Sets the screen= value for this URL.
-     *
-     * By default it adds the information to the path_info instead
-     * of the query data. An empty value (null or "") cleans out
-     * an existing value.
-     *
-     * @param screen A String with the screen value.
-     */
-    public void setScreen(String screen)
-    {
-        if(StringUtils.isNotEmpty(screen))
-        {
-            add(PATH_INFO, CGI_SCREEN_PARAM, screen);
-        }
-        else
-        {
-            clearScreen();
-        }
-    }
-
-    /**
-     * Clears the screen= value for this URL.
-     */
-    public void clearScreen()
-    {
-        removePathInfo(CGI_SCREEN_PARAM);
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Adding and removing Data from the Path Info and Query Data
-     *
-     * ========================================================================
-     */
-
-
-    /**
-     * Adds a name=value pair for every entry in a ParameterParser
-     * object to the path_info string.
-     *
-     * @param pp A ParameterParser.
-     */
-    public void addPathInfo(ParameterParser pp)
-    {
-        add(PATH_INFO, pp);
-    }
-
-    /**
-     * Adds an existing List of URIParam objects to
-     * the path_info string.
-     *
-     * @param list A list with URIParam objects.
-     */
-    public void addPathInfo(List list)
-    {
-        add(PATH_INFO, list);
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value An Object with the value to add.
-     */
-    public void addPathInfo(String name, Object value)
-    {
-        add(PATH_INFO, name, value.toString());
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A String with the value to add.
-     */
-    public void addPathInfo(String name, String value)
-    {
-        add(PATH_INFO, name, value);
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A double with the value to add.
-     */
-    public void addPathInfo(String name, double value)
-    {
-        add(PATH_INFO, name, Double.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value An int with the value to add.
-     */
-    public void addPathInfo(String name, int value)
-    {
-        add(PATH_INFO, name, Integer.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair to the path_info string.
-     *
-     * @param name A String with the name to add.
-     * @param value A long with the value to add.
-     */
-    public void addPathInfo(String name, long value)
-    {
-        add(PATH_INFO, name, Long.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value An Object with the value to add.
-     */
-    public void addQueryData(String name, Object value)
-    {
-        add(QUERY_DATA, name, value.toString());
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A String with the value to add.
-     */
-    public void addQueryData(String name, String value)
-    {
-        add(QUERY_DATA, name, value);
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A double with the value to add.
-     */
-    public void addQueryData(String name, double value)
-    {
-        add(QUERY_DATA, name, Double.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value An int with the value to add.
-     */
-    public void addQueryData(String name, int value)
-    {
-        add(QUERY_DATA, name, Integer.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair to the query string.
-     *
-     * @param name A String with the name to add.
-     * @param value A long with the value to add.
-     */
-    public void addQueryData(String name, long value)
-    {
-        add(QUERY_DATA, name, Long.toString(value));
-    }
-
-    /**
-     * Adds a name=value pair for every entry in a ParameterParser
-     * object to the query string.
-     *
-     * @param pp A ParameterParser.
-     */
-    public void addQueryData(ParameterParser pp)
-    {
-        add(QUERY_DATA, pp);
-    }
-
-    /**
-     * Adds an existing List of URIParam objects to the query data.
-     *
-     * @param list A list with URIParam objects.
-     */
-    public void addQueryData(List list)
-    {
-        add(QUERY_DATA, list);
-    }
-
-    /**
-     * Is Path Info data set in this URI?
-     *
-     * @return true if Path Info has values
-     */
-    public boolean hasPathInfo()
-    {
-        return !dataVectors[PATH_INFO].isEmpty();
-    }
-
-    /**
-     * Removes all the path info elements.
-     */
-    public void removePathInfo()
-    {
-        dataVectors[PATH_INFO].clear();
-    }
-
-    /**
-     * Removes a name=value pair from the path info.
-     *
-     * @param name A String with the name to be removed.
-     */
-    public void removePathInfo(String name)
-    {
-        remove(PATH_INFO, name);
-    }
-
-    /**
-     * Is Query data set in this URI?
-     *
-     * @return true if Query data has values
-     */
-    public boolean hasQueryData()
-    {
-        return !dataVectors[QUERY_DATA].isEmpty();
-    }
-
-    /**
-     * Removes all the query string elements.
-     */
-    public void removeQueryData()
-    {
-        dataVectors[QUERY_DATA].clear();
-    }
-
-    /**
-     * Removes a name=value pair from the query string.
-     *
-     * @param name A String with the name to be removed.
-     */
-    public void removeQueryData(String name)
-    {
-        remove (QUERY_DATA, name);
-    }
-
-    /**
-     * Template Link and friends want to be able to turn the encoding
-     * of the servlet container off. After calling this method,
-     * the no encoding will happen any longer. If you think, that you
-     * need this outside a template context, think again.
-     */
-    public void clearResponse()
-    {
-        setResponse(null);
-    }
-
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is absolute; it starts with http/https...
-     *
-     * <p>
-     * <code><pre>
-     * TurbineURI tui = new TurbineURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getAbsoluteLink();
-     * </pre></code>
-     *
-     *  The above call to absoluteLink() would return the String:
-     *
-     * <p>
-     * http://www.server.com/servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * @return A String with the built URL.
-     */
-    public String getAbsoluteLink()
-    {
-        StringBuffer output = new StringBuffer();
-
-        getSchemeAndPort(output);
-
-        buildRelativeLink(output);
-
-        //
-        // Encode Response does all the fixup for the Servlet Container
-        //
-        return encodeResponse(output.toString());
-    }
-
-    /**
-     * Builds the URL with all of the data URL-encoded as well as
-     * encoded using HttpServletResponse.encodeUrl(). The resulting
-     * URL is relative to the webserver root.
-     *
-     * <p>
-     * <code><pre>
-     * TurbineURI tui = new TurbineURI (data, "UserScreen");
-     * tui.addPathInfo("user","jon");
-     * tui.getRelativeLink();
-     * </pre></code>
-     *
-     *  The above call to relativeLink() would return the String:
-     *
-     * <p>
-     * /servlets/Turbine/screen/UserScreen/user/jon
-     *
-     * @return A String with the built URL.
-     */
-    public String getRelativeLink()
-    {
-        StringBuffer output = new StringBuffer();
-
-        buildRelativeLink(output);
-
-        //
-        // Encode Response does all the fixup for the Servlet Container
-        //
-        return encodeResponse(output.toString());
-    }
-
-    /**
-     * Add everything needed for a relative link to the passed StringBuffer.
-     *
-     * @param output A Stringbuffer
-     */
-    private void buildRelativeLink(StringBuffer output)
-    {
-        getContextAndScript(output);
-
-        if (hasPathInfo())
-        {
-            output.append('/');
-            getPathInfoAsString(output);
-        }
-
-        if (hasReference())
-        {
-            output.append('#');
-            output.append(getReference());
-        }
-
-        if (hasQueryData())
-        {
-            output.append('?');
-            getQueryDataAsString(output);
-        }
-    }
-
-    /**
-     * Gets the current Query Data List.
-     *
-     * @return A List which contains all query data keys. The keys
-     * are URIParam objects.
-     */
-    public List getPathInfo()
-    {
-        return dataVectors[PATH_INFO];
-    }
-
-    /**
-     * Sets the Query Data List. Replaces the current query data list
-     * with the one supplied. The list must contain only URIParam
-     * objects!
-     *
-     * @param pathInfo A List with new param objects.
-     */
-
-    public void setPathInfo(List pathInfo)
-    {
-        dataVectors[PATH_INFO] = pathInfo;
-    }
-
-    /**
-     * Gets the current Query Data List.
-     *
-     * @return A List which contains all query data keys. The keys
-     * are URIParam objects.
-     */
-    public List getQueryData()
-    {
-        return dataVectors[QUERY_DATA];
-    }
-
-    /**
-     * Sets the Query Data List. Replaces the current query data list
-     * with the one supplied. The list must contain only URIParam
-     * objects!
-     *
-     * @param queryData A List with new param objects.
-     */
-
-    public void setQueryData(List queryData)
-    {
-        dataVectors[QUERY_DATA] = queryData;
-    }
-
-    /**
-     * Simply calls getAbsoluteLink(). You should not use this in your
-     * code unless you have to. Use getAbsoluteLink.
-     *
-     * @return This URI as a String
-     *
-     */
-    public String toString()
-    {
-        return getAbsoluteLink();
-    }
-
-    /*
-     * ========================================================================
-     *
-     * Protected / Private Methods
-     *
-     * ========================================================================
-     *
-     */
-
-    /**
-     * Returns the Path Info data as a String.
-     *
-     * @param output The StringBuffer that should hold the path info.
-     */
-    private void getPathInfoAsString(StringBuffer output)
-    {
-        doEncode(output, dataVectors[PATH_INFO], '/', '/');
-    }
-
-    /**
-     * Returns the Query data as a String.
-     *
-     * @param output The StringBuffer that should hold the query data.
-     */
-    private void getQueryDataAsString(StringBuffer output)
-    {
-        doEncode(output, dataVectors[QUERY_DATA], '&', '=');
-    }
-
-    /**
-     * Does the actual encoding for pathInfoAsString and queryDataAsString.
-     *
-     * @param output The Stringbuffer that should contain the information.
-     * @param list A Collection
-     * @param fieldDelim A char which is used to separate key/value pairs
-     * @param valueDelim A char which is used to separate key and value
-     */
-    private void doEncode(StringBuffer output, Collection list, char fieldDelim, char valueDelim)
-    {
-        if(!list.isEmpty())
-        {
-            for(Iterator it = list.iterator(); it.hasNext();)
-            {
-                URIParam uriParam = (URIParam) it.next();
-                String key = URLEncoder.encode(uriParam.getKey());
-                String val = String.valueOf(uriParam.getValue());
-
-                output.append(key);
-                output.append(valueDelim);
-
-                if(StringUtils.isEmpty(val))
-                {
-                    // Fixme?
-                    log.debug("Found a null value for " + key);
-                    output.append("null");
-                }
-                else
-                {
-                    output.append(URLEncoder.encode(val));
-                }
-
-                if (it.hasNext())
-                {
-                    output.append(fieldDelim);
-                }
-            }
-        }
-    }
-
-    /**
-     * If the type is PATH_INFO, then add name/value to the pathInfo
-     * hashtable.
-     * <p>
-     * If the type is QUERY_DATA, then add name/value to the queryData
-     * hashtable.
-     *
-     * @param type Type (PATH_INFO or QUERY_DATA) of insertion.
-     * @param name A String with the name to add.
-     * @param value A String with the value to add.
-     */
-    protected void add(int type,
-            String name,
-            String value)
-    {
-        URIParam uriParam = new URIParam(ParserUtils.convertAndTrim(name), value);
-
-        dataVectors[type].add(uriParam); // Code so clean you can eat from...
-    }
-
-    /**
-     * Method for a quick way to add all the parameters in a
-     * ParameterParser.
-     *
-     * <p>If the type is P (0), then add name/value to the pathInfo
-     * hashtable.
-     *
-     * <p>If the type is Q (1), then add name/value to the queryData
-     * hashtable.
-     *
-     * @param type Type of insertion (@see #add(char type, String name, String value))
-     * @param pp A ParameterParser.
-     */
-    protected void add(int type,
-            ParameterParser pp)
-    {
-        for(Iterator it = pp.keySet().iterator(); it.hasNext();)
-        {
-            String key = (String) it.next();
-
-            if (!key.equalsIgnoreCase(CGI_ACTION_PARAM) &&
-                    !key.equalsIgnoreCase(CGI_SCREEN_PARAM))
-            {
-                String[] values = pp.getStrings(key);
-                for (int i = 0; i < values.length; i++)
-                {
-                    add(type, key, values[i]);
-                }
-            }
-        }
-    }
-
-    /**
-     * Method for a quick way to add all the parameters in a
-     * List with URIParam objects.
-     *
-     * <p>If the type is P (0), then add name/value to the pathInfo
-     * hashtable.
-     *
-     * <p>If the type is Q (1), then add name/value to the queryData
-     * hashtable.
-     *
-     * @param type Type of insertion (@see #add(char type, String name, String value))
-     * @param list A List of URIParam objects
-     */
-    protected void add(int type,
-            List list)
-    {
-        for (Iterator it = list.iterator(); it.hasNext();)
-        {
-            // Strictly spoken we don't need this cast. But if we do,
-            // we get class cast right here is someone tries to put
-            // a list with wrong objects into this method.
-            URIParam uriParam = (URIParam) it.next();
-            dataVectors[type].add(uriParam);
-        }
-    }
-
-    /**
-     * If the type is P (0), then remove name/value from the
-     * pathInfo hashtable.
-     *
-     * <p>If the type is Q (1), then remove name/value from the
-     * queryData hashtable.
-     *
-     * @param type Type (P or Q) of removal.
-     * @param name A String with the name to be removed.
-     */
-    protected void remove (int type,
-            String name)
-    {
-        Collection c = dataVectors[type];
-        String key = ParserUtils.convertAndTrim(name);
-
-        for (Iterator it = c.iterator(); it.hasNext();)
-        {
-            URIParam uriParam = (URIParam) it.next();
-
-            if (key.equals(uriParam.getKey()))
-            {
-                it.remove();
-            }
-        }
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/URI.java b/src/java/org/apache/turbine/util/uri/URI.java
deleted file mode 100644
index 400543a..0000000
--- a/src/java/org/apache/turbine/util/uri/URI.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * An interface class which describes the absolute minimum of methods that
- * a Turbine URI class must implement.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public interface URI
-{
-    /**
-     * Gets the script name (/servlets/Turbine).
-     *
-     * @return A String with the script name.
-     */
-    String getScriptName();
-
-    /**
-     * Gets the context path.
-     *
-     * @return A String with the context path.
-     */
-    String getContextPath();
-
-    /**
-     * Gets the server name.
-     *
-     * @return A String with the server name.
-     */
-    String getServerName();
-
-    /**
-     * Gets the server port.
-     *
-     * @return A String with the server port.
-     */
-    int getServerPort();
-
-    /**
-     * Returns the current Server Scheme
-     *
-     * @return The current Server scheme
-     *
-     */
-    String getServerScheme();
-
-    /**
-     * Returns the current reference anchor.
-     *
-     * @return A String containing the reference.
-     */
-    String getReference();
-}
diff --git a/src/java/org/apache/turbine/util/uri/URIConstants.java b/src/java/org/apache/turbine/util/uri/URIConstants.java
deleted file mode 100644
index 82c51b7..0000000
--- a/src/java/org/apache/turbine/util/uri/URIConstants.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-/**
- * This interface contains all the constants that are always needed when
- * working with URIs.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-
-public interface URIConstants
-{
-    /** HTTP protocol. */
-    String HTTP = "http";
-
-    /** HTTPS protocol. */
-    String HTTPS = "https";
-
-    /** HTTP Default Port */
-    int HTTP_PORT = 80;
-
-    /** HTTPS Default Port */
-    int HTTPS_PORT = 443;
-
-    /** FTP Default Control Port */
-    int FTP_PORT = 20;
-
-    /** Path Info Data Marker */
-    int PATH_INFO = 0;
-
-    /** Query Data Marker */
-    int QUERY_DATA = 1;
-
-    /**
-     * The part of the URI which separates the protocol indicator (i.e. the
-     * scheme) from the rest of the URI.
-     */
-    String URI_SCHEME_SEPARATOR = "://";
-
-    /** CGI parameter for action name */
-    String CGI_ACTION_PARAM = "action";
-
-    /** CGI parameter for screen name */
-    String CGI_SCREEN_PARAM = "screen";
-
-    /** CGI parameter for template name */
-    String CGI_TEMPLATE_PARAM = "template";
-
-    /** prefix for event names */
-    String EVENT_PREFIX = "eventSubmit_";
-}
diff --git a/src/java/org/apache/turbine/util/uri/URIParam.java b/src/java/org/apache/turbine/util/uri/URIParam.java
deleted file mode 100644
index 14e949d..0000000
--- a/src/java/org/apache/turbine/util/uri/URIParam.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.lang.StringUtils;
-
-/**
- * Helper Class to keep a key and a value together in 
- * one object. Used for URI Parameters
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class URIParam
-{
-    /** Key */
-    private String key = null;
-    
-    /** Value */
-    private Object value = null;
-    
-    /**
-     * Creates a new Object from Key and Value
-     *
-     * @param key A String with the Param Name.
-     * @param value An Object with the Value.
-     *
-     */
-    public URIParam(String key, Object value)
-    {
-        this.key = key;
-        this.value = value;
-    }
-    
-    /**
-     * Returns the key.
-     *
-     * @return The key value.
-     *
-     */
-    public String getKey()
-    {
-        return (StringUtils.isNotEmpty(key)) ? key : "";
-    }
-    
-    /**
-     * Returns the value.
-     *
-     * @return The value of this object.
-     *
-     */
-    public Object getValue()
-    {
-        return value;
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/URIUtils.java b/src/java/org/apache/turbine/util/uri/URIUtils.java
deleted file mode 100644
index 1ecaccd..0000000
--- a/src/java/org/apache/turbine/util/uri/URIUtils.java
+++ /dev/null
@@ -1,86 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.Turbine;
-
-/**
- * Bundles a few static routines concerning URIs, that you
- * will need all the time.
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public abstract class URIUtils
-{
-    /**
-     * Convert a given Path into a Turbine Data URI. The resulting
-     * path contains no path_info or query data. If you have a current
-     * runData object around, you should use DataURI and setScriptName()!.
-     *
-     * @param path A relative path
-     *
-     * @return the absolute path for the request.
-     *
-     */
-
-    public static String getAbsoluteLink(String path)
-    {
-        DataURI du = new DataURI(Turbine.getDefaultServerData());
-        du.setScriptName(path);
-        return du.getAbsoluteLink();
-    }
-}
diff --git a/src/java/org/apache/turbine/util/uri/package.html b/src/java/org/apache/turbine/util/uri/package.html
deleted file mode 100644
index 218b032..0000000
--- a/src/java/org/apache/turbine/util/uri/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-URI generation and processing from Turbine based applications.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java b/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
deleted file mode 100644
index 6de81a6..0000000
--- a/src/java/org/apache/turbine/util/velocity/VelocityActionEvent.java
+++ /dev/null
@@ -1,333 +0,0 @@
-package org.apache.turbine.util.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import java.util.Iterator;
-
-import org.apache.turbine.modules.ActionEvent;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.parser.ParameterParser;
-
-import org.apache.velocity.context.Context;
-
-/**
- * If you are using VelocitySite stuff, then your Action's should
- * extend this class instead of extending the ActionEvent class.  The
- * difference between this class and the ActionEvent class is that
- * this class will first attempt to execute one of your doMethod's
- * with a constructor like this:
- *
- * <p><code>doEvent(RunData data, Context context)</code></p>
- *
- * <p>It gets the context from the TemplateInfo.getTemplateContext()
- * method. If it can't find a method like that, then it will try to
- * execute the method without the Context in it.</p>
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:jvanzyl@periapt.com">Jason van Zyl</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class VelocityActionEvent extends ActionEvent
-{
-    /** Constant needed for Reflection */
-    private static final Class [] methodParams
-            = new Class [] { RunData.class, Context.class };
-
-    /** Indicates whether or not this module has been initialized. */
-    protected boolean initialized = false; 
-
-    /**
-     * You need to implement this in your classes that extend this
-     * class.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data A Turbine RunData object.
-     * @exception Exception a generic exception.
-     */
-    public abstract void doPerform(RunData data)
-            throws Exception;
-
-	/**
-	 * You need to implement this in your classes that extend this class.
-	 * Should revert to abstract once RunData is gone.
-	 * @param data Turbine information.
-	 * @exception Exception a generic exception.
-	 */
-	public void doPerform(PipelineData pipelineData)
-			throws Exception
-	{
-	      RunData data = (RunData) getRunData(pipelineData);
-	      doPerform(data);	    
-	}
-    /**
-     * Provides a means of initializing the module.
-     * 
-     * @throws Exception a generic exception.
-     */
-    protected abstract void initialize()
-        throws Exception;
-
-    /**
-     * This overrides the default Action.perform() to execute the
-     * doEvent() method.  If that fails, then it will execute the
-     * doPerform() method instead.
-     *
-     * @deprecated Use PipelineData version instead.
-     * @param data A Turbine RunData object.
-     * @exception Exception a generic exception.
-     */
-    protected void perform(RunData data)
-            throws Exception
-    {
-        try
-        {
-            if (!initialized)
-            {
-                initialize();
-            }
-            executeEvents(data, TurbineVelocity.getContext(data));
-        }
-        catch (NoSuchMethodException e)
-        {
-            doPerform(data);
-        }
-    }
-
-    /**
-     * This overrides the default Action.perform() to execute the
-     * doEvent() method.  If that fails, then it will execute the
-     * doPerform() method instead.
-     *
-     * @param data A Turbine RunData object.
-     * @exception Exception a generic exception.
-     */
-    protected void perform(PipelineData pipelineData)
-            throws Exception
-    {
-	    RunData data = (RunData) getRunData(pipelineData);
-        try
-        {
-            if (!initialized)
-            {
-                initialize();
-            }
-            executeEvents(pipelineData, TurbineVelocity.getContext(pipelineData));
-        }
-        catch (NoSuchMethodException e)
-        {
-            doPerform(pipelineData);
-        }
-    }
-    /**
-     * This method should be called to execute the event based system.
-     * @deprecated Use PipelineData version instead.
-     * @param data A Turbine RunData object.
-     * @param context Velocity context information.
-     * @exception Exception a generic exception.
-     */
-    public void executeEvents(RunData data, Context context)
-            throws Exception
-    {
-        // Name of the button.
-        String theButton = null;
-
-        // ParameterParser.
-        ParameterParser pp = data.getParameters();
-
-        String button = pp.convert(BUTTON);
-        String key = null;
-
-        // Loop through and find the button.
-        for (Iterator it = pp.keySet().iterator(); it.hasNext();)
-        {
-            key = (String) it.next();
-            if (key.startsWith(button))
-            {
-                if (considerKey(key, pp))
-                {
-                    theButton = formatString(key);
-                    break;
-                }
-            }
-        }
-
-        if (theButton == null)
-        {
-            throw new NoSuchMethodException(
-                    "ActionEvent: The button was null");
-        }
-
-        Method method = null;
-        try
-        {
-            method = getClass().getMethod(theButton, methodParams);
-            Object[] methodArgs = new Object[] { data, context };
-
-            if (log.isDebugEnabled())
-            {
-                log.debug("Invoking " + method);
-            }
-
-            method.invoke(this, methodArgs);
-        }
-        catch (NoSuchMethodException nsme)
-        {
-            // Attempt to execute things the old way..
-            if (log.isDebugEnabled())
-            {
-                log.debug("Couldn't locate the Event ( " + theButton 
-                        + "), running executeEvents() in "
-                        + super.getClass().getName());
-            }
-
-            super.executeEvents(data);
-        }
-        catch (InvocationTargetException ite)
-        {
-            Throwable t = ite.getTargetException();
-            log.error("Invokation of " + method , t);
-            throw ite;
-        }
-        finally
-        {
-            pp.remove(key);
-        }
-    }
-    
-    /**
-     * This method should be called to execute the event based system.
-     *
-     * @param data A Turbine RunData object.
-     * @param context Velocity context information.
-     * @exception Exception a generic exception.
-     */
-    public void executeEvents(PipelineData pipelineData, Context context)
-            throws Exception
-    {
-	    RunData data = (RunData) getRunData(pipelineData);
-        // Name of the button.
-        String theButton = null;
-
-        // ParameterParser.
-        ParameterParser pp = data.getParameters();
-
-        String button = pp.convert(BUTTON);
-        String key = null;
-
-        // Loop through and find the button.
-        for (Iterator it = pp.keySet().iterator(); it.hasNext();)
-        {
-            key = (String) it.next();
-            if (key.startsWith(button))
-            {
-                if (considerKey(key, pp))
-                {
-                    theButton = formatString(key);
-                    break;
-                }
-            }
-        }
-
-        if (theButton == null)
-        {
-            throw new NoSuchMethodException(
-                    "ActionEvent: The button was null");
-        }
-
-        Method method = null;
-        try
-        {
-            method = getClass().getMethod(theButton, methodParams);
-            Object[] methodArgs = new Object[] { pipelineData, context };
-
-            if (log.isDebugEnabled())
-            {
-                log.debug("Invoking " + method);
-            }
-
-            method.invoke(this, methodArgs);
-        }
-        catch (NoSuchMethodException nsme)
-        {
-            // Attempt to execute things the old way..
-            if (log.isDebugEnabled())
-            {
-                log.debug("Couldn't locate the Event ( " + theButton 
-                        + "), running executeEvents() in "
-                        + super.getClass().getName());
-            }
-
-            super.executeEvents(pipelineData);
-        }
-        catch (InvocationTargetException ite)
-        {
-            Throwable t = ite.getTargetException();
-            log.error("Invokation of " + method , t);
-            throw ite;
-        }
-        finally
-        {
-            pp.remove(key);
-        }
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/velocity/VelocityEmail.java b/src/java/org/apache/turbine/util/velocity/VelocityEmail.java
deleted file mode 100644
index 1ffbde5..0000000
--- a/src/java/org/apache/turbine/util/velocity/VelocityEmail.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package org.apache.turbine.util.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.mail.MessagingException;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.commons.mail.SimpleEmail;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This is a simple class for sending email from within Velocity.
- * Essentially, the body of the email is processed with a
- * Velocity Context object.
- * The beauty of this is that you can send email from within your
- * Velocity template or from your business logic in your Java code.
- * The body of the email is just a Velocity template so you can use
- * all the template functionality of Velocity within your emails!
- *
- * <p>Example Usage (This all needs to be on one line in your
- * template):
- *
- * <p>Setup your context:
- *
- * <p><code>context.put ("VelocityEmail", new VelocityEmail() );</code>
- *
- * <p>Then, in your template:
- *
- * <pre>
- * $VelocityEmail.setTo("Jon Stevens", "jon@latchkey.com")
- *     .setFrom("Mom", "mom@mom.com").setSubject("Eat dinner")
- *     .setTemplate("email/momEmail.vm")
- *     .setContext($context)
- * </pre>
- *
- * The email/momEmail.wm template will then be parsed with the
- * Context that was defined with setContext().
- *
- * <p>If you want to use this class from within your Java code all you
- * have to do is something like this:
- *
- * <pre>
- * VelocityEmail ve = new VelocityEmail();
- * ve.setTo("Jon Stevens", "jon@latchkey.com");
- * ve.setFrom("Mom", "mom@mom.com").setSubject("Eat dinner");
- * ve.setContext(context);
- * ve.setTemplate("email/momEmail.vm")
- * ve.send();
- * </pre>
- *
- * <p>(Note that when used within a Velocity template, the send method
- * will be called for you when Velocity tries to convert the
- * VelocityEmail to a string by calling toString()).</p>
- *
- * <p>If you need your email to be word-wrapped, you can add the
- * following call to those above:
- *
- * <pre>
- * ve.setWordWrap (60);
- * </pre>
- *
- * <p>This class is just a wrapper around the SimpleEmail class from
- * commons-mail using the JavaMail API.
- * Thus, it depends on having the
- * mail.server property set in the TurbineResources.properties file.
- * If you want to use this class outside of Turbine for general
- * processing that is also possible by making sure to set the path to
- * the TurbineResources.properties.  See the
- * TurbineConfig class for more information.</p>
- *
- * <p>You can turn on debugging for the JavaMail API by calling
- * setDebug(true).  The debugging messages will be written to System.out.
- *
- * @author <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
- * @author <a href="mailto:gcoladonato@yahoo.com">Greg Coladonato</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class VelocityEmail extends SimpleEmail
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(VelocityEmail.class);
-
-    /** The column to word-wrap at.  <code>0</code> indicates no wrap. */
-    private int wordWrap = 0;
-
-    /** Address of outgoing mail server */
-    private String mailServer;
-
-    /** The template to process, relative to Velocity template directory. */
-    private String template = null;
-
-    /** Velocity context */
-    private Context context = null;
-
-    /**
-     * Constructor
-     */
-    public VelocityEmail()
-    {
-    }
-
-    /**
-     * Constructor
-     */
-    public VelocityEmail(Context context)
-    {
-        this.context = context;
-    }
-
-    /**
-     * To: toName, toEmail
-     *
-     * @param toName A String with the TO toName.
-     * @param toEmail A String with the TO toEmail.
-     * @deprecated use addTo(email,name) instead
-     * @throws MessagingException email address could not be parsed
-     * @return A VelocityEmail (self).
-     */
-    public VelocityEmail setTo(String toName, String toEmail)
-            throws MessagingException
-    {
-        addTo(toEmail,toName);
-        return this;
-    }
-
-    /**
-     * Velocity template to execute. Path is relative to the Velocity
-     * templates directory.
-     *
-     * @param template relative path of the template to parse including the
-     *                 filename.
-     * @return A VelocityEmail (self).
-     */
-    public VelocityEmail setTemplate(String template)
-    {
-        this.template = template;
-        return this;
-    }
-
-    /**
-     * Set the column at which long lines of text should be word-
-     * wrapped. Setting to zero turns off word-wrap (default).
-     *
-     * NOTE: don't use tabs in your email template document,
-     * or your word-wrapping will be off for the lines with tabs
-     * in them.
-     *
-     * @param wordWrap The column at which to wrap long lines.
-     * @return A VelocityEmail (self).
-     */
-    public VelocityEmail setWordWrap(int wordWrap)
-    {
-        this.wordWrap = wordWrap;
-        return this;
-    }
-
-    /**
-     * Set the context object that will be merged with the
-     * template.
-     *
-     * @param context A Velocity context object.
-     * @return A VelocityEmail (self).
-     */
-    public VelocityEmail setContext(Context context)
-    {
-        this.context = context;
-        return this;
-    }
-
-    /**
-     * Get the context object that will be merged with the
-     * template.
-     *
-     * @return A Context (self).
-     */
-    public Context getContext()
-    {
-        return this.context;
-    }
-
-    /**
-     * Sets the address of the outgoing mail server.  This method
-     * should be used when you need to override the value stored in
-     * TR.props.
-     *
-     * @param serverAddress host name of your outgoing mail server
-     */
-    public void setMailServer(String serverAddress)
-    {
-        this.mailServer = serverAddress;
-    }
-
-    /**
-     * Gets the host name of the outgoing mail server.  If the server
-     * name has not been set by calling setMailServer(), the value
-     * from TR.props for mail.server will be returned.  If TR.props
-     * has no value for mail.server, localhost will be returned.
-     *
-     * @return host name of the mail server.
-     */
-    public String getMailServer()
-    {
-        return StringUtils.isNotEmpty(mailServer) ? mailServer
-                : Turbine.getConfiguration().getString(
-                TurbineConstants.MAIL_SERVER_KEY,
-                TurbineConstants.MAIL_SERVER_DEFAULT);
-    }
-
-    /**
-     * This method sends the email.
-     * <p>If the mail server was not set by calling, setMailServer()
-     * the value of mail.server will be used from TR.props.  If that
-     * value was not set, localhost is used.
-     *
-     * @throws MessagingException Failure during merging the velocity
-     * template or sending the email.
-     */
-    public void send() throws MessagingException
-    {
-        String body = null;
-        try
-        {
-            // Process the template.
-            body = TurbineVelocity.handleRequest(context, template);
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException(
-                    "Could not render velocitty template", e);
-        }
-
-        // If the caller desires word-wrapping, do it here
-        if (wordWrap > 0)
-        {
-            body = WordUtils.wrap(body,wordWrap,
-                    System.getProperty("line.separator"),true);
-        }
-
-        setMsg(body);
-        setHostName(getMailServer());
-        super.send();
-    }
-
-    /**
-     * The method toString() calls send() for ease of use within a
-     * Velocity template (see example usage above).
-     *
-     * @return An empty string.
-     */
-    public String toString()
-    {
-        try
-        {
-            send();
-        }
-        catch (Exception e)
-        {
-            log.error("VelocityEmail error", e);
-        }
-        return "";
-    }
-}
diff --git a/src/java/org/apache/turbine/util/velocity/VelocityEmailException.java b/src/java/org/apache/turbine/util/velocity/VelocityEmailException.java
deleted file mode 100644
index 1120862..0000000
--- a/src/java/org/apache/turbine/util/velocity/VelocityEmailException.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package org.apache.turbine.util.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.util.TurbineException;
-
-/**
- * This exception is thrown if a VelocityEmail/VelocityHtmlEmail can not be
- * sent using JavaMail.  It will most likly wrap a javax.mail.MessagingException
- * exception.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- */
-public class VelocityEmailException extends TurbineException
-{
-    /**
-     * Constructs a new <code>VelocityEmailException</code> without specified
-     * detail message.
-     */
-    public VelocityEmailException()
-    {
-    }
-
-    /**
-     * Constructs a new <code>VelocityEmailException</code> with specified
-     * detail message.
-     *
-     * @param msg The error message.
-     */
-    public VelocityEmailException(String msg)
-    {
-        super(msg);
-    }
-
-    /**
-     * Constructs a new <code>VelocityEmailException</code> with specified
-     * nested <code>Throwable</code>.
-     *
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public VelocityEmailException(Throwable nested)
-    {
-        super(nested);
-    }
-
-    /**
-     * Constructs a new <code>VelocityEmailException</code> with specified
-     * detail message and nested <code>Throwable</code>.
-     *
-     * @param msg    The error message.
-     * @param nested The exception or error that caused this exception
-     *               to be thrown.
-     */
-    public VelocityEmailException(String msg, Throwable nested)
-    {
-        super(msg, nested);
-    }
-}
diff --git a/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java b/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
deleted file mode 100644
index 4e4c535..0000000
--- a/src/java/org/apache/turbine/util/velocity/VelocityHtmlEmail.java
+++ /dev/null
@@ -1,320 +0,0 @@
-package org.apache.turbine.util.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.net.URL;
-
-import java.util.Hashtable;
-
-import javax.mail.MessagingException;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import org.apache.commons.mail.HtmlEmail;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.velocity.TurbineVelocity;
-import org.apache.turbine.util.RunData;
-
-import org.apache.velocity.context.Context;
-
-/**
- * This is a simple class for sending html email from within Velocity.
- * Essentially, the bodies (text and html) of the email are a Velocity
- * Context objects.  The beauty of this is that you can send email
- * from within your Velocity template or from your business logic in
- * your Java code.  The body of the email is just a Velocity template
- * so you can use all the template functionality of Velocity within
- * your emails!
- *
- * <p>This class allows you to send HTML email with embedded content
- * and/or with attachments.  You can access the VelocityHtmlEmail
- * instance within your templates trough the <code>$mail</code>
- * Velocity variable.
- * <p><code>VelocityHtmlEmail   myEmail= new VelocityHtmlEmail(data);<br>
- *                              context.put("mail", myMail);</code>
- * <b>or</b>
- *    <code>VelocityHtmlEmail   myEmail= new VelocityHtmlEmail(context);<br>
- *                              context.put("mail", myMail);</code>
- *
- *
- * <p>The templates should be located under your Template turbine
- * directory.
- *
- * <p>This class wraps the HtmlEmail class from commons-email.  Thus, it uses
- * the JavaMail API and also depends on having the mail.server property
- * set in the TurbineResources.properties file.  If you want to use
- * this class outside of Turbine for general processing that is also
- * possible by making sure to set the path to the
- * TurbineResources.properties.  See the
- * TurbineResourceService.setPropertiesFileName() method for more
- * information.
- *
- * <p>This class is basically a conversion of the WebMacroHtmlEmail
- * written by Regis Koenig
- *
- * <p>You can turn on debugging for the JavaMail API by calling
- * setDebug(true).  The debugging messages will be written to System.out.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:A.Schild@aarboard.ch">Andre Schild</a>
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class VelocityHtmlEmail extends HtmlEmail
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(VelocityHtmlEmail.class);
-
-    /**
-     * The html template to process, relative to VM's template
-     * directory.
-     */
-    private String htmlTemplate = null;
-
-    /**
-     * The text template to process, relative to VM's template
-     * directory.
-     */
-    private String textTemplate = null;
-
-    /** The cached context object. */
-    private Context context = null;
-
-    /** The map of embedded files. */
-    private Hashtable embmap = null;
-
-    /** Address of outgoing mail server */
-    private String mailServer;
-
-    /**
-     * Constructor, sets the context object from the passed RunData object
-     * @deprecated use PipelineData version instead
-     * @param data A Turbine RunData object.
-     */
-    public VelocityHtmlEmail(RunData data)
-    {
-        this.context = TurbineVelocity.getContext(data);
-        embmap = new Hashtable();
-    }
-
-    /**
-     * Constructor, sets the context object from the passed RunData object
-     *
-     * @param data A Turbine RunData object.
-     */
-    public VelocityHtmlEmail(PipelineData pipelineData)
-    {
-        this.context = TurbineVelocity.getContext(pipelineData);
-        embmap = new Hashtable();
-    }
-
-    /**
-     * Constructor, sets the context object.
-     *
-     * @param context A Velocity context object.
-     */
-    public VelocityHtmlEmail(Context context)
-    {
-        this.context = context;
-        embmap = new Hashtable();
-    }
-
-    /**
-     * Set the HTML template for the mail.  This is the Velocity
-     * template to execute for the HTML part.  Path is relative to the
-     * VM templates directory.
-     *
-     * @param template A String.
-     * @return A VelocityHtmlEmail (self).
-     */
-    public VelocityHtmlEmail setHtmlTemplate(String template)
-    {
-        this.htmlTemplate = template;
-        return this;
-    }
-
-    /**
-     * Set the text template for the mail.  This is the Velocity
-     * template to execute for the text part.  Path is relative to the
-     * VM templates directory
-     *
-     * @param template A String.
-     * @return A VelocityHtmlEmail (self).
-     */
-    public VelocityHtmlEmail setTextTemplate(String template)
-    {
-        this.textTemplate = template;
-        return this;
-    }
-
-    /**
-     * Sets the address of the outgoing mail server.  This method
-     * should be used when you need to override the value stored in
-     * TR.props.
-     *
-     * @param serverAddress host name of your outgoing mail server
-     */
-    public void setMailServer(String serverAddress)
-    {
-        this.mailServer = serverAddress;
-    }
-
-    /**
-     * Gets the host name of the outgoing mail server.  If the server
-     * name has not been set by calling setMailServer(), the value
-     * from TR.props for mail.server will be returned.  If TR.props
-     * has no value for mail.server, localhost will be returned.
-     *
-     * @return host name of the mail server.
-     */
-    public String getMailServer()
-    {
-        return StringUtils.isNotEmpty(mailServer) ? mailServer
-                : Turbine.getConfiguration().getString(
-                TurbineConstants.MAIL_SERVER_KEY,
-                TurbineConstants.MAIL_SERVER_DEFAULT);
-    }
-
-    /**
-     * Actually send the mail.
-     *
-     * @exception MessagingException thrown if mail cannot be sent.
-     */
-    public void send() throws MessagingException
-    {
-        context.put("mail", this);
-
-        try
-        {
-            if (htmlTemplate != null)
-            {
-                setHtmlMsg(
-                        TurbineVelocity.handleRequest(context, htmlTemplate));
-            }
-            if (textTemplate != null)
-            {
-                setTextMsg(
-                        TurbineVelocity.handleRequest(context, textTemplate));
-            }
-        }
-        catch (Exception e)
-        {
-            throw new MessagingException("Cannot parse velocity template", e);
-        }
-        setHostName(getMailServer());
-        super.send();
-    }
-
-    /**
-     * Embed a file in the mail.  The file can be referenced through
-     * its Content-ID.  This function also registers the CID in an
-     * internal map, so the embedded file can be referenced more than
-     * once by using the getCid() function.  This may be useful in a
-     * template.
-     *
-     * <p>Example of template:
-     *
-     * <code><pre width="80">
-     * &lt;html&gt;
-     * &lt;!-- $mail.embed("http://server/border.gif","border.gif"); --&gt;
-     * &lt;img src=$mail.getCid("border.gif")&gt;
-     * &lt;p&gt;This is your content
-     * &lt;img src=$mail.getCid("border.gif")&gt;
-     * &lt;/html&gt;
-     * </pre></code>
-     *
-     * @param surl A String.
-     * @param name A String.
-     * @return A String with the cid of the embedded file.
-     * @exception VelocityEmailException
-     * @see HtmlEmail#embed(URL surl, String name) embed.
-     */
-    public String embed(String surl, String name) throws VelocityEmailException
-    {
-        String cid = "";
-        try
-        {
-            URL url = new URL(surl);
-            cid = embed(url, name);
-        }
-        catch (Exception e)
-        {
-            log.error("cannot embed " + surl + ": ", e);
-        }
-        return cid;
-    }
-
-    /**
-     * Get the cid of an embedded file.
-     *
-     * @param filename A String.
-     * @return A String with the cid of the embedded file.
-     * @see #embed(String surl, String name) embed.
-     */
-    public String getCid(String filename)
-    {
-        String cid = (String) embmap.get(filename);
-        return "cid:" + cid;
-    }
-
-}
diff --git a/src/java/org/apache/turbine/util/velocity/package.html b/src/java/org/apache/turbine/util/velocity/package.html
deleted file mode 100644
index b623329..0000000
--- a/src/java/org/apache/turbine/util/velocity/package.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<!-- head part is ignored -->
-</head>
-
-<body>
-Velocity related utility code.
-<br>
-<font size="-2">$Id$</font>
-</body>
-</html>
diff --git a/src/macros/TurbineMacros.vm b/src/macros/TurbineMacros.vm
deleted file mode 100644
index 88781a2..0000000
--- a/src/macros/TurbineMacros.vm
+++ /dev/null
@@ -1,111 +0,0 @@
-## ====================================================================
-##  The Apache Software License, Version 1.1
-## 
-##  Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
-##     derived from this 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 Turbine", 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/>.
-##
-## @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
-## @version $Id$
-
-##
-## Build the <head> ... </head> tag of a web page with VelocityOnly Layout
-## 
-
-#macro (TurbineHtmlHead)
-<head>
-  #if ($!page.Title)
-    <title>$page.Title</title>
-  #end
-  #if ($page.MetaTags.size() > 0)
-    #foreach($metaTag in $page.MetaTags.keySet())
-      <meta name="$metaTag" content="$page.MetaTags.get($metaTag)">
-    #end
-  #end
-  #if ($page.HttpEquivs.size() > 0)
-    #foreach($httpEquiv in $page.HttpEquivs.keySet())
-      <meta http-equiv="$httpEquiv" content="$page.HttpEquivs.get($httpEquiv)">
-    #end
-  #end
-  #if ($page.StyleSheets.size() > 0)
-    #foreach( $styleSheet in $page.StyleSheets )
-      <link rel="stylesheet" href="$styleSheet.Url"
-        #if($!styleSheet.Type)  type="$styleSheet.Type"   #end
-        #if($!styleSheet.Media) media="$styleSheet.Media" #end
-        #if($!styleSheet.Title) title="$styleSheet.Title" #end
-      >
-    #end
-  #end
-  #if ($page.Styles.size() > 0)
-      <style type="text/css">
-    #foreach( $style in $page.Styles )
-        $!style
-    #end
-      </style>
-  #end
-  #if ($page.Scripts.size() > 0)
-    #foreach( $script in $page.Scripts )
-      <script type="text/javascript" src="$script" language="JavaScript"></script>
-    #end
-  #end
-</head>
-#end
-
-##
-## Build the Tags for the Body start tag of a web page with VelocityOnly Layout
-## <body #TurbineHtmlBodyAttributes() >
-## 
-
-#macro (TurbineHtmlBodyAttributes)
-#if ($page.BodyAttributes.size() > 0)
-    #foreach( $attributeName in $page.BodyAttributes.keySet() )
-      $attributeName = "$page.BodyAttributes.get($attributeName)"
-    #end
-#end
-#end
diff --git a/src/sql/db2-id-table-schema.sql b/src/sql/db2-id-table-schema.sql
deleted file mode 100644
index 780c9a1..0000000
--- a/src/sql/db2-id-table-schema.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- ID_TABLE
------------------------------------------------------------------------------
-drop table ID_TABLE;
-
-
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID INT GENERATED ALWAYS AS IDENTITY,
-    TABLE_NAME VARCHAR (255) NOT NULL,
-    NEXT_ID INT NOT NULL,
-    QUANTITY INT NOT NULL,
-    UNIQUE (TABLE_NAME)
-);
-
-ALTER TABLE ID_TABLE
-    ADD CONSTRAINT ID_TABLE_PK 
-PRIMARY KEY (ID_TABLE_ID);
-
-
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/db2-turbine-id-table-init.sql b/src/sql/db2-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/db2-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/db2-turbine-security.sql b/src/sql/db2-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/db2-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/db2-turbine.sql b/src/sql/db2-turbine.sql
deleted file mode 100644
index 5f319f2..0000000
--- a/src/sql/db2-turbine.sql
+++ /dev/null
@@ -1,192 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- TURBINE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_PERMISSION;
-
-
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID INT NOT NULL,
-    PERMISSION_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA BLOB (16777215) NOT NULL,
-    UNIQUE (PERMISSION_NAME)
-);
-
-ALTER TABLE TURBINE_PERMISSION
-    ADD CONSTRAINT TURBINE_PERMISSION_PK 
-PRIMARY KEY (PERMISSION_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_ROLE;
-
-
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID INT NOT NULL,
-    ROLE_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA BLOB (16777215) NOT NULL,
-    UNIQUE (ROLE_NAME)
-);
-
-ALTER TABLE TURBINE_ROLE
-    ADD CONSTRAINT TURBINE_ROLE_PK 
-PRIMARY KEY (ROLE_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_GROUP
------------------------------------------------------------------------------
-drop table TURBINE_GROUP;
-
-
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID INT NOT NULL,
-    GROUP_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA BLOB (16777215) NOT NULL,
-    UNIQUE (GROUP_NAME)
-);
-
-ALTER TABLE TURBINE_GROUP
-    ADD CONSTRAINT TURBINE_GROUP_PK 
-PRIMARY KEY (GROUP_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_ROLE_PERMISSION;
-
-
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID INT NOT NULL,
-    PERMISSION_ID INT NOT NULL
-);
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_PK 
-PRIMARY KEY (ROLE_ID,PERMISSION_ID);
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_1 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-USING INDEX;
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_2 FOREIGN KEY (PERMISSION_ID)
-    REFERENCES TURBINE_PERMISSION (PERMISSION_ID)
-USING INDEX;
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER
------------------------------------------------------------------------------
-drop table TURBINE_USER;
-
-
-CREATE TABLE TURBINE_USER
-(
-    USER_ID INT NOT NULL,
-    LOGIN_NAME VARCHAR (32) NOT NULL,
-    PASSWORD_VALUE VARCHAR (32) NOT NULL,
-    FIRST_NAME VARCHAR (99) NOT NULL,
-    LAST_NAME VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99) NOT NULL,
-    CONFIRM_VALUE VARCHAR (99) NOT NULL,
-    MODIFIED DATE NOT NULL,
-    CREATED DATE NOT NULL,
-    LAST_LOGIN DATE NOT NULL,
-    OBJECTDATA BLOB (16777215) NOT NULL,
-    UNIQUE (LOGIN_NAME)
-);
-
-ALTER TABLE TURBINE_USER
-    ADD CONSTRAINT TURBINE_USER_PK 
-PRIMARY KEY (USER_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER_GROUP_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_USER_GROUP_ROLE;
-
-
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID INT NOT NULL,
-    GROUP_ID INT NOT NULL,
-    ROLE_ID INT NOT NULL
-);
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_PK 
-PRIMARY KEY (USER_ID,GROUP_ID,ROLE_ID);
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_1 FOREIGN KEY (USER_ID)
-    REFERENCES TURBINE_USER (USER_ID)
-USING INDEX;
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_2 FOREIGN KEY (GROUP_ID)
-    REFERENCES TURBINE_GROUP (GROUP_ID)
-USING INDEX;
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_3 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-USING INDEX;
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_SCHEDULED_JOB
------------------------------------------------------------------------------
-drop table TURBINE_SCHEDULED_JOB;
-
-
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID INT NOT NULL,
-    SECOND INT default -1 NOT NULL,
-    MINUTE INT default -1 NOT NULL,
-    HOUR INT default -1 NOT NULL,
-    WEEK_DAY INT default -1 NOT NULL,
-    DAY_OF_MONTH INT default -1 NOT NULL,
-    TASK VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99) NOT NULL,
-    PROPERTY BLOB (16777215) NOT NULL
-);
-
-ALTER TABLE TURBINE_SCHEDULED_JOB
-    ADD CONSTRAINT TURBINE_SCHEDULED_JOB_PK 
-PRIMARY KEY (JOB_ID);
-
-
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/hypersonic-id-table-schema.sql b/src/sql/hypersonic-id-table-schema.sql
deleted file mode 100644
index 7bb0f6a..0000000
--- a/src/sql/hypersonic-id-table-schema.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- ID_TABLE
------------------------------------------------------------------------------
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID integer IDENTITY,
-    TABLE_NAME VARCHAR (255),
-    NEXT_ID integer,
-    QUANTITY integer,
-    PRIMARY KEY(ID_TABLE_ID),
-    UNIQUE (TABLE_NAME)
-);
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/hypersonic-turbine-id-table-init.sql b/src/sql/hypersonic-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/hypersonic-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/hypersonic-turbine-security.sql b/src/sql/hypersonic-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/hypersonic-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/hypersonic-turbine.sql b/src/sql/hypersonic-turbine.sql
deleted file mode 100644
index ec9133a..0000000
--- a/src/sql/hypersonic-turbine.sql
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- TURBINE_PERMISSION
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID integer,
-    PERMISSION_NAME VARCHAR (99),
-    OBJECTDATA BINARY,
-    PRIMARY KEY(PERMISSION_ID),
-    UNIQUE (PERMISSION_NAME)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID integer,
-    ROLE_NAME VARCHAR (99),
-    OBJECTDATA BINARY,
-    PRIMARY KEY(ROLE_ID),
-    UNIQUE (ROLE_NAME)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_GROUP
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID integer,
-    GROUP_NAME VARCHAR (99),
-    OBJECTDATA BINARY,
-    PRIMARY KEY(GROUP_ID),
-    UNIQUE (GROUP_NAME)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE_PERMISSION
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID integer,
-    PERMISSION_ID integer,
-    PRIMARY KEY(ROLE_ID,PERMISSION_ID)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_USER
-(
-    USER_ID integer,
-    LOGIN_NAME VARCHAR (32),
-    PASSWORD_VALUE VARCHAR (32),
-    FIRST_NAME VARCHAR (99),
-    LAST_NAME VARCHAR (99),
-    EMAIL VARCHAR (99),
-    CONFIRM_VALUE VARCHAR (99),
-    MODIFIED timestamp,
-    CREATED timestamp,
-    LAST_LOGIN timestamp,
-    OBJECTDATA BINARY,
-    PRIMARY KEY(USER_ID),
-    UNIQUE (LOGIN_NAME)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER_GROUP_ROLE
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID integer,
-    GROUP_ID integer,
-    ROLE_ID integer,
-    PRIMARY KEY(USER_ID,GROUP_ID,ROLE_ID)
-);
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_SCHEDULED_JOB
------------------------------------------------------------------------------
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID integer,
-    SECOND integer,
-    MINUTE integer,
-    HOUR integer,
-    WEEK_DAY integer,
-    DAY_OF_MONTH integer,
-    TASK VARCHAR (99),
-    EMAIL VARCHAR (99),
-    PROPERTY BINARY,
-    PRIMARY KEY(JOB_ID)
-);
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/interbase-id-table-schema.sql b/src/sql/interbase-id-table-schema.sql
deleted file mode 100644
index 857e690..0000000
--- a/src/sql/interbase-id-table-schema.sql
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-                                        
-/* --------------------------------------------------------------------------
-ID_TABLE
--------------------------------------------------------------------------- */
-CREATE TABLE ID_TABLE
-(
-    "ID_TABLE_ID" INTEGER NOT NULL IDENTITY,
-    "TABLE_NAME" VARCHAR (255) NOT NULL,
-    "NEXT_ID" INTEGER,
-    "QUANTITY" INTEGER,
-    PRIMARY KEY(ID_TABLE_ID),
-    UNIQUE (TABLE_NAME)
-);
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/interbase-turbine-id-table-init.sql b/src/sql/interbase-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/interbase-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/interbase-turbine-security.sql b/src/sql/interbase-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/interbase-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/interbase-turbine.sql b/src/sql/interbase-turbine.sql
deleted file mode 100644
index 9aa34aa..0000000
--- a/src/sql/interbase-turbine.sql
+++ /dev/null
@@ -1,111 +0,0 @@
-
-
-                                        
-/* --------------------------------------------------------------------------
-TURBINE_PERMISSION
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_PERMISSION
-(
-    "PERMISSION_ID" INTEGER NOT NULL,
-    "PERMISSION_NAME" VARCHAR (99) NOT NULL,
-    "OBJECTDATA" BLOB,
-    PRIMARY KEY(PERMISSION_ID),
-    UNIQUE (PERMISSION_NAME)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_ROLE
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_ROLE
-(
-    "ROLE_ID" INTEGER NOT NULL,
-    "ROLE_NAME" VARCHAR (99) NOT NULL,
-    "OBJECTDATA" BLOB,
-    PRIMARY KEY(ROLE_ID),
-    UNIQUE (ROLE_NAME)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_GROUP
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_GROUP
-(
-    "GROUP_ID" INTEGER NOT NULL,
-    "GROUP_NAME" VARCHAR (99) NOT NULL,
-    "OBJECTDATA" BLOB,
-    PRIMARY KEY(GROUP_ID),
-    UNIQUE (GROUP_NAME)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_ROLE_PERMISSION
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    "ROLE_ID" INTEGER NOT NULL,
-    "PERMISSION_ID" INTEGER NOT NULL,
-    PRIMARY KEY(ROLE_ID,PERMISSION_ID)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_USER
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_USER
-(
-    "USER_ID" INTEGER NOT NULL,
-    "LOGIN_NAME" VARCHAR (32) NOT NULL,
-    "PASSWORD_VALUE" VARCHAR (32) NOT NULL,
-    "FIRST_NAME" VARCHAR (99) NOT NULL,
-    "LAST_NAME" VARCHAR (99) NOT NULL,
-    "EMAIL" VARCHAR (99),
-    "CONFIRM_VALUE" VARCHAR (99),
-    "MODIFIED" timestamp,
-    "CREATED" timestamp,
-    "LAST_LOGIN" timestamp,
-    "OBJECTDATA" BLOB,
-    PRIMARY KEY(USER_ID),
-    UNIQUE (LOGIN_NAME)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_USER_GROUP_ROLE
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    "USER_ID" INTEGER NOT NULL,
-    "GROUP_ID" INTEGER NOT NULL,
-    "ROLE_ID" INTEGER NOT NULL,
-    PRIMARY KEY(USER_ID,GROUP_ID,ROLE_ID)
-);
-
-
-                                                
-/* --------------------------------------------------------------------------
-TURBINE_SCHEDULED_JOB
--------------------------------------------------------------------------- */
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    "JOB_ID" INTEGER NOT NULL,
-    "SECOND" INTEGER default -1 NOT NULL,
-    "MINUTE" INTEGER default -1 NOT NULL,
-    "HOUR" INTEGER default -1 NOT NULL,
-    "WEEK_DAY" INTEGER default -1 NOT NULL,
-    "DAY_OF_MONTH" INTEGER default -1 NOT NULL,
-    "TASK" VARCHAR (99) NOT NULL,
-    "EMAIL" VARCHAR (99),
-    "PROPERTY" BLOB,
-    PRIMARY KEY(JOB_ID)
-);
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/mysql-id-table-schema.sql b/src/sql/mysql-id-table-schema.sql
deleted file mode 100644
index 5a59be0..0000000
--- a/src/sql/mysql-id-table-schema.sql
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-                                        
-# -----------------------------------------------------------------------
-# ID_TABLE
-# -----------------------------------------------------------------------
-drop table if exists ID_TABLE;
-
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID INTEGER NOT NULL AUTO_INCREMENT,
-    TABLE_NAME VARCHAR (255) NOT NULL,
-    NEXT_ID INTEGER,
-    QUANTITY INTEGER,
-    PRIMARY KEY(ID_TABLE_ID),
-    UNIQUE (TABLE_NAME)
-);
-
-                        
\ No newline at end of file
diff --git a/src/sql/mysql-turbine-id-table-init.sql b/src/sql/mysql-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/mysql-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/mysql-turbine-security.sql b/src/sql/mysql-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/mysql-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/mysql-turbine.sql b/src/sql/mysql-turbine.sql
deleted file mode 100644
index a52701c..0000000
--- a/src/sql/mysql-turbine.sql
+++ /dev/null
@@ -1,126 +0,0 @@
-
-
-                                        
-# -----------------------------------------------------------------------
-# TURBINE_PERMISSION
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_PERMISSION;
-
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID INTEGER NOT NULL,
-    PERMISSION_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA MEDIUMBLOB,
-    PRIMARY KEY(PERMISSION_ID),
-    UNIQUE (PERMISSION_NAME)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_ROLE
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_ROLE;
-
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID INTEGER NOT NULL,
-    ROLE_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA MEDIUMBLOB,
-    PRIMARY KEY(ROLE_ID),
-    UNIQUE (ROLE_NAME)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_GROUP
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_GROUP;
-
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID INTEGER NOT NULL,
-    GROUP_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA MEDIUMBLOB,
-    PRIMARY KEY(GROUP_ID),
-    UNIQUE (GROUP_NAME)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_ROLE_PERMISSION
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_ROLE_PERMISSION;
-
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID INTEGER NOT NULL,
-    PERMISSION_ID INTEGER NOT NULL,
-    PRIMARY KEY(ROLE_ID,PERMISSION_ID),
-    INDEX(PERMISSION_ID),
-    FOREIGN KEY (ROLE_ID) REFERENCES TURBINE_ROLE (ROLE_ID),
-    FOREIGN KEY (PERMISSION_ID) REFERENCES TURBINE_PERMISSION (PERMISSION_ID)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_USER
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_USER;
-
-CREATE TABLE TURBINE_USER
-(
-    USER_ID INTEGER NOT NULL,
-    LOGIN_NAME VARCHAR (32) NOT NULL,
-    PASSWORD_VALUE VARCHAR (32) NOT NULL,
-    FIRST_NAME VARCHAR (99) NOT NULL,
-    LAST_NAME VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99),
-    CONFIRM_VALUE VARCHAR (99),
-    MODIFIED TIMESTAMP,
-    CREATED TIMESTAMP,
-    LAST_LOGIN TIMESTAMP,
-    OBJECTDATA MEDIUMBLOB,
-    PRIMARY KEY(USER_ID),
-    UNIQUE (LOGIN_NAME)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_USER_GROUP_ROLE
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_USER_GROUP_ROLE;
-
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID INTEGER NOT NULL,
-    GROUP_ID INTEGER NOT NULL,
-    ROLE_ID INTEGER NOT NULL,
-    PRIMARY KEY(USER_ID,GROUP_ID,ROLE_ID),
-    INDEX(GROUP_ID,ROLE_ID),
-    INDEX(ROLE_ID),
-    FOREIGN KEY (USER_ID) REFERENCES TURBINE_USER (USER_ID),
-    FOREIGN KEY (GROUP_ID) REFERENCES TURBINE_GROUP (GROUP_ID),
-    FOREIGN KEY (ROLE_ID) REFERENCES TURBINE_ROLE (ROLE_ID)
-);
-
-                                                
-# -----------------------------------------------------------------------
-# TURBINE_SCHEDULED_JOB
-# -----------------------------------------------------------------------
-drop table if exists TURBINE_SCHEDULED_JOB;
-
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID INTEGER NOT NULL,
-    SECOND INTEGER default -1 NOT NULL,
-    MINUTE INTEGER default -1 NOT NULL,
-    HOUR INTEGER default -1 NOT NULL,
-    WEEK_DAY INTEGER default -1 NOT NULL,
-    DAY_OF_MONTH INTEGER default -1 NOT NULL,
-    TASK VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99),
-    PROPERTY MEDIUMBLOB,
-    PRIMARY KEY(JOB_ID)
-);
-
-                        
\ No newline at end of file
diff --git a/src/sql/oracle-id-table-schema.sql b/src/sql/oracle-id-table-schema.sql
deleted file mode 100644
index 38c929b..0000000
--- a/src/sql/oracle-id-table-schema.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- ID_TABLE
------------------------------------------------------------------------------
-drop table ID_TABLE cascade constraints;
-drop sequence ID_TABLE_SEQ;
-
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID INT NOT NULL,
-    TABLE_NAME VARCHAR2 (255) NOT NULL,
-    NEXT_ID INT,
-    QUANTITY INT,
-    UNIQUE (TABLE_NAME)
-);
-
-ALTER TABLE ID_TABLE
-    ADD CONSTRAINT ID_TABLE_PK 
-PRIMARY KEY (ID_TABLE_ID);
-
-
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/oracle-turbine-id-table-init.sql b/src/sql/oracle-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/oracle-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/oracle-turbine-security.sql b/src/sql/oracle-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/oracle-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/oracle-turbine.sql b/src/sql/oracle-turbine.sql
deleted file mode 100644
index 4320db2..0000000
--- a/src/sql/oracle-turbine.sql
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- TURBINE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_PERMISSION cascade constraints;
-
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID INT NOT NULL,
-    PERMISSION_NAME VARCHAR2 (99) NOT NULL,
-    OBJECTDATA LONG RAW,
-    UNIQUE (PERMISSION_NAME)
-);
-
-ALTER TABLE TURBINE_PERMISSION
-    ADD CONSTRAINT TURBINE_PERMISSION_PK 
-PRIMARY KEY (PERMISSION_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_ROLE cascade constraints;
-
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID INT NOT NULL,
-    ROLE_NAME VARCHAR2 (99) NOT NULL,
-    OBJECTDATA LONG RAW,
-    UNIQUE (ROLE_NAME)
-);
-
-ALTER TABLE TURBINE_ROLE
-    ADD CONSTRAINT TURBINE_ROLE_PK 
-PRIMARY KEY (ROLE_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_GROUP
------------------------------------------------------------------------------
-drop table TURBINE_GROUP cascade constraints;
-
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID INT NOT NULL,
-    GROUP_NAME VARCHAR2 (99) NOT NULL,
-    OBJECTDATA LONG RAW,
-    UNIQUE (GROUP_NAME)
-);
-
-ALTER TABLE TURBINE_GROUP
-    ADD CONSTRAINT TURBINE_GROUP_PK 
-PRIMARY KEY (GROUP_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_ROLE_PERMISSION cascade constraints;
-
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID INT NOT NULL,
-    PERMISSION_ID INT NOT NULL
-);
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_PK 
-PRIMARY KEY (ROLE_ID,PERMISSION_ID);
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_1 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-;
-
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_2 FOREIGN KEY (PERMISSION_ID)
-    REFERENCES TURBINE_PERMISSION (PERMISSION_ID)
-;
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER
------------------------------------------------------------------------------
-drop table TURBINE_USER cascade constraints;
-
-CREATE TABLE TURBINE_USER
-(
-    USER_ID INT NOT NULL,
-    LOGIN_NAME VARCHAR2 (32) NOT NULL,
-    PASSWORD_VALUE VARCHAR2 (32) NOT NULL,
-    FIRST_NAME VARCHAR2 (99) NOT NULL,
-    LAST_NAME VARCHAR2 (99) NOT NULL,
-    EMAIL VARCHAR2 (99),
-    CONFIRM_VALUE VARCHAR2 (99),
-    MODIFIED DATE,
-    CREATED DATE,
-    LAST_LOGIN DATE,
-    OBJECTDATA LONG RAW,
-    UNIQUE (LOGIN_NAME)
-);
-
-ALTER TABLE TURBINE_USER
-    ADD CONSTRAINT TURBINE_USER_PK 
-PRIMARY KEY (USER_ID);
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER_GROUP_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_USER_GROUP_ROLE cascade constraints;
-
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID INT NOT NULL,
-    GROUP_ID INT NOT NULL,
-    ROLE_ID INT NOT NULL
-);
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_PK 
-PRIMARY KEY (USER_ID,GROUP_ID,ROLE_ID);
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_1 FOREIGN KEY (USER_ID)
-    REFERENCES TURBINE_USER (USER_ID)
-;
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_2 FOREIGN KEY (GROUP_ID)
-    REFERENCES TURBINE_GROUP (GROUP_ID)
-;
-
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_3 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-;
-
-
-
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_SCHEDULED_JOB
------------------------------------------------------------------------------
-drop table TURBINE_SCHEDULED_JOB cascade constraints;
-
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID INT NOT NULL,
-    SECOND INT default -1 NOT NULL,
-    MINUTE INT default -1 NOT NULL,
-    HOUR INT default -1 NOT NULL,
-    WEEK_DAY INT default -1 NOT NULL,
-    DAY_OF_MONTH INT default -1 NOT NULL,
-    TASK VARCHAR2 (99) NOT NULL,
-    EMAIL VARCHAR2 (99),
-    PROPERTY LONG RAW
-);
-
-ALTER TABLE TURBINE_SCHEDULED_JOB
-    ADD CONSTRAINT TURBINE_SCHEDULED_JOB_PK 
-PRIMARY KEY (JOB_ID);
-
-
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/postgresql-id-table-schema.sql b/src/sql/postgresql-id-table-schema.sql
deleted file mode 100644
index 6a1630b..0000000
--- a/src/sql/postgresql-id-table-schema.sql
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- ID_TABLE
------------------------------------------------------------------------------
-drop sequence ID_TABLE_SEQ;
-drop table ID_TABLE;
-
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID serial,
-    TABLE_NAME varchar (255) NOT NULL,
-    NEXT_ID integer,
-    QUANTITY integer,
-    PRIMARY KEY(ID_TABLE_ID),
-    UNIQUE (TABLE_NAME)
-);
-
-                        
\ No newline at end of file
diff --git a/src/sql/postgresql-turbine-id-table-init.sql b/src/sql/postgresql-turbine-id-table-init.sql
deleted file mode 100644
index 06c89e4..0000000
--- a/src/sql/postgresql-turbine-id-table-init.sql
+++ /dev/null
@@ -1,11 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/postgresql-turbine-security.sql b/src/sql/postgresql-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/postgresql-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/postgresql-turbine.sql b/src/sql/postgresql-turbine.sql
deleted file mode 100644
index 8801983..0000000
--- a/src/sql/postgresql-turbine.sql
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-                                        
------------------------------------------------------------------------------
--- TURBINE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_PERMISSION;
-
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID integer NOT NULL,
-    PERMISSION_NAME varchar (99) NOT NULL,
-    OBJECTDATA oid,
-    PRIMARY KEY(PERMISSION_ID),
-    UNIQUE (PERMISSION_NAME)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_ROLE;
-
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID integer NOT NULL,
-    ROLE_NAME varchar (99) NOT NULL,
-    OBJECTDATA oid,
-    PRIMARY KEY(ROLE_ID),
-    UNIQUE (ROLE_NAME)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_GROUP
------------------------------------------------------------------------------
-drop table TURBINE_GROUP;
-
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID integer NOT NULL,
-    GROUP_NAME varchar (99) NOT NULL,
-    OBJECTDATA oid,
-    PRIMARY KEY(GROUP_ID),
-    UNIQUE (GROUP_NAME)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_ROLE_PERMISSION
------------------------------------------------------------------------------
-drop table TURBINE_ROLE_PERMISSION;
-
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID integer NOT NULL,
-    PERMISSION_ID integer NOT NULL,
-    PRIMARY KEY(ROLE_ID,PERMISSION_ID),
-    FOREIGN KEY (ROLE_ID) REFERENCES TURBINE_ROLE (ROLE_ID),
-    FOREIGN KEY (PERMISSION_ID) REFERENCES TURBINE_PERMISSION (PERMISSION_ID)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER
------------------------------------------------------------------------------
-drop table TURBINE_USER;
-
-CREATE TABLE TURBINE_USER
-(
-    USER_ID integer NOT NULL,
-    LOGIN_NAME varchar (32) NOT NULL,
-    PASSWORD_VALUE varchar (32) NOT NULL,
-    FIRST_NAME varchar (99) NOT NULL,
-    LAST_NAME varchar (99) NOT NULL,
-    EMAIL varchar (99),
-    CONFIRM_VALUE varchar (99),
-    MODIFIED timestamp,
-    CREATED timestamp,
-    LAST_LOGIN timestamp,
-    OBJECTDATA oid,
-    PRIMARY KEY(USER_ID),
-    UNIQUE (LOGIN_NAME)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_USER_GROUP_ROLE
------------------------------------------------------------------------------
-drop table TURBINE_USER_GROUP_ROLE;
-
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID integer NOT NULL,
-    GROUP_ID integer NOT NULL,
-    ROLE_ID integer NOT NULL,
-    PRIMARY KEY(USER_ID,GROUP_ID,ROLE_ID),
-    FOREIGN KEY (USER_ID) REFERENCES TURBINE_USER (USER_ID),
-    FOREIGN KEY (GROUP_ID) REFERENCES TURBINE_GROUP (GROUP_ID),
-    FOREIGN KEY (ROLE_ID) REFERENCES TURBINE_ROLE (ROLE_ID)
-);
-
-                                                
------------------------------------------------------------------------------
--- TURBINE_SCHEDULED_JOB
------------------------------------------------------------------------------
-drop table TURBINE_SCHEDULED_JOB;
-
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID integer NOT NULL,
-    SECOND integer default -1 NOT NULL,
-    MINUTE integer default -1 NOT NULL,
-    HOUR integer default -1 NOT NULL,
-    WEEK_DAY integer default -1 NOT NULL,
-    DAY_OF_MONTH integer default -1 NOT NULL,
-    TASK varchar (99) NOT NULL,
-    EMAIL varchar (99),
-    PROPERTY oid,
-    PRIMARY KEY(JOB_ID)
-);
-
-                        
\ No newline at end of file
diff --git a/src/sql/sybase-id-table-schema.sql b/src/sql/sybase-id-table-schema.sql
deleted file mode 100644
index 5858007..0000000
--- a/src/sql/sybase-id-table-schema.sql
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-                                        
-/* ---------------------------------------------------------------------- */
-/* ID_TABLE                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'ID_TABLE')
-BEGIN
-	DROP TABLE ID_TABLE
-END
-;
-
-CREATE TABLE ID_TABLE
-(
-    ID_TABLE_ID INT NOT NULL,
-    TABLE_NAME VARCHAR (255) NOT NULL,
-    NEXT_ID INT NULL,
-    QUANTITY INT NULL,
-    CONSTRAINT ID_TABLE_PK PRIMARY KEY(ID_TABLE_ID),
-    UNIQUE (TABLE_NAME)
-);
-
-
-
-                        
\ No newline at end of file
diff --git a/src/sql/sybase-turbine-id-table-init.sql b/src/sql/sybase-turbine-id-table-init.sql
deleted file mode 100644
index 3520b2d..0000000
--- a/src/sql/sybase-turbine-id-table-init.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-
-    delete from ID_TABLE where id_table_id >= 1;
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (1, 'TURBINE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (2, 'TURBINE_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (3, 'TURBINE_GROUP', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (4, 'TURBINE_ROLE_PERMISSION', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (5, 'TURBINE_USER', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (6, 'TURBINE_USER_GROUP_ROLE', 100, 10);
-insert into ID_TABLE (id_table_id, table_name, next_id, quantity) VALUES (7, 'TURBINE_SCHEDULED_JOB', 100, 10);
-
diff --git a/src/sql/sybase-turbine-security.sql b/src/sql/sybase-turbine-security.sql
deleted file mode 100644
index 5cfeeb6..0000000
--- a/src/sql/sybase-turbine-security.sql
+++ /dev/null
@@ -1,44 +0,0 @@
-# Script to fill the tables with default roles and permissions
-# Currently tested with MySQL, Oracle, Postgres and Hypersonic only.
-
-# Create the global group
-# this group is used to assign system-wide roles to users
- 
-INSERT INTO TURBINE_GROUP (GROUP_ID, GROUP_NAME) VALUES (1,'global');
-
-# Create the root role
-
-INSERT INTO TURBINE_ROLE (ROLE_ID, ROLE_NAME) VALUES (1, 'turbine_root');
-
-# Create an account 'turbine' for system administartor
-# Remeber to set a good password for this user in a production system!
-
-INSERT INTO TURBINE_USER 
-    (USER_ID, LOGIN_NAME, PASSWORD_VALUE, FIRST_NAME, LAST_NAME) 
-    VALUES
-    (0, 'turbine', 'turbine', 'turbine', 'turbine');
-
-# Assign the user 'turbine' a system-wide role 'turbine_root'
-
-INSERT INTO TURBINE_USER_GROUP_ROLE ( USER_ID, GROUP_ID, ROLE_ID ) 
-SELECT TURBINE_USER.USER_ID, TURBINE_GROUP.GROUP_ID, TURBINE_ROLE.ROLE_ID from 
-TURBINE_USER, TURBINE_GROUP, TURBINE_ROLE 
-WHERE TURBINE_USER.LOGIN_NAME = 'turbine' AND 
-TURBINE_GROUP.GROUP_NAME = 'global' AND TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-# Add some default permissions
-
-INSERT INTO TURBINE_PERMISSION 
-    (PERMISSION_ID, PERMISSION_NAME) 
-    VALUES 
-    (1, 'admin_users');
-
-# Add some permissions for the root role
-
-INSERT INTO TURBINE_ROLE_PERMISSION (ROLE_ID,PERMISSION_ID) 
-SELECT TURBINE_ROLE.ROLE_ID, TURBINE_PERMISSION.PERMISSION_ID FROM 
-TURBINE_ROLE, TURBINE_PERMISSION
-WHERE TURBINE_PERMISSION.PERMISSION_NAME = 'admin_users' AND 
-TURBINE_ROLE.ROLE_NAME = 'turbine_root';
-
-
diff --git a/src/sql/sybase-turbine.sql b/src/sql/sybase-turbine.sql
deleted file mode 100644
index 4660ea7..0000000
--- a/src/sql/sybase-turbine.sql
+++ /dev/null
@@ -1,212 +0,0 @@
-
-
-                                        
-/* ---------------------------------------------------------------------- */
-/* TURBINE_PERMISSION                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_PERMISSION')
-BEGIN
-	DROP TABLE TURBINE_PERMISSION
-END
-;
-
-CREATE TABLE TURBINE_PERMISSION
-(
-    PERMISSION_ID INT NOT NULL,
-    PERMISSION_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA IMAGE NULL,
-    CONSTRAINT TURBINE_PERMISSION_PK PRIMARY KEY(PERMISSION_ID),
-    UNIQUE (PERMISSION_NAME)
-);
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_ROLE                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_ROLE')
-BEGIN
-	DROP TABLE TURBINE_ROLE
-END
-;
-
-CREATE TABLE TURBINE_ROLE
-(
-    ROLE_ID INT NOT NULL,
-    ROLE_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA IMAGE NULL,
-    CONSTRAINT TURBINE_ROLE_PK PRIMARY KEY(ROLE_ID),
-    UNIQUE (ROLE_NAME)
-);
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_GROUP                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_GROUP')
-BEGIN
-	DROP TABLE TURBINE_GROUP
-END
-;
-
-CREATE TABLE TURBINE_GROUP
-(
-    GROUP_ID INT NOT NULL,
-    GROUP_NAME VARCHAR (99) NOT NULL,
-    OBJECTDATA IMAGE NULL,
-    CONSTRAINT TURBINE_GROUP_PK PRIMARY KEY(GROUP_ID),
-    UNIQUE (GROUP_NAME)
-);
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_ROLE_PERMISSION                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='TURBINE_ROLE_PERMISSION_FK_1')
-    ALTER TABLE TURBINE_ROLE_PERMISSION DROP CONSTRAINT TURBINE_ROLE_PERMISSION_FK_1;
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='TURBINE_ROLE_PERMISSION_FK_2')
-    ALTER TABLE TURBINE_ROLE_PERMISSION DROP CONSTRAINT TURBINE_ROLE_PERMISSION_FK_2;
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_ROLE_PERMISSION')
-BEGIN
-	DROP TABLE TURBINE_ROLE_PERMISSION
-END
-;
-
-CREATE TABLE TURBINE_ROLE_PERMISSION
-(
-    ROLE_ID INT NOT NULL,
-    PERMISSION_ID INT NOT NULL,
-    CONSTRAINT TURBINE_ROLE_PERMISSION_PK PRIMARY KEY(ROLE_ID,PERMISSION_ID)
-);
-
-BEGIN
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_1 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-END    
-;
-
-BEGIN
-ALTER TABLE TURBINE_ROLE_PERMISSION
-    ADD CONSTRAINT TURBINE_ROLE_PERMISSION_FK_2 FOREIGN KEY (PERMISSION_ID)
-    REFERENCES TURBINE_PERMISSION (PERMISSION_ID)
-END    
-;
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_USER                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_USER')
-BEGIN
-	DROP TABLE TURBINE_USER
-END
-;
-
-CREATE TABLE TURBINE_USER
-(
-    USER_ID INT NOT NULL,
-    LOGIN_NAME VARCHAR (32) NOT NULL,
-    PASSWORD_VALUE VARCHAR (32) NOT NULL,
-    FIRST_NAME VARCHAR (99) NOT NULL,
-    LAST_NAME VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99) NULL,
-    CONFIRM_VALUE VARCHAR (99) NULL,
-    MODIFIED DATETIME NULL,
-    CREATED DATETIME NULL,
-    LAST_LOGIN DATETIME NULL,
-    OBJECTDATA IMAGE NULL,
-    CONSTRAINT TURBINE_USER_PK PRIMARY KEY(USER_ID),
-    UNIQUE (LOGIN_NAME)
-);
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_USER_GROUP_ROLE                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='TURBINE_USER_GROUP_ROLE_FK_1')
-    ALTER TABLE TURBINE_USER_GROUP_ROLE DROP CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_1;
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='TURBINE_USER_GROUP_ROLE_FK_2')
-    ALTER TABLE TURBINE_USER_GROUP_ROLE DROP CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_2;
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type ='RI' AND name='TURBINE_USER_GROUP_ROLE_FK_3')
-    ALTER TABLE TURBINE_USER_GROUP_ROLE DROP CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_3;
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_USER_GROUP_ROLE')
-BEGIN
-	DROP TABLE TURBINE_USER_GROUP_ROLE
-END
-;
-
-CREATE TABLE TURBINE_USER_GROUP_ROLE
-(
-    USER_ID INT NOT NULL,
-    GROUP_ID INT NOT NULL,
-    ROLE_ID INT NOT NULL,
-    CONSTRAINT TURBINE_USER_GROUP_ROLE_PK PRIMARY KEY(USER_ID,GROUP_ID,ROLE_ID)
-);
-
-BEGIN
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_1 FOREIGN KEY (USER_ID)
-    REFERENCES TURBINE_USER (USER_ID)
-END    
-;
-
-BEGIN
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_2 FOREIGN KEY (GROUP_ID)
-    REFERENCES TURBINE_GROUP (GROUP_ID)
-END    
-;
-
-BEGIN
-ALTER TABLE TURBINE_USER_GROUP_ROLE
-    ADD CONSTRAINT TURBINE_USER_GROUP_ROLE_FK_3 FOREIGN KEY (ROLE_ID)
-    REFERENCES TURBINE_ROLE (ROLE_ID)
-END    
-;
-
-
-
-                                                
-/* ---------------------------------------------------------------------- */
-/* TURBINE_SCHEDULED_JOB                                                      */
-/* ---------------------------------------------------------------------- */
-
-IF EXISTS (SELECT 1 FROM sysobjects WHERE type = 'U' AND name = 'TURBINE_SCHEDULED_JOB')
-BEGIN
-	DROP TABLE TURBINE_SCHEDULED_JOB
-END
-;
-
-CREATE TABLE TURBINE_SCHEDULED_JOB
-(
-    JOB_ID INT NOT NULL,
-    SECOND INT default -1 NOT NULL,
-    MINUTE INT default -1 NOT NULL,
-    HOUR INT default -1 NOT NULL,
-    WEEK_DAY INT default -1 NOT NULL,
-    DAY_OF_MONTH INT default -1 NOT NULL,
-    TASK VARCHAR (99) NOT NULL,
-    EMAIL VARCHAR (99) NULL,
-    PROPERTY IMAGE NULL,
-    CONSTRAINT TURBINE_SCHEDULED_JOB_PK PRIMARY KEY(JOB_ID)
-);
-
-
-
-                        
\ No newline at end of file
diff --git a/src/templates/test/layouts/ExistPageWithLayout.vm b/src/templates/test/layouts/ExistPageWithLayout.vm
deleted file mode 100644
index 7d02d57..0000000
--- a/src/templates/test/layouts/ExistPageWithLayout.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests.
-##
diff --git a/src/templates/test/layouts/existing/ExistSublevelPageWithLayout.vm b/src/templates/test/layouts/existing/ExistSublevelPageWithLayout.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/layouts/existing/ExistSublevelPageWithLayout.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/templates/test/screens/ExistPage.vm b/src/templates/test/screens/ExistPage.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/screens/ExistPage.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/templates/test/screens/ExistPageWithLayout.vm b/src/templates/test/screens/ExistPageWithLayout.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/screens/ExistPageWithLayout.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/templates/test/screens/existing/ExistPageWithLayout.vm b/src/templates/test/screens/existing/ExistPageWithLayout.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/screens/existing/ExistPageWithLayout.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/templates/test/screens/existing/ExistSublevelPageWithLayout.vm b/src/templates/test/screens/existing/ExistSublevelPageWithLayout.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/screens/existing/ExistSublevelPageWithLayout.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/templates/test/screens/existing/Page.vm b/src/templates/test/screens/existing/Page.vm
deleted file mode 100644
index 6eb02c5..0000000
--- a/src/templates/test/screens/existing/Page.vm
+++ /dev/null
@@ -1,4 +0,0 @@
-##
-## This is a Velocity Page used for the Template Service
-## tests
-##
diff --git a/src/test-cactus/org/apache/turbine/modules/screens/ErrorTest.java b/src/test-cactus/org/apache/turbine/modules/screens/ErrorTest.java
deleted file mode 100644
index 3744402..0000000
--- a/src/test-cactus/org/apache/turbine/modules/screens/ErrorTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.apache.turbine.modules.screens;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.cactus.ServletTestCase;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.modules.ScreenLoader;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.util.RunData;
-
-/**
- *  ErrorTest
- *
- *@author     <a href="epugh@upstate.com">Eric Pugh</a>
- *@created    December 10, 2002
- *@version    $Id: ErrorTest.java,v 1.3 2002/11/08
- *      10:04:13 raphael Exp $
- */
-
-public class ErrorTest extends ServletTestCase
-{
-	private RunData data = null;
-	private org.apache.turbine.modules.screens.Error errorScreen = null;
-	private Turbine turbine = null;
-	
-	/**
-	 *  Defines the testcase name for JUnit.
-	 *
-	 *@param  name  the testcase's name.
-	 */
-	public ErrorTest(String name)
-	{
-		super(name);
-	}
-
-	/**
-	* After each testXXX test runs, shut down the Turbine servlet.
-	*/
-	protected void tearDown() throws Exception
-	{
-		turbine.destroy();
-		super.tearDown();
-	}
-
-	/**
-	   * Tests if we can call the doBuild method
-	   *
-	   *@todo Move the turbine setup stuff into the setUp() method.
-	   */
-	public void testDobuild() throws Exception
-	{
-
-		config.setInitParameter(
-			"properties",
-			"/WEB-INF/conf/TurbineCacheTest.properties");
-		turbine = new Turbine();
-		turbine.init(config);
-
-		data = ((RunDataService) TurbineServices.getInstance().getService(RunDataService.SERVICE_NAME)).getRunData(request, response, config);
-
-		errorScreen =
-			(org.apache.turbine.modules.screens.Error) ScreenLoader
-				.getInstance()
-				.getInstance("Error");
-		data.getParameters ().setString ( "param", "param1Value" );
-		errorScreen.doBuild(data);
-		
-		assertTrue("Make sure we have our error parameter.",data.getPage().toString().indexOf("param1Value")>-1);
-
-	}
-
-}
diff --git a/src/test-cactus/org/apache/turbine/om/security/TurbineUserTest.java b/src/test-cactus/org/apache/turbine/om/security/TurbineUserTest.java
deleted file mode 100644
index ea95818..0000000
--- a/src/test-cactus/org/apache/turbine/om/security/TurbineUserTest.java
+++ /dev/null
@@ -1,173 +0,0 @@
-package org.apache.turbine.om.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.cactus.ServletTestCase;
-import org.apache.turbine.Turbine;
-import java.util.*;
-
-/**
- * Test the TurbineUser
- *
- * This tests that we can use the TurbineUser classes.  Note, this can be very dependent
- * on various configuration values.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class TurbineUserTest extends ServletTestCase
-{
-
-    Turbine turbine = null;
-
-    /**
-     * Constructor for TurbineUserTest.
-     * @param arg0
-     */
-    public TurbineUserTest(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * This will setup an instance of turbine to use when testing
-     * @exception if an exception occurs.
-     */
-
-    protected void setUp() throws Exception
-    {
-        super.setUp();
-
-        config.setInitParameter("properties", "/WEB-INF/conf/TurbineComplete.properties");
-        turbine = new Turbine();
-        turbine.init(config);
-    }
-
-    /**
-     * Shut down our turbine servlet and let our parents clean up also.
-     *
-     * @exception Exception if an error occurs
-     */
-    protected void tearDown() throws Exception
-    {
-        turbine.destroy();
-        super.tearDown();
-    }
-
-    /**
-     * Return a test suite of all our tests.
-     *
-     * @return a <code>Test</code> value
-     */
-    public static Test suite()
-    {
-        return new TestSuite(TurbineUserTest.class);
-    }
-
-    /**
-     * Tests if a TurbineUser can be created.  This seemed to cause
-     * errors at one point.
-     */
-    public void testCreatingTurbineUser() throws Exception
-    {
-        TurbineUser user = null;
-
-        user = new TurbineUser();
-
-        assertNotNull(user);
-    }
-
-    public void testSavingAndStoringTemporaryValues() throws Exception
-    {
-        TurbineUser user = new TurbineUser();
-        user.setTemp("test", "value");
-        assertEquals("value", user.getTemp("test"));
-
-        assertNull(user.getTemp("nonexistentvalue"));
-        assertEquals("defaultvalue", user.getTemp("nonexistentvalues", "defaultvalue"));
-        Hashtable htTemp = new Hashtable();
-        htTemp.put("test1", "value1");
-        htTemp.put("test2", new Integer(5));
-
-        user.setTempStorage(htTemp);
-        assertEquals("value1", user.getTemp("test1"));
-        Integer retVal = (Integer) user.getTemp("test2");
-        assertTrue(retVal.intValue() == 5);
-        assertNull(user.getTemp("test"));
-    }
-
-    public void testSavingAndStoringPermValues() throws Exception
-    {
-        TurbineUser user = new TurbineUser();
-        user.setPerm("test", "value");
-        assertEquals("value", user.getPerm("test"));
-
-        assertNull(user.getPerm("nonexistentvalue"));
-        assertEquals("defaultvalue", user.getPerm("nonexistentvalues", "defaultvalue"));
-
-        Hashtable htPerm = new Hashtable();
-        htPerm.put("test1", "value1");
-        htPerm.put("test2", new Integer(5));
-
-        user.setPermStorage(htPerm);
-        assertEquals("value1", user.getPerm("test1"));
-        Integer retVal = (Integer) user.getPerm("test2");
-        assertTrue(retVal.intValue() == 5);
-        assertNull(user.getPerm("test"));
-    }
-}
diff --git a/src/test-cactus/org/apache/turbine/util/parser/BaseValueParserTest.java b/src/test-cactus/org/apache/turbine/util/parser/BaseValueParserTest.java
deleted file mode 100755
index d524144..0000000
--- a/src/test-cactus/org/apache/turbine/util/parser/BaseValueParserTest.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import org.apache.cactus.ServletTestCase;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.util.TimeSelector;
-
-/**
- * Used to test how BaseValueParser works with TimeSelector fields.
- * @author <a href="mailto:brekke@apache.org">Jeffrey D. Brekke</a>
- * @version $Id$
- */
-public class BaseValueParserTest extends ServletTestCase
-{
-    Turbine turbine = null;
-    BaseValueParser theBaseValueParser = null;
-    SimpleDateFormat stf = null;
-
-    /**
-     * Creates a new <code>BaseValueParserTest</code> instance.
-     *
-     * @param name a <code>String</code> value
-     */
-    public BaseValueParserTest (String name) 
-    {
-        super(name);
-    }
-                                             
-    /**
-     * This setup will be running server side.  We startup Turbine and
-     * get our test port from the properties.  This gets run before
-     * each testXXX test.
-     * @exception Exception if an error occurs
-     */
-    protected void setUp()
-        throws Exception
-    {
-        super.setUp();
-        /* Note: we are using the properties file from the cache test
-         *  since we don't really need any specific property at this 
-         *  time.  Future tests may require a test case specific 
-         *  properties file to be used.:
-         */
-        config.setInitParameter("properties",
-                "/WEB-INF/conf/TurbineComplete.properties");
-        turbine = new Turbine();
-        turbine.init(config);
-        theBaseValueParser = new BaseValueParser();
-        stf = new SimpleDateFormat("hh:mm:ss a");
-    }
-                                             
-    /**
-     * Shut down our turbine servlet and let our parents clean up also.
-     *
-     * @exception Exception if an error occurs
-     */
-    protected void tearDown() throws Exception 
-    {
-        turbine.destroy();
-        super.tearDown();
-    }                                            
-
-    /**
-     * Test that a current time 
-     */
-    public void testCurrentTime()
-    {
-        Calendar now = Calendar.getInstance();
-        checkTime(now.get(Calendar.HOUR),
-                  now.get(Calendar.MINUTE),
-                  now.get(Calendar.SECOND),
-                  now.get(Calendar.AM_PM),
-                  stf.format(now.getTime()));
-    }
-    
-    /**
-     * Test a time in the morning.
-     */
-    public void testMorning()
-    {
-        checkTime(10, 5, 30, Calendar.AM, "10:05:30 AM");
-    }
-
-    /**
-     * Test a time in the afternoon.
-     */
-    public void testAfternoon()
-    {
-        checkTime(5, 32, 6, Calendar.PM, "05:32:06 PM");
-    }
-
-    /**
-     * Test that an invalid time returns null.
-     *
-     */
-    public void testInvalidTime()
-    {
-        theBaseValueParser.add(TimeSelector.HOUR_SUFFIX, 1);
-        theBaseValueParser.add(TimeSelector.MINUTE_SUFFIX, 100);
-        theBaseValueParser.add(TimeSelector.SECOND_SUFFIX, 0);
-        theBaseValueParser.add(TimeSelector.AMPM_SUFFIX, Calendar.AM);
-
-        assertNull("Should not have received a date object.", 
-                   theBaseValueParser.getDate(""));
-    }
-
-    /**
-     * Test the midnight special case.
-     */
-    public void testMidnight()
-    {
-        checkTime(12, 0, 0, Calendar.AM, "12:00:00 AM");
-    }
-
-    /**
-     * Test the noon special case.
-     */
-    public void testNoon()
-    {
-        checkTime(12, 0, 0, Calendar.PM, "12:00:00 PM");
-    }
-
-    /**
-     * Helper method which sets up the parser and gets the date.
-     *
-     * @param hour an <code>int</code> value
-     * @param min an <code>int</code> value
-     * @param sec an <code>int</code> value
-     * @param ampm an <code>int</code> value
-     * @param results a <code>String</code> value
-     */
-    private void checkTime(int hour, int min, int sec, int ampm, String results)
-    {
-        theBaseValueParser.add(TimeSelector.HOUR_SUFFIX, hour);
-        theBaseValueParser.add(TimeSelector.MINUTE_SUFFIX, min);
-        theBaseValueParser.add(TimeSelector.SECOND_SUFFIX, sec);
-        theBaseValueParser.add(TimeSelector.AMPM_SUFFIX, ampm);
-
-        Date newDate = theBaseValueParser.getDate("");
-        assertNotNull("Could not create date for "+results, newDate);
-       
-        assertEquals(results, stf.format(newDate));
-    }
-}
diff --git a/src/test-cactus/org/apache/turbine/util/parser/CSVParserTest.java b/src/test-cactus/org/apache/turbine/util/parser/CSVParserTest.java
deleted file mode 100644
index cc207e2..0000000
--- a/src/test-cactus/org/apache/turbine/util/parser/CSVParserTest.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.CharArrayReader;
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-
-import org.apache.cactus.ServletTestCase;
-import org.apache.turbine.Turbine;
-
-/**
- * Test the CSVParser.
- *
- * NOTE : I am assuming (as is in the code of DataStreamParser.java
- * that the values are reusing the same object for the values.
- * If this shouldn't be, we need to fix that in the code!.
- *
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- */
-public class CSVParserTest
-            extends ServletTestCase
-{
-
-    Turbine turbine = null;
-
-    /**
-     * Constructor for CSVParserTest.
-     * @param arg0
-     */
-    public CSVParserTest(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * This will setup an instance of turbine to use when testing
-     * @exception if an exception occurs.
-     */
-
-    protected void setUp()
-    throws Exception
-    {
-        super.setUp();
-
-        config.setInitParameter("properties",
-                                "/WEB-INF/conf/TurbineComplete.properties");
-        turbine = new Turbine();
-        turbine.init(config);
-    }
-
-    /**
-     * Shut down our turbine servlet and let our parents clean up also.
-     *
-     * @exception Exception if an error occurs
-     */
-    protected void tearDown()
-    throws Exception
-    {
-        turbine.destroy();
-        super.tearDown();
-    }
-
-    /**
-     * Tests if you can leave field values empty
-     */
-    public void testEmptyFieldValues()
-    {
-        String values = "field1,field2,field3,field4\nvalue11,,value13,\nvalue21,,value23,";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        CSVParser parser = new CSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    if (currentField == 2 || currentField == 4)
-                    {
-                        assertNull(vp.getString("field" + currentField));
-                    }
-                    else
-                    {
-                        assertEquals("value" + currentRecord + currentField, vp.getString("field" + currentField));
-                    }
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-
-    /**
-     * Tests if normal operation is still working
-     */
-    public void testNormalFieldValues()
-    {
-        String values = "field1,field2,field3,field4\nvalue11,value12,value13,value14\nvalue21,value22,value23,value24";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        CSVParser parser = new CSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    assertEquals("value" + currentRecord + currentField, vp.getString("field" + currentField));
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-
-    /**
-     * Tests if some fields are empty, but the values exists..
-     */
-    public void testEmptyFieldNames()
-    {
-        String values = "field1,,field3,\nvalue11,value12,value13,value14\nvalue21,value22,value23,value24";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        CSVParser parser = new CSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    if (currentField == 2 || currentField == 4)
-                    {
-                        assertEquals("value" + currentRecord + currentField,
-                                     vp.getString(DataStreamParser.EMPTYFIELDNAME + currentField));
-                    }
-                    else
-                    {
-                        assertEquals("value" + currentRecord + currentField,
-                                     vp.getString("field" + currentField));
-                    }
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-}
diff --git a/src/test-cactus/org/apache/turbine/util/parser/TSVParserTest.java b/src/test-cactus/org/apache/turbine/util/parser/TSVParserTest.java
deleted file mode 100644
index f729fbd..0000000
--- a/src/test-cactus/org/apache/turbine/util/parser/TSVParserTest.java
+++ /dev/null
@@ -1,236 +0,0 @@
-package org.apache.turbine.util.parser;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.CharArrayReader;
-import java.io.IOException;
-
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import org.apache.cactus.ServletTestCase;
-import org.apache.turbine.Turbine;
-
-
-/**
- * Test the TSVParser.
- * 
- * NOTE : I am assuming (as is in the code of DataStreamParser.java
- * that the values are reusing the same object for the values.
- * If this shouldn't be, we need to fix that in the code!.
- * 
- * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
- * @version $Id$
- */
-public class TSVParserTest
-            extends ServletTestCase
-{
-    Turbine turbine = null;
-
-    /**
-     * Constructor for CSVParserTest.
-     * @param arg0
-     */
-    public TSVParserTest(String name)
-    {
-        super(name);
-    }
-
-    /**
-     * This will setup an instance of turbine to use when testing
-     * @exception if an exception occurs.
-     */
-
-    protected void setUp()
-    throws Exception
-    {
-        super.setUp();
-        /* Note: we are using the properties file from the cache test
-         *  since we don't really need any specific property at this 
-         *  time.  Future tests may require a test case specific 
-         *  properties file to be used.:
-         */
-        config.setInitParameter("properties",
-                                "/WEB-INF/conf/TurbineComplete.properties");
-        turbine = new Turbine();
-        turbine.init(config);
-    }
-
-    /**
-     * Shut down our turbine servlet and let our parents clean up also.
-     *
-     * @exception Exception if an error occurs
-     */
-    protected void tearDown()
-    throws Exception
-    {
-        turbine.destroy();
-        super.tearDown();
-    }
-
-    /**
-     * Return a test suite of all our tests.
-     *
-     * @return a <code>Test</code> value
-     */
-    public static Test suite()
-    {
-        return new TestSuite(TSVParserTest.class);
-    }
-
-    /**
-     * Tests if you can leave field values empty
-     */
-    public void testEmptyFieldValues()
-    {
-        String values = "field1\tfield2\tfield3\tfield4\nvalue11\t\tvalue13\t\nvalue21\t\tvalue23\t";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        TSVParser parser = new TSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    if (currentField == 2 || currentField == 4)
-                    {
-                        assertNull(vp.getString("field" + currentField));
-                    }
-                    else
-                    {
-                        assertEquals("value" + currentRecord + currentField, vp.getString("field" + currentField));
-                    }
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-
-    /**
-     * Tests if normal operation is still working
-     */
-    public void testNormalFieldValues()
-    {
-        String values = "field1\tfield2\tfield3\tfield4\nvalue11\tvalue12\tvalue13\tvalue14\nvalue21\tvalue22\tvalue23\tvalue24";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        TSVParser parser = new TSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    assertEquals("value" + currentRecord + currentField, vp.getString("field" + currentField));
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-
-    /**
-     * Tests if some fields are empty, but the values exists..
-     */
-    public void testEmptyFieldNames()
-    {
-        String values = "field1\t\tfield3\t\nvalue11\tvalue12\tvalue13\tvalue14\tvalue21\tvalue22\tvalue23\tvalue24";
-        CharArrayReader reader = new CharArrayReader(values.toCharArray());
-        TSVParser parser = new TSVParser(reader);
-        try
-        {
-            parser.readColumnNames();
-            int currentRecord = 1;
-
-            while (parser.hasNextRow())
-            {
-                ValueParser vp = parser.nextRow();
-                int currentField = 1;
-                while (currentField <= 4)
-                {
-                    if (currentField == 2 || currentField == 4)
-                    {
-                        assertEquals("value" + currentRecord + currentField, vp.getString(DataStreamParser.EMPTYFIELDNAME + currentField));
-                    }
-                    else
-                    {
-                        assertEquals("value" + currentRecord + currentField, vp.getString("field" + currentField));
-                    }
-                    currentField += 1;
-                }
-                currentRecord += 1;
-            }
-        }
-        catch (IOException ioe)
-        {
-            fail("Unexpected exception in testcase occured : " + ioe.toString());
-        }
-    }
-}
diff --git a/src/test-cactus/testapp/WEB-INF/conf/TurbineComplete.properties b/src/test-cactus/testapp/WEB-INF/conf/TurbineComplete.properties
deleted file mode 100644
index 2239c03..0000000
--- a/src/test-cactus/testapp/WEB-INF/conf/TurbineComplete.properties
+++ /dev/null
@@ -1,1011 +0,0 @@
-
-# -------------------------------------------------------------------
-# $Id$
-#
-# This is the configuration file for Turbine.
-#
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-#
-# -------------------------------------------------------------------
-
-# -------------------------------------------------------------------
-#
-#  L O G S
-#
-# -------------------------------------------------------------------
-
-log4j.file = /WEB-INF/conf/Log4j.properties
-
-# -------------------------------------------------------------------
-#
-#  M A I L  S E R V E R
-#
-# -------------------------------------------------------------------
-# Your mail server for outgoing email.
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.server=localhost
-
-# -------------------------------------------------------------------
-# SMTP-From header for your outgoing messages
-#
-# All failed delivery messages will be returned to this address.
-# If unset, these messages will be sent to the address in the
-# From header (standard behaviour)
-#
-# Default: null
-# -------------------------------------------------------------------
-
-mail.smtp.from=localhost@localhost
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  C A C H I N G
-#
-# -------------------------------------------------------------------
-# This determines whether or not to cache the modules in memory.  For
-# development, turn this off.  For production, turn this on.
-#
-# Default: false
-# -------------------------------------------------------------------
-
-module.cache=false
-
-# If module.cache=true, then how large should we make the hashtables
-# by default.
-
-action.cache.size=20
-layout.cache.size=10
-navigation.cache.size=10
-page.cache.size=5
-screen.cache.size=50
-scheduledjob.cache.size=10
-
-# -------------------------------------------------------------------
-#
-#  M O D U L E  P A C K A G E S
-#
-# -------------------------------------------------------------------
-# This is the "classpath" for Turbine.  In order to locate your own
-# modules, you should add them to this path.  For example, if you have
-# com.company.actions, com.company.screens, com.company.navigations,
-# then this setting would be "com.company,org.apache.turbine.modules".
-# This path is searched in order.  For example, Turbine comes with a
-# screen module named "Login".  If you wanted to have your own screen
-# module named "Login", then you would specify the path to your
-# modules before the others.
-#
-# Default: org.apache.turbine.modules
-# -------------------------------------------------------------------
-
-module.packages=com.upstate.turbine.modules,org.apache.turbine.modules
-
-# -------------------------------------------------------------------
-#
-#  F R A M E W O R K  S E T T I N G S
-#
-# -------------------------------------------------------------------
-# These are settings that control the behaviour of the framework,
-# such as determining whether a template system is in use, what
-# the default templates and screens are and session handling settings.
-# -------------------------------------------------------------------
-
-# Used to set the template homepage if you are using a template
-# layout.  This is the template that will be displayed to the user
-# when no specific template is requested.  This is normally executed
-# as the first template the user sees when they access the system.
-#
-# Default: Index.vm
-
-template.homepage=Index.vm
-
-# This is the default screen to show to people when they first access
-# the system.  This is only used if there is no value for
-# template.homepage.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.homepage=
-
-# This is the template that is shown on an incorrect login attempt.
-# Setting this property will override any value of screen.login specfied
-# below.
-#
-# Default: Login.vm
-
-template.login=Login.vm
-
-# This is the page that is shown on an incorrect login attempt.  It is
-# referenced in the LoginUser action. This is only used if there is no value
-# for template.login.  This is for use when you are not using a
-# templating system such as Velocity or JSP.
-#
-# Default: Login
-
-screen.login=
-
-# This is the template that is used by the respective Template based
-# ErrorScreen for displaying the error. If you are not using a Template based
-# ErrorScreen, then this is ignored.
-#
-# Default: Error.vm
-
-template.error=Error.vm
-
-# This is the default error screen.
-#
-# Default: VelocityErrorScreen
-
-screen.error=VelocityErrorScreen
-
-# This is the screen that is displayed when the user's web page is in
-# an invalid state.
-#
-# Default: error.InvalidState
-
-screen.invalidstate=error.InvalidState
-
-# Set the default Doctype.  The default Doctype can be set by using
-# the single strings: Html40Strict, Html40Transitional, or
-# Html40Frameset.  Additionally the default can be supplied as two
-# strings separated by a comma giving the DTD and URI.
-#
-# Default: ignored if not set to some value.
-
-default.doctype=Html40Transitional
-
-# This is the default action to log a user in.  If you write your own
-# implementation of the login action, make sure that you change this
-# to reflect the new name.
-
-action.login=LoginUser
-
-# This is the default action to log a user out. If you write your own
-# implementation of the logout action, make sure that you change this
-# to reflect the new name.
-
-action.logout=LogoutUser
-
-# This is the default action to validate whether or not a session is
-# valid.  For example, if you want to make sure if a user has already
-# logged in or not.
-#
-# Default: SessionValidator
-
-action.sessionvalidator=sessionvalidator.TemplateSessionValidator
-
-# This is the timeout in seconds for sessions. If left commented out, the
-# servlet container's default timeout will be left as is.
-
-# session.timeout=1800
-
-# This is the default action that builds up the AccessControlList for
-# the individual users session.
-
-action.accesscontroller=AccessController
-
-# -------------------------------------------------------------------
-#
-#  J N D I  C O N T E X T S
-#
-# -------------------------------------------------------------------
-
-# This indicates whether Turbine should try to create JNDI contexts.
-#
-# Default: false
-#
-# contexts=true
-
-# These are the JNDI context properties.  Each context's properties
-# are defined by the properties beginning with context.name.
-#
-# Default: none
-#
-# Example: The following will create a JNDI context named "name" in
-# the data.contexts Hashtable.  It will point at the RMI registry on
-# localhost running on port 1099, and will use
-# com.sun.jndi.rmi.registry.RegistryContextFactory as the initial
-# context factory:
-#
-# context.name.java.naming.provider.url=rmi://localhost:1099
-# context.name.java.naming.factory.initial=com.sun.jndi.rmi.registry.RegistryContextFactory
-
-# -------------------------------------------------------------------
-#
-#  P E E R S
-#
-# -------------------------------------------------------------------
-# Supplies Turbine with information about the database schema, which
-# can simplify any required Peer classes.
-#
-# Default: org.apache.turbine.util.db.map.TurbineMapBuilder
-# -------------------------------------------------------------------
-
-database.maps.builder=org.apache.turbine.util.db.map.TurbineMapBuilder
-
-# -------------------------------------------------------------------
-#
-#  M E S S A G E S
-#
-# -------------------------------------------------------------------
-# Note that strings containing "," (comma) characters must backslash
-# escape the comma (i.e. '\,')
-
-# The message that can be displayed before a user logs in.
-
-login.message=Thank you for your visit. Please log into the system.
-
-# The message that can be displayed when no screen is defined.
-
-login.message.noscreen=There has been an error. Your session is valid but the screen variable is not defined.
-
-# The message that can be displayed when a user enters an incorrect
-# password or username.
-
-login.error=Sorry your username or password is incorrect!
-
-# The message that can be displayed when a user logs out.
-
-logout.message=Thank you for using the system. Please come back soon.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R E  S O C K E T S  L A Y E R
-#
-# -------------------------------------------------------------------
-# Whether the web server is able to use SSL.  Links in Turbine can
-# check this property to determine if SSL can be used.
-#
-# Default: true
-# -------------------------------------------------------------------
-
-use.ssl=true
-
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-#
-# The order that these services is listed is important! The
-# order that is stated here is the order in which the services
-# will be initialized. Keep this is mind if you have services
-# that depend on other services during initialization.
-# -------------------------------------------------------------------
-services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-services.RunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-services.ServletService.classname=org.apache.turbine.services.servlet.TurbineServletService
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-services.LocalizationService.classname=org.apache.turbine.services.localization.TurbineLocalizationService
-services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-#services.SchedulerService.classname=org.apache.turbine.services.schedule.TurbineSchedulerService
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-services.SecurityService.classname=org.apache.turbine.services.security.db.DBSecurityService
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-
-# Turn on the appropriate template service.
-services.VelocityService.classname=org.apache.turbine.services.velocity.TurbineVelocityService
-
-
-
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cache.check.frequency = 5000
-
-# -------------------------------------------------------------------
-#
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.services.assemblerbroker.util.java.JavaScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.services.assemblerbroker.util.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.services.assemblerbroker.util.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.services.assemblerbroker.util.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.services.assemblerbroker.util.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.services.assemblerbroker.util.java.JavaScheduledJobFactory
-
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-services.PullService.earlyInit= true
-
-# This determines whether the non-request tools are refreshed
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session
-#              or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# You can configure the tools in this way:
-# tool.<id>.<parameter> = <value>
-#
-# So if you find "global", "request", "session" or "persistent" as second
-# part, it is a configuration to put a tool into the toolbox, else it is a
-# tool specific configuration.
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.UIManager
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# Then:
-#
-# tool.ui.skin = default
-#
-# configures the value of "skin" for the "ui" tool.
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# You should avoid using tool names called "global", "request",
-# "session" or "persistent" because of clashes with the possible Scopes.
-#
-# Scopes:
-#
-#   global:     tool is instantiated once and that instance is available
-#               to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be
-#               threadsafe.
-#
-#   persistent: tool is instantitated once for each use session, and
-#               is stored in the user's permanent hashtable. This means
-#               for a logged in user the tool will be persisted in the
-#               user's objectdata. Tool should be threadsafe and
-#               Serializable.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.service.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.HtmlPageAttributes
-tool.request.content=org.apache.turbine.service.pull.tools.ContentTool
-#tool.request.l10n=org.apache.turbine.services.localization.LocalizationTool
-
-
-# -------------------------------------------------------------------
-#
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-services.VelocityService.earlyInit= true
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension=vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen=DefaultScreen
-services.VelocityService.default.layout = VelocityECSLayout
-services.VelocityService.default.navigation=VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = /Default.vm
-
-services.VelocityService.runtime.log=/logs/velocity.log
-#services.VelocityService.input.encoding=UTF-8
-services.VelocityService.velocimacro.library = GlobalMacros.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates/app
-services.VelocityService.file.resource.loader.cache = true
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-# -------------------------------------------------------------------
-#
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-
-services.UploadService.automatic=true
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-
-# -------------------------------------------------------------------
-#
-#  L O C A L I Z A T I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default ResourceBundle and language/country codes used by the
-# TurbineLocalizationService.
-#
-locale.default.bundle=MyBundle
-locale.default.language=en
-locale.default.country=US
-
-#
-# This will set the charset= portion of the ContentType: header.
-# Leave commented out unless you want to return stuff as a different
-# charset.
-#
-# locale.default.charset=
-
-# -------------------------------------------------------------------
-#
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings.
-# The file must use the same syntax as the mime.types file of
-# the Apache Server, i.e.
-# <mimetype> <ext1> <ext2>...
-#
-#services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales
-# and the corresponding character encodings. The service itself
-# contains a hardcoded set of most common mappings.
-# The file should use the Java property file syntax, i.e.
-# <lang_country_variant>=<charset>
-#
-#services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  C R Y P T O   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Standard Unix crypt(3) password encryption.
-#
-services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
-#
-# This providers allows access to the Java Message Digest encryption algorithms
-#
-services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
-#
-# This is a simple, cleartext "encryption" provider.
-#
-services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
-#
-# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
-# compatibility for passwords created with the old Security Service. See the javadocs for
-# OldJavaCrypt
-#
-services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
-#
-# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
-# You need not to have this, it is the default if no algorithms are given. The default
-# provider gives you all the Java MessageDigest Ciphers
-#
-services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the UserManager from the
-# DBSecurityService.
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.db.DBUserManager
-services.SecurityService.user.manager = org.apache.turbine.services.security.db.DBUserManager
-
-#
-# These are the default classes used by the Security Service to
-# provide User, Group, Role and Permission objects.
-# You want to override this setting only if you want your
-# implementation to provide application specific addtional
-# functionality.
-#
-# For LDAP use:
-# services.SecurityService.user.class=org.apache.turbine.services.security.ldap.LDAPUser
-# LDAP does not yet provide custom Group, User and Role objects so you
-# must use it with the default TurbineGroup, TurbineRole and
-# TurbinePermission objects.
-#
-# Class for User. Default: org.apache.turbine.om.security.TurbineUser
-services.SecurityService.user.class=org.apache.turbine.om.security.TurbineUser
-# Class for Group. Default: org.apache.turbine.om.security.TurbineGroup
-services.SecurityService.group.class=org.apache.turbine.om.security.TurbineGroup
-# Class for Role. Default: org.apache.turbine.om.security.TurbineRole
-services.SecurityService.role.class=org.apache.turbine.om.security.TurbineRole
-# Class for Permission. Default: org.apache.turbine.om.security.TurbinePermission
-services.SecurityService.permission.class=org.apache.turbine.om.security.TurbinePermission
-
-#
-# This is the class that implements the ACL interface.
-# You want to override this setting only if you want your ACL
-# implementation to provide application specific addtional
-# functionality.
-#
-
-# Default: org.apache.turbine.util.security.TurbineAccessControlList
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This setting is DBSecurityService specific - this class is consulted for the names
-# of the columns in the users' tables for the purpose of creating join queries.
-# If you use your own User implementation in conjunction with DBSecurityService,
-# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
-# and you need to specify the name of the peer class here.
-#
-# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
-#
-services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.TurbineUserPeer
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# Configuration for the LDAP Security Service implementation
-
-#services.SecurityService.ldap.security.athentication=simple
-#services.SecurityService.ldap.port=<LDAP PORT>
-#services.SecurityService.ldap.host=<LDAP HOST>
-#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
-#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
-#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
-#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
-#services.SecurityService.ldap.dn.attribute=userPrincipalName
-#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# This property specifies the type of security authentication
-#
-# Default: simple
-#
-
-# services.SecurityService.ldap.security.authentication=simple
-
-#
-# The host name where the LDAP server is listenting.
-#
-# Default: localhost
-#
-
-# services.SecurityService.ldap.host=localhost
-
-#
-# The port number where the LDAP server is listenting.
-#
-# Default: 389
-#
-
-# services.SecurityService.ldap.port=389
-
-#
-# The user name of the admin user. The admin user should be able to
-# read from the LDAP repository.
-# Characteres '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.username=turbineUserUniqueId/turbine%dc/example%dc/com
-
-#
-# The password of the admin user.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.password=turbine
-
-#
-# The class name of the ldap provider.
-#
-# Default: com.sun.jndi.ldap.LdapCtxFactory
-#
-
-# services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# The directory base to search.
-# '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.basesearch=dc/example%dc/com
-
-#
-# The unique id. It must be an integer field and it is required only when
-# the users are in LDAP but the groups, roles and permissions are in the
-# Database.
-#
-# services.SecurityService.ldap.user.userid=
-
-#
-# This property maps the username with an attribute in LDAP.
-#
-# Default: turbineUserUniqueId
-#
-
-# services.SecurityService.ldap.user.username=turbineUserUniqueId
-
-#
-# This property maps the firstname with an attribute in LDAP.
-#
-# Default: turbineUserFirstName
-#
-
-# services.SecurityService.ldap.user.firstname=turbineUserFirstName
-
-#
-# This property maps the lastname with an attribute in LDAP.
-#
-# Default: turbineUserLastName
-#
-
-# services.SecurityService.ldap.user.lastname=turbineUserLastName
-
-#
-# This property maps the email with an attribute in LDAP.
-#
-# Default: turbineUserMailAddress
-#
-
-# services.SecurityService.ldap.user.email=turbineUserMailAddress
-
-#
-# This property maps the userPassword with an attribute in LDAP.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.user.password=userPassword
-
-
-# -------------------------------------------------------------------
-#
-#  X M L R P C  S E R V I C E
-#
-# -------------------------------------------------------------------
-# This property specifies which class should be used to parse
-# xml for XmlRpc functionality.
-#
-# Default: org.apache.xerces.parsers.SAXParser
-
-services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser
-
-# This property specifies which network interface the server part of
-# XmlRpc should bind to (if it is active).  If not specified, the
-# server will bind to all addresses configured for your host.
-#
-# Default: 127.0.0.1
-
-#services.XmlRpcService.address=127.0.0.1
-
-# This property specifies which TCP port the web server part of
-# XmlRpc should listen on (if it is active).
-#
-# Default: 12345
-
-services.XmlRpcService.port=12345
-
-# If any classes are specified here, the Service will create an
-# instance of them here and start up a listener on the specified
-# port.
-#
-# Note that the handlers demonstrated are not very useful.  You
-# will have to invent your own services.  They do however
-# illustrate that any class with a default constructor can be
-# added here
-#
-# The handler parameter without further extension determines
-# the default handler for the service
-#
-# Default: no classes are specified by default
-
-#services.XmlRpcService.handler.$default=java.util.Hashtable
-#services.XmlRpcService.handler.stringhandler=java.lang.String
-
-# The following properties allow the transfer of data between
-# separate Turbine applications running on different servers.
-# This allows B2B type behavior such as sending database
-# updates in the form of XML or whatever type of data
-# that needs to be shared between Turbine applications
-# running on separate servers.
-
-services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.FileHandler
-services.XmlRpcService.paranoid = false
-services.XmlRpcService.acceptClient = 192.168.1.*
-services.XmlRpcService.denyClient =
-
-# Do we want a secure server
-
-services.XmlRpcService.secure.server = false
-
-# Secure server options
-
-services.XmlRpcService.secure.server.option.java.protocol.handler.pkgs = \
-    com.sun.net.ssl.internal.www.protocol
-
-services.XmlRpcService.secure.server.option.security.provider = \
-    com.sun.net.ssl.internal.ssl.Provider
-
-services.XmlRpcService.secure.server.option.security.protocol = TLS
-
-# You probably want to keep your key stores and trust stores
-# clear out of your webapp.
-
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStore = /tmp/keystore
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.keyStorePassword = password
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStore = /tmp/truststore
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStoreType = jks
-services.XmlRpcService.secure.server.option.javax.net.ssl.trustStorePassword = password
-
-services.XmlRpcService.secure.server.option.sun.ssl.keymanager.type = SunX509
-services.XmlRpcService.secure.server.option.sun.ssl.trust.manager.type = SunX509
-
-# These values should be set to 'all' for debugging purposes.
-
-services.XmlRpcService.secure.server.option.javax.net.debug = none
-services.XmlRpcService.secure.server.option.java.security.debug = none
-
-# -------------------------------------------------------------------
-#
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-
-# -------------------------------------------------------------------
-#
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-#services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-# services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-# services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-# services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-#--------------------------------------------------------------------
-#
-# X S L T  S E R V I C E
-#
-#--------------------------------------------------------------------
-
-services.XSLTService.path = /path/to/stylesheets
-services.XSLTService.cache = false
-
-# -------------------------------------------------------------------
-#
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of the xml file specifying valid inputs
-#
-# If you need to define multiple definition files, you can should
-# seperate them with commas.
-#
-# Default: WEB-INF/conf/intake.xml
-#
-services.IntakeService.xml.path=WEB-INF/conf/intake.xml
-
-# This file is used to cache the XML definitions after they are
-# parsed.  It provides for a small performance gain on startup.
-#
-# Note: Even if you have multiple XML definition files, you will
-# only need one serialization file!
-#
-# Default: WEB-INF/appData.ser
-#
-services.IntakeService.serialize.path=WEB-INF/appData.ser
-
-#--------------------------------------------------------------------
-#
-# P A R A M E T E R  P A R S E R
-#
-#--------------------------------------------------------------------
-#
-# This variable controls the case folding applied to URL variable
-# names.
-#
-# Allowed values: none, lower, upper
-# Default: lower
-#
-
-url.case.folding=lower
-
-
-
-# -------------------------------------------------------------------
-#
-#  A D D I T I O N A L  P R O P E R T I E S
-#
-# -------------------------------------------------------------------
-# The full path name to an additional properties file. Properties in
-# this file will be included in this property set. Duplicate name
-# values will be replaced, so be careful.
-#
-# Default: none
-# -------------------------------------------------------------------
-
-
-
diff --git a/src/test-cactus/testapp/WEB-INF/conf/log4j.properties b/src/test-cactus/testapp/WEB-INF/conf/log4j.properties
deleted file mode 100644
index e69de29..0000000
--- a/src/test-cactus/testapp/WEB-INF/conf/log4j.properties
+++ /dev/null
diff --git a/src/test-cactus/testapp/WEB-INF/web.xml b/src/test-cactus/testapp/WEB-INF/web.xml
deleted file mode 100644
index 3338168..0000000
--- a/src/test-cactus/testapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-
-<!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>
-</web-app>
diff --git a/src/test/componentConfiguration.xml b/src/test/componentConfiguration.xml
deleted file mode 100644
index 233f518..0000000
--- a/src/test/componentConfiguration.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<!-- This configuration file for Avalon components is used for testing the TestComponent -->
-<componentConfig>
-    <test/>
-</componentConfig>
\ No newline at end of file
diff --git a/src/test/componentRoles.xml b/src/test/componentRoles.xml
deleted file mode 100644
index 8ec229d..0000000
--- a/src/test/componentRoles.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- This configuration file for Avalon components is used for testing the TestComponent -->
-<role-list>
-    <role
-        name="org.apache.turbine.test.TestComponent"
-        shorthand="test"
-        default-class="org.apache.turbine.test.TestComponentImpl"/>
-</role-list>
\ No newline at end of file
diff --git a/src/test/org/apache/turbine/ConfigurationTest.java b/src/test/org/apache/turbine/ConfigurationTest.java
deleted file mode 100644
index 9133be1..0000000
--- a/src/test/org/apache/turbine/ConfigurationTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.TurbineXmlConfig;
-
-/**
- * Tests that the ConfigurationFactory and regular old properties methods both work.
- * Verify the overriding of properties.
- * 
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class ConfigurationTest extends BaseTestCase
-{
-    public static final String SERVICE_PREFIX = "services.";
-
-    /**
-     * A <code>Service</code> property determining its implementing
-     * class name .
-     */
-    public static final String CLASSNAME_SUFFIX = ".classname";
-
-    private static TurbineConfig tc = null;
-    private static TurbineXmlConfig txc = null;
-
-    public ConfigurationTest(String name) throws Exception
-    {
-        super(name);
-    }
-
-    public void testCreateTurbineWithConfigurationXML() throws Exception
-    {
-        txc = new TurbineXmlConfig(".", "/conf/test/TurbineConfiguration.xml");
-
-        try
-        {
-            txc.initialize();
-
-            Configuration configuration = Turbine.getConfiguration();
-            assertNotNull("No Configuration Object found!", configuration);
-            assertFalse("Make sure we have values", configuration.isEmpty());
-
-            // overridden value
-            String key = "module.cache";
-            assertEquals("Read a config value " + key + ", received:" + configuration.getString(key), "true", configuration.getString(key));
-
-            // non overridden value
-            key = "scheduledjob.cache.size";
-            assertEquals("Read a config value " + key + ", received:" + configuration.getString(key), "10", configuration.getString(key));
-        }
-        catch (Exception e)
-        {
-            throw e;
-        }
-        finally
-        {
-            txc.dispose();
-        }
-    }
-
-    public void testCreateTurbineWithConfiguration() throws Exception
-    {
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-
-        try
-        {
-            tc.initialize();
-
-            Configuration configuration = Turbine.getConfiguration();
-            assertNotNull("No Configuration Object found!", configuration);
-            assertFalse("Make sure we have values", configuration.isEmpty());
-
-            String key = "scheduledjob.cache.size";
-            assertEquals("Read a config value " + key + ", received:" + configuration.getString(key), "10", configuration.getString(key));
-        }
-        catch (Exception e)
-        {
-            throw e;
-        }
-        finally
-        {
-            tc.dispose();
-        }
-    }
-
-}
diff --git a/src/test/org/apache/turbine/DestroyTest.java b/src/test/org/apache/turbine/DestroyTest.java
deleted file mode 100644
index 4407ba2..0000000
--- a/src/test/org/apache/turbine/DestroyTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Can we call "destroy" unconditionally on our Turbine Servlet, even if
- * it hasn't configured?
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DestroyTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-
-    public DestroyTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-    }
-
-    public void testDestroy()
-        throws Exception
-    {
-        Turbine t = new Turbine();
-        t.destroy();
-    }
-
-    public void testInitAndDestroy()
-        throws Exception
-    {
-        tc.initialize();
-        tc.dispose();
-    }
-}
diff --git a/src/test/org/apache/turbine/TorqueLoadTest.java b/src/test/org/apache/turbine/TorqueLoadTest.java
deleted file mode 100644
index d0f2d86..0000000
--- a/src/test/org/apache/turbine/TorqueLoadTest.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.torque.Torque;
-import org.apache.torque.avalon.TorqueComponent;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Can we load and run Torque standalone, from Component and from
- * AvalonComponent Service?
- *
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class TorqueLoadTest extends BaseTestCase
-{
-    public TorqueLoadTest(String name) throws Exception
-    {
-        super(name);
-    }
-
-    /**
-     * An uninitialized Torque must not be initialized.
-     */
-    public void testTorqueNonInit() throws Exception
-    {
-        assertFalse("Torque should not be initialized!", Torque.isInit());
-    }
-
-    /**
-     * Load Torque from a given config file.
-     */
-    public void testTorqueManualInit() throws Exception
-    {
-        assertFalse("Torque should not be initialized!", Torque.isInit());
-        Torque.init("conf/test/TorqueTest.properties");
-        assertTrue("Torque must be initialized!", Torque.isInit());
-        Torque.shutdown();
-        assertFalse("Torque did not shut down properly!", Torque.isInit());
-    }
-
-    /**
-     * Load Torque with the ComponentService
-     */
-    public void testTorqueComponentServiceInit() throws Exception
-    {
-        assertFalse("Torque should not be initialized!", Torque.isInit());
-
-        TurbineConfig tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TurbineComponentService.properties");
-        try
-        {
-            tc.initialize();
-            assertTrue("Torque must be initialized!", Torque.isInit());
-        }
-        catch (Exception e)
-        {
-            throw e;
-        }
-        finally
-        {
-            tc.dispose();
-        }
-        // Uncomment once we get a torque 3.1 release post alpha-2
-        // Everything up to alpha-2 does not shut down Torque properly.
-        // assertFalse("Torque did not shut down properly!", Torque.isInit());
-    }
-
-    private AvalonComponentService getService()
-    {
-        return (AvalonComponentService) TurbineServices
-            .getInstance()
-            .getService(
-            AvalonComponentService.SERVICE_NAME);
-    }
-
-    /**
-     * Load Torque with the AvalonComponentService
-     */
-    public void testTorqueAvalonServiceInit() throws Exception
-    {
-        assertFalse("Torque should not be initialized!", Torque.isInit());
-
-        TurbineConfig tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TestFulcrumComponents.properties");
-
-        tc.initialize();
-        assertTrue("Torque must be initialized!", Torque.isInit());
-
-        TorqueComponent toc =
-            (TorqueComponent) getService().lookup(
-                "org.apache.torque.avalon.Torque");
-        assertTrue("TorqueComponent must be initialized!", toc.isInit());
-
-        getService().release(toc);
-
-        tc.dispose();
-
-        assertFalse("Torque did not shut down properly!", Torque.isInit());
-    }
-}
diff --git a/src/test/org/apache/turbine/TurbineConfigTest.java b/src/test/org/apache/turbine/TurbineConfigTest.java
deleted file mode 100644
index 47f42b7..0000000
--- a/src/test/org/apache/turbine/TurbineConfigTest.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.TurbineXmlConfig;
-
-/**
- * This testcase verifies that TurbineConfig can be used to startup Turbine in a non
- * servlet environment properly.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class TurbineConfigTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TurbineXmlConfig txc = null;
-
-    public TurbineConfigTest(String name)
-            throws Exception
-    {
-        super(name);
-    }
-    
-    public void testTurbineConfigWithPropertiesFile() throws Exception
-    {
-        String value = new File("/conf/test/TemplateService.properties").getPath();
-        tc = new TurbineConfig(".", value);
-
-        ServletConfig config = (ServletConfig) tc;
-        ServletContext context = config.getServletContext();
-
-        String confFile= Turbine.findInitParameter(context, config, 
-                TurbineConfig.PROPERTIES_PATH_KEY, 
-                null);
-        assertEquals(value, confFile);
-    }
-    
-    public void testTurbineXmlConfigWithConfigurationFile() throws Exception
-    {
-        String value = new File("/conf/test/TurbineConfiguration.xml").getPath();
-            txc = new TurbineXmlConfig(".", value);
-            
-        ServletConfig config = (ServletConfig) txc;
-        ServletContext context = config.getServletContext();
-            
-            String confFile= Turbine.findInitParameter(context, config, 
-                    TurbineConfig.CONFIGURATION_PATH_KEY, 
-                    null);
-        assertEquals(value, confFile);
-        }
-}
diff --git a/src/test/org/apache/turbine/TurbineTest.java b/src/test/org/apache/turbine/TurbineTest.java
deleted file mode 100644
index 25d5bbc..0000000
--- a/src/test/org/apache/turbine/TurbineTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.apache.turbine;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import javax.servlet.ServletConfig;
-import javax.servlet.ServletContext;
-
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletResponse;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-
-/**
- * This testcase verifies that TurbineConfig can be used to startup Turbine in
- * a non servlet environment properly.
- * 
- * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh </a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux </a>
- * @version $Id$
- */
-public class TurbineTest extends BaseTestCase {
-
-    public TurbineTest(String name) throws Exception {
-        super(name);
-    }
-
-    public void testTurbineAndFirstGet() throws Exception {
-        TurbineConfig tc =
-     new TurbineConfig(
-       ".",
-       "/conf/test/CompleteTurbineResources.properties");
-   tc.initialize();
-
-        ServletConfig config = (ServletConfig) tc;
-        ServletContext context = config.getServletContext();
-        assertNotNull(Turbine.getDefaultServerData());
-        assertEquals("",Turbine.getServerName());
-        assertEquals("80",Turbine.getServerPort());
-        assertEquals("",Turbine.getScriptName());
-        Turbine t = tc.getTurbine();
-        
-        MockHttpServletRequest request = getMockRequest();
-        EnhancedMockHttpServletResponse resp = new EnhancedMockHttpServletResponse();
-        
-        t.doGet(request,resp);
-        
-        assertEquals("8080",Turbine.getServerPort());
-        
-        
-    }
-}
diff --git a/src/test/org/apache/turbine/modules/ActionLoaderTest.java b/src/test/org/apache/turbine/modules/ActionLoaderTest.java
deleted file mode 100644
index 4c90f22..0000000
--- a/src/test/org/apache/turbine/modules/ActionLoaderTest.java
+++ /dev/null
@@ -1,316 +0,0 @@
-package org.apache.turbine.modules;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.Assert;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.modules.actions.VelocityActionDoesNothing;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.DefaultPipelineData;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-/**
- * This test case is to verify whether exceptions in Velocity actions are 
- * properly bubbled up when action.event.bubbleexception=true.  Or, if
- * action.event.bubbleexception=false, then the exceptions should be
- * logged and sunk.
- * 
- * @author     <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class ActionLoaderTest extends BaseTestCase {
-	private static TurbineConfig tc = null;
-	private static TemplateService ts = null;
-	private MockServletConfig config = null;
-	private EnhancedMockHttpServletRequest request = null;
-	private EnhancedMockHttpSession session = null;
-	private HttpServletResponse response = null;
-	private static ServletConfig sc = null;
-	/*
-	 * @see TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		config = new MockServletConfig();
-		config.setupNoParameters();
-		request = new EnhancedMockHttpServletRequest();
-		request.setupServerName("bob");
-		request.setupGetProtocol("http");
-		request.setupScheme("scheme");
-		request.setupPathInfo("damn");
-		request.setupGetServletPath("damn2");
-		request.setupGetContextPath("wow");
-		request.setupGetContentType("html/text");
-		request.setupAddHeader("Content-type", "html/text");
-		request.setupAddHeader("Accept-Language", "en-US");
-		Vector v = new Vector();
-		request.setupGetParameterNames(v.elements());
-		session = new EnhancedMockHttpSession();
-		response = new MockHttpServletResponse();
-		session.setupGetAttribute(User.SESSION_KEY, null);
-		request.setSession(session);
-		sc = config;
-		tc =
-			new TurbineConfig(
-				".",
-				"/conf/test/CompleteTurbineResources.properties");
-		tc.initialize();
-	}
-	/*
-	 * @see TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		if (tc != null) {
-			tc.dispose();
-		}
-	}
-	/**
-	 * Constructor for VelocityErrorScreenTest.
-	 * @param arg0
-	 */
-	public ActionLoaderTest(String arg0) throws Exception {
-		super(arg0);
-	}
-	/**
-	 * This unit test verifies that if your standard doPerform is called, 
-	 * and it throws an Exception, the exception is bubbled up out of the ActionLoader...
-	 * 
-	 * @throws Exception If something goes wrong with the unit test
-	 */
-	public void testDoPerformBubblesException() throws Exception {
-		RunData data = getRunData(request,response,config);
-		PipelineData pipelineData = new DefaultPipelineData();
-		Map runDataMap = new HashMap();
-		runDataMap.put(RunData.class, data);
-		pipelineData.put(RunData.class, runDataMap);
-		data.setAction("VelocityActionThrowsException");
-		try {
-			ActionLoader.getInstance().exec(data, data.getAction());
-			fail("Should have thrown an exception");
-		} catch (Exception e) {
-			//good
-		}
-		
-		try {
-			ActionLoader.getInstance().exec(pipelineData, data.getAction());
-			fail("Should have thrown an exception");
-		} catch (Exception e) {
-			//good
-		}
-	}
-	/**
-	   * This unit test verifies that if an Action Event doEventSubmit_ is called, and it throws an Exception, the
-	   * exception is bubbled up out of the ActionLoader...
-	   * 
-	   * @throws Exception If something goes wrong with the unit test
-	   */
-	public void testActionEventBubblesException() throws Exception {
-		// can't seem to figure out how to setup the Mock Request with the right parameters...
-		request.setupAddParameter("eventSubmit_doCauseexception", "foo");
-		RunData data = getRunData(request,response,config);
-		PipelineData pipelineData = new DefaultPipelineData();
-		Map runDataMap = new HashMap();
-		runDataMap.put(RunData.class, data);
-		pipelineData.put(RunData.class, runDataMap);
-		data.setAction("VelocityActionThrowsException");
-		data.getParameters().add("eventSubmit_doCauseexception", "foo");
-		assertTrue(
-			data.getParameters().containsKey("eventSubmit_doCauseexception"));
-		try {
-			ActionLoader.getInstance().exec(data, data.getAction());
-			fail("Should have bubbled out an exception thrown by the action.");
-		} catch (Exception e) {
-			//good
-		}
-		try {
-			ActionLoader.getInstance().exec(pipelineData, data.getAction());
-			fail("Should have bubbled out an exception thrown by the action.");
-		} catch (Exception e) {
-			//good
-		}
-	}
-
-	/**
-	 * This unit test verifies that if your standard doPerform is called, 
-	 * and it throws an Exception, if the action.event.bubbleexception
-     * property is set to false then the exception is NOT bubbled up
-	 * 
-	 * @throws Exception If something goes wrong with the unit test
-	 */
-	public void testDoPerformDoesntBubbleException() throws Exception {
-		Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
-		assertFalse(Turbine.getConfiguration().getBoolean("action.event.bubbleexception"));
-		RunData data = getRunData(request,response,config);
-		PipelineData pipelineData = new DefaultPipelineData();
-		Map runDataMap = new HashMap();
-		runDataMap.put(RunData.class, data);
-		pipelineData.put(RunData.class, runDataMap);
-		data.setAction("VelocityActionThrowsException");
-		try {
-			ActionLoader.getInstance().exec(data, data.getAction());
-		
-		} catch (Exception e) {
-			fail("Should NOT have thrown an exception:" + e.getMessage());
-		}	
-		try {
-			ActionLoader.getInstance().exec(pipelineData, data.getAction());
-		
-		} catch (Exception e) {
-			fail("Should NOT have thrown an exception:" + e.getMessage());
-		}
-	}
-	/**
-     * This unit test verifies that if an Action Event doEventSubmit_ is called, 
-     * and it throws an Exception, if the action.event.bubbleexception
-     * property is set to false then the exception is NOT bubbled up
-     * 
-     * @throws Exception If something goes wrong with the unit test
-     */
-	public void testActionEventDoesntBubbleException() throws Exception {
-		// can't seem to figure out how to setup the Mock Request with the right parameters...
-		Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
-		request.setupAddParameter("eventSubmit_doCauseexception", "foo");
-		RunData data = getRunData(request,response,config);
-		PipelineData pipelineData = new DefaultPipelineData();
-		Map runDataMap = new HashMap();
-		runDataMap.put(RunData.class, data);
-		pipelineData.put(RunData.class, runDataMap);
-		data.setAction("VelocityActionThrowsException");
-		data.getParameters().add("eventSubmit_doCauseexception", "foo");
-		assertTrue(
-			data.getParameters().containsKey("eventSubmit_doCauseexception"));
-		
-		try {
-			ActionLoader.getInstance().exec(data, data.getAction());			
-		} catch (Exception e) {
-			fail("Should NOT have thrown an exception:" + e.getMessage());
-		}
-		try {
-			ActionLoader.getInstance().exec(pipelineData, data.getAction());			
-		} catch (Exception e) {
-			fail("Should NOT have thrown an exception:" + e.getMessage());
-		}
-	}
-	public void testNonexistentActionCausesError() throws Exception {
-	    RunData data = getRunData(request,response,config);
-		PipelineData pipelineData = new DefaultPipelineData();
-		Map runDataMap = new HashMap();
-		runDataMap.put(RunData.class, data);
-		pipelineData.put(RunData.class, runDataMap);
-		data.setAction("ImaginaryAction");
-		try {
-			ActionLoader.getInstance().exec(data, "boo");
-			fail("Should have thrown an exception");
-		} catch (Exception e) {
-			//good
-		}
-		try {
-			ActionLoader.getInstance().exec(pipelineData, "boo");
-			fail("Should have thrown an exception");
-		} catch (Exception e) {
-			//good
-		}
-	}
-	
-	public void testDoPerformWithRunData() throws Exception
-	{
-	    RunData data = getRunData(request,response,config);
-		data.setAction("VelocityActionDoesNothing");
-		try {
-			ActionLoader.getInstance().exec(data, data.getAction());
-		} catch (Exception e) {
-		    e.printStackTrace();
-		    Assert.fail("Should not have thrown an exception.");
-		}
-	    
-	}
-	
-	public void testDoPerformWithPipelineData() throws Exception
-	{
-	    RunData data = getRunData(request,response,config);
-        PipelineData pipelineData = data;
-		data.setAction("VelocityActionDoesNothing");
-		int numberOfCalls = VelocityActionDoesNothing.numberOfCalls;
-		int pipelineDataCalls = VelocityActionDoesNothing.pipelineDataCalls;
-		int runDataCalls = VelocityActionDoesNothing.runDataCalls;
-		try {
-			ActionLoader.getInstance().exec(pipelineData, data.getAction());
-		} catch (Exception e) {
-		    e.printStackTrace();
-		    Assert.fail("Should not have thrown an exception.");
-		}
-		assertEquals(numberOfCalls+1,VelocityActionDoesNothing.numberOfCalls);
-		assertEquals(runDataCalls,VelocityActionDoesNothing.runDataCalls);
-		assertEquals(pipelineDataCalls+1,VelocityActionDoesNothing.pipelineDataCalls);
-	    
-	}
-
-}
diff --git a/src/test/org/apache/turbine/modules/GenericLoaderTest.java b/src/test/org/apache/turbine/modules/GenericLoaderTest.java
deleted file mode 100644
index feef9e2..0000000
--- a/src/test/org/apache/turbine/modules/GenericLoaderTest.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.apache.turbine.modules;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products 
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.test.BaseTestCase;
-
-public class GenericLoaderTest
-    extends BaseTestCase
-{
-    public GenericLoaderTest(String name)
-            throws Exception
-    {
-        super(name);
-    }
-    
-    public void testPackage()
-    {
-        assertEquals("GenericLoader returned wrong Package!",
-                     GenericLoader.getBasePackage(),
-                     "org.apache.turbine.modules");
-    }
-}
diff --git a/src/test/org/apache/turbine/modules/LayoutLoaderTest.java b/src/test/org/apache/turbine/modules/LayoutLoaderTest.java
deleted file mode 100644
index 40949b6..0000000
--- a/src/test/org/apache/turbine/modules/LayoutLoaderTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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.turbine.modules;
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.Assert;
-
-import org.apache.turbine.modules.layouts.TestVelocityOnlyLayout;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-
-/**
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class LayoutLoaderTest extends BaseTestCase {
-	private static TurbineConfig tc = null;
-	private static TemplateService ts = null;
-	private MockServletConfig config = null;
-	private EnhancedMockHttpServletRequest request = null;
-	private EnhancedMockHttpSession session = null;
-	private HttpServletResponse response = null;
-	private static ServletConfig sc = null;
-	/*
-	 * @see TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		config = new MockServletConfig();
-		config.setupNoParameters();
-		request = new EnhancedMockHttpServletRequest();
-		request.setupServerName("bob");
-		request.setupGetProtocol("http");
-		request.setupScheme("scheme");
-		request.setupPathInfo("damn");
-		request.setupGetServletPath("damn2");
-		request.setupGetContextPath("wow");
-		request.setupGetContentType("html/text");
-		request.setupAddHeader("Content-type", "html/text");
-		request.setupAddHeader("Accept-Language", "en-US");
-		Vector v = new Vector();
-		request.setupGetParameterNames(v.elements());
-		session = new EnhancedMockHttpSession();
-		response = new MockHttpServletResponse();
-		session.setupGetAttribute(User.SESSION_KEY, null);
-		request.setSession(session);
-		sc = config;
-		tc =
-			new TurbineConfig(
-				".",
-				"/conf/test/CompleteTurbineResources.properties");
-		tc.initialize();
-	}
-	/*
-	 * @see TestCase#tearDown()
-	 */
-	protected void tearDown() throws Exception {
-		super.tearDown();
-		if (tc != null) {
-			tc.dispose();
-		}
-	}
-	/**
-	 * Constructor for LayoutLoaderTest.
-	 * @param arg0
-	 */
-	public LayoutLoaderTest(String arg0) throws Exception {
-		super(arg0);
-	}
-
-	public void testPipelineDataContainsRunData()
-	{
-	    try
-	    {
-		    RunData data = getRunData(request,response,config);
-            PipelineData pipelineData = data;
-			data.setLayout("TestVelocityOnlyLayout");
-			int numberOfCalls = TestVelocityOnlyLayout.numberOfCalls;
-			try {
-				LayoutLoader.getInstance().exec(pipelineData, data.getLayout());
-			} catch (Exception e) {
-			    e.printStackTrace();
-			    Assert.fail("Should not have thrown an exception.");
-			}
-			assertEquals(numberOfCalls+1,TestVelocityOnlyLayout.numberOfCalls);
-	    }
-	    catch (Exception e)
-	    {
-	        e.printStackTrace();
-	        Assert.fail("Should not have thrown an exception.");
-	    }
-	}
-
-	public void testDoBuildWithRunData()
-	{
-	    try
-	    {
-		    RunData data = getRunData(request,response,config);
-			data.setLayout("TestVelocityOnlyLayout");
-			int numberOfCalls = TestVelocityOnlyLayout.numberOfCalls;
-			try {
-				LayoutLoader.getInstance().exec(data, data.getLayout());
-			} catch (Exception e) {
-			    e.printStackTrace();
-			    Assert.fail("Should not have thrown an exception.");
-			}
-			assertEquals(numberOfCalls+1,TestVelocityOnlyLayout.numberOfCalls);
-	    }
-	    catch (Exception e)
-	    {
-	        e.printStackTrace();
-	        Assert.fail("Should not have thrown an exception.");
-	    }
-	}
-
-	
-}
diff --git a/src/test/org/apache/turbine/modules/actions/VelocityActionDoesNothing.java b/src/test/org/apache/turbine/modules/actions/VelocityActionDoesNothing.java
deleted file mode 100644
index 5786985..0000000
--- a/src/test/org/apache/turbine/modules/actions/VelocityActionDoesNothing.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.apache.turbine.modules.actions;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import junit.framework.Assert;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-/**
- * This action is used in testing the ExecutePageValve by the ExecutePageValveTest.
- * 
- * @author     <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class VelocityActionDoesNothing extends VelocityAction
-{
-    private static Log log = LogFactory.getLog(VelocityActionDoesNothing.class);
-    public static int numberOfCalls;
-    public static int runDataCalls;
-    public static int pipelineDataCalls;
-    /**
-     *  Default action is throw an exception.
-     *
-     * @param  data           Current RunData information
-     * @param  context        Context to populate
-     * @exception  Exception  Thrown on error
-     */
-    public void doPerform(RunData data, Context context) throws Exception
-    {
-        log.debug("Calling doPerform");
-		VelocityActionDoesNothing.numberOfCalls++;
-		VelocityActionDoesNothing.runDataCalls++;
-    }
-    
-    /**
-     *  Default action is throw an exception.
-     *
-     * @param  data           Current RunData information
-     * @param  context        Context to populate
-     * @exception  Exception  Thrown on error
-     */
-    public void doPerform(PipelineData pipelineData, Context context) throws Exception
-    {
-        log.debug("Calling doPerform(PipelineData)");
-		VelocityActionDoesNothing.numberOfCalls++;
-        RunData rd = (RunData)pipelineData;
-		Assert.assertNotNull("RunData object was Null.", rd);
-		VelocityActionDoesNothing.pipelineDataCalls++;
-    }   
-
-}
diff --git a/src/test/org/apache/turbine/modules/actions/VelocityActionThrowsException.java b/src/test/org/apache/turbine/modules/actions/VelocityActionThrowsException.java
deleted file mode 100644
index 2a33bb2..0000000
--- a/src/test/org/apache/turbine/modules/actions/VelocityActionThrowsException.java
+++ /dev/null
@@ -1,125 +0,0 @@
-package org.apache.turbine.modules.actions;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-import org.apache.velocity.context.Context;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-/**
- * This action is used in testing the ActionLoader for Velocity templates.  Verifies
- * that exceptions are properly bubbled out.
- * 
- * @author     <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @created    October 11, 2002
- */
-public class VelocityActionThrowsException extends VelocityAction
-{
-    private static Log log = LogFactory.getLog(VelocityActionThrowsException.class);
-    /**
-     *  Default action is throw an exception.
-     *
-     * @param  data           Current RunData information
-     * @param  context        Context to populate
-     * @exception  Exception  Thrown on error
-     */
-    public void doPerform(RunData data, Context context) throws Exception
-    {
-        log.debug("Calling doPerform(RunData)");
-        throw new Exception("From VelocityActionThrowsException.doPerform an Exception is always thrown!");
-    }
-    
-    /**
-     *  Default action is throw an exception.
-     *
-     * @param  data           Current PipelineData information
-     * @param  context        Context to populate
-     * @exception  Exception  Thrown on error
-     */
-    public void doPerform(PipelineData data, Context context) throws Exception
-    {
-        log.debug("Calling doPerform(PipelineData)");
-        throw new Exception("From VelocityActionThrowsException.doPerform an Exception is always thrown!");
-    }
-    
-    
-    
-    /**
-     * This action event also throws an exception.  
-     * @param data
-     * @param context
-     * @throws Exception
-     */
-    public void doCauseexception(RunData data, Context context) throws Exception
-    {
-        log.debug("Calling doCauseexception(RunData)");
-        throw new Exception("From Action Event VelocityActionThrowsException.doCauseexception an Exception is always thrown!");
-    }
-    
-    /**
-     * This action event also throws an exception.  
-     * @param data
-     * @param context
-     * @throws Exception
-     */
-    public void doCauseexception(PipelineData data, Context context) throws Exception
-    {
-        log.debug("Calling doCauseexception(PipelineData)");
-        throw new Exception("From Action Event VelocityActionThrowsException.doCauseexception an Exception is always thrown!");
-    }
-
-    
-}
diff --git a/src/test/org/apache/turbine/modules/layouts/TestVelocityOnlyLayout.java b/src/test/org/apache/turbine/modules/layouts/TestVelocityOnlyLayout.java
deleted file mode 100644
index b2f76f8..0000000
--- a/src/test/org/apache/turbine/modules/layouts/TestVelocityOnlyLayout.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 15-Jul-2004
- *
- */
-package org.apache.turbine.modules.layouts;
-
-import junit.framework.Assert;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-
-/**
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class TestVelocityOnlyLayout extends VelocityOnlyLayout
-{
-    public static int numberOfCalls = 0;
-    
-    public void doBuild(PipelineData pipelineData)
-    {
-        numberOfCalls++;
-        RunData data = (RunData) getRunData(pipelineData);
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-    
-    public void doBuild(RunData runData)
-    {
-        numberOfCalls++;
-        Assert.assertNotNull("RunData object is null.", runData);
-    }
-    
-    
-}
diff --git a/src/test/org/apache/turbine/modules/pages/TestVelocityPage.java b/src/test/org/apache/turbine/modules/pages/TestVelocityPage.java
deleted file mode 100644
index 1de54f7..0000000
--- a/src/test/org/apache/turbine/modules/pages/TestVelocityPage.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Created on 15-Jul-2004
- *
- */
-package org.apache.turbine.modules.pages;
-
-import junit.framework.Assert;
-
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.util.RunData;
-
-
-/**
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- */
-public class TestVelocityPage extends VelocityPage{
-
-    public static int numberOfCalls = 0;
-    
-    public void doBuild(PipelineData pipelineData) throws Exception
-    {
-        numberOfCalls++;
-        super.doBuild(pipelineData);
-        RunData data = (RunData) getRunData(pipelineData);
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-    
-    public void doBuild(RunData runData) throws Exception
-    {
-        numberOfCalls++;
-        super.doBuild(runData);
-        Assert.assertNotNull("RunData object is null.", runData);
-    }
-
-    public void doBuildBeforeAction(PipelineData pipelineData) throws Exception
-    {
-        numberOfCalls++;
-        RunData data = (RunData) getRunData(pipelineData);
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-    
-    public void doPostBuild(PipelineData pipelineData) throws Exception
-    {
-        numberOfCalls++;
-        RunData data = (RunData) getRunData(pipelineData);
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-
-    public void doBuildBeforeAction(RunData data) throws Exception
-    {
-        numberOfCalls++;
-        Assert.assertNotNull("RunData object is null.", data);        
-    }
-
-    public void doPostBuild(RunData data) throws Exception
-    {
-        numberOfCalls++;
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-
-    public void doBuildAfterAction(RunData data) throws Exception
-    {
-        numberOfCalls++;
-        Assert.assertNotNull("RunData object is null.", data);        
-    }
-    
-    public void doBuildAfterAction(PipelineData pipelineData) throws Exception
-    {
-        numberOfCalls++;
-        RunData data = (RunData) getRunData(pipelineData);
-        Assert.assertNotNull("RunData object is null.", data);
-    }
-    
-    
-}
diff --git a/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java b/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java
deleted file mode 100644
index 10061fa..0000000
--- a/src/test/org/apache/turbine/modules/scheduledjob/SimpleJob.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.apache.turbine.modules.scheduledjob;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.ScheduledJob;
-import org.apache.turbine.services.schedule.JobEntry;
-
-/**
- * Simple job for use with unit testing of the scheduler service.  This
- * job merely increments a static counter variable when it is run.  You 
- * can check the counter to verify the job has run.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class SimpleJob
-        extends ScheduledJob
-{
-    /** The test counter */
-    private static int counter = 0;
-
-    /**
-     * Run the Jobentry from the scheduler queue.
-     *
-     * @param job The job to run.
-     * @throws java.lang.Exception generic exception
-     */
-    public void run(JobEntry job)
-            throws Exception
-    {
-        counter++;
-        System.out.println("\n\nI AM RUNNING!\n\n");
-        
-    }
-    /**
-     * Returns the counter value.
-     *
-     * @return The counter value
-     */
-    public static int getCounter()
-    {
-        return counter;
-    }
-
-    /**
-     * Sets the counter.
-     *
-     * @param i The new counter value
-     */
-    public static void setCounter(int i)
-    {
-        counter = i;
-    }
-}
diff --git a/src/test/org/apache/turbine/pipeline/DefaultACLCreationValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultACLCreationValveTest.java
deleted file mode 100644
index 14bed7b..0000000
--- a/src/test/org/apache/turbine/pipeline/DefaultACLCreationValveTest.java
+++ /dev/null
@@ -1,167 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultACLCreationValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DefaultACLCreationValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-       
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        
-       
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-
-    public void testLoggedInUser() throws Exception
-    {
-        
-
-        
-        RunData runData = getRunData(request,response,config);
-        TurbineUser tu = new TurbineUser();
-        tu.setName("username");
-        tu.setHasLoggedIn(Boolean.TRUE);
-        runData.setAction("TestAction");
-        runData.setUser(tu);
-        
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-
-        DefaultACLCreationValve valve = new DefaultACLCreationValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        User user = runData.getUser();
-        assertNotNull(user);
-        assertEquals("username",user.getName());
-        assertTrue(user.hasLoggedIn());
-        assertNotNull(runData.getACL());
-
-    }    
-    
-   
-  
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java
deleted file mode 100644
index 3941458..0000000
--- a/src/test/org/apache/turbine/pipeline/DefaultLoginValveTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.actions.LoginUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultLoginValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DefaultLoginValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-       
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        session.setupGetAttribute(User.SESSION_KEY, null);
-       
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testDefaults() throws Exception
-    {
-        
-        Vector v = new Vector();
-        v.add(LoginUser.CGI_USERNAME);
-        v.add(LoginUser.CGI_PASSWORD);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(LoginUser.CGI_USERNAME,"username");
-        request.setupAddParameter(LoginUser.CGI_PASSWORD,"password");
-        
-        RunData runData = getRunData(request,response,config);
-        runData.setAction(TurbineConstants.ACTION_LOGIN_DEFAULT);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-
-        DefaultLoginValve valve = new DefaultLoginValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        User user = runData.getUser();
-        assertNotNull(user);
-        assertEquals("username",user.getName());
-        assertTrue(user.hasLoggedIn());
-
-    }
-    
-   
-  
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
deleted file mode 100644
index 8f568c3..0000000
--- a/src/test/org/apache/turbine/pipeline/DefaultSessionTimeoutValveTest.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.uri.URIConstants;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultSessionTimeoutValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DefaultSessionTimeoutValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-       
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        session.setupGetAttribute(User.SESSION_KEY, null);
-       
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testDefaults() throws Exception
-    {
-        Vector v = new Vector();
-        v.add(URIConstants.CGI_ACTION_PARAM);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(URIConstants.CGI_ACTION_PARAM,"TestAction");
-        
-        
-        PipelineData pipelineData = getPipelineData(request,response,config);
-        
-        Pipeline pipeline = new TurbinePipeline();
-
-        DefaultSessionTimeoutValve valve = new DefaultSessionTimeoutValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-
-        RunData runData = (RunData)pipelineData;
-        assertEquals(0,runData.getSession().getMaxInactiveInterval());
-
-
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testTimeoutSet() throws Exception
-    {
-        
-        Turbine.getConfiguration().setProperty(TurbineConstants.SESSION_TIMEOUT_KEY,"3600");
-        PipelineData pipelineData = getPipelineData(request,response,config);
-        
-        Pipeline pipeline = new TurbinePipeline();
-
-        DefaultSessionTimeoutValve valve = new DefaultSessionTimeoutValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        RunData runData = (RunData)pipelineData;
-
-        assertEquals(3600,runData.getSession().getMaxInactiveInterval());
-
-
-    }    
-  
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java b/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java
deleted file mode 100644
index 4525eb8..0000000
--- a/src/test/org/apache/turbine/pipeline/DefaultSessionValidationValveTest.java
+++ /dev/null
@@ -1,204 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.modules.actions.LoginUser;
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DefaultSessionValidationValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DefaultSessionValidationValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-       
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        
-       
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testAnonymousUser() throws Exception
-    {
-        
-        Vector v = new Vector();
-        v.add(LoginUser.CGI_USERNAME);
-        v.add(LoginUser.CGI_PASSWORD);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(LoginUser.CGI_USERNAME,"username");
-        request.setupAddParameter(LoginUser.CGI_PASSWORD,"password");
-        
-        RunData runData = getRunData(request,response,config);
-        runData.setAction(TurbineConstants.ACTION_LOGIN_DEFAULT);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
- 
-        DefaultSessionValidationValve valve = new DefaultSessionValidationValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        User user = runData.getUser();
-        assertNotNull(user);
-        assertEquals("",user.getName());
-        assertFalse(user.hasLoggedIn());
-
-    }
-    public void testLoggedInUser() throws Exception
-    {
-        
-        Vector v = new Vector();
-        v.add(LoginUser.CGI_USERNAME);
-        v.add(LoginUser.CGI_PASSWORD);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(LoginUser.CGI_USERNAME,"username");
-        request.setupAddParameter(LoginUser.CGI_PASSWORD,"password");
-        
-        RunData runData = getRunData(request,response,config);
-        TurbineUser tu = new TurbineUser();
-        tu.setName("username");
-        tu.setHasLoggedIn(Boolean.TRUE);
-        runData.setAction("TestAction");
-
-        session.setupGetAttribute(User.SESSION_KEY, tu);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-
-        DefaultSessionValidationValve valve = new DefaultSessionValidationValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        User user = runData.getUser();
-        assertNotNull(user);
-        assertEquals("username",user.getName());
-        assertTrue(user.hasLoggedIn());
-
-    }    
-    
-   
-  
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java b/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java
deleted file mode 100644
index 226c6fb..0000000
--- a/src/test/org/apache/turbine/pipeline/DetermineActionValveTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.uri.URIConstants;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DetermineActionValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DetermineActionValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-        Vector v = new Vector();
-        v.add(URIConstants.CGI_ACTION_PARAM);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(URIConstants.CGI_ACTION_PARAM,"TestAction");
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        session.setupGetAttribute(User.SESSION_KEY, null);
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testValve() throws Exception
-    {
-        RunData runData = getRunData(request,response,config);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-
-        DetermineActionValve valve = new DetermineActionValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        assertEquals("TestAction",runData.getAction());
-
-
-    }
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java b/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java
deleted file mode 100644
index 0c73527..0000000
--- a/src/test/org/apache/turbine/pipeline/DetermineTargetValveTest.java
+++ /dev/null
@@ -1,182 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.uri.URIConstants;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class DetermineTargetValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public DetermineTargetValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        
-       
-        
-       
-        
-        
-        session = new EnhancedMockHttpSession();
-        response = new MockHttpServletResponse();
-        
-        session.setupGetAttribute(User.SESSION_KEY, null);
-        request.setSession(session);
-        
-        
-        
-        sc = config;
-        tc =
-            new TurbineConfig(
-                    ".",
-            "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-    
-    /**
-     * Tests the Valve.
-     */
-    public void testScreenSet() throws Exception
-    {
-        Vector v = new Vector();
-        v.add(URIConstants.CGI_SCREEN_PARAM);
-        request.setupGetParameterNames(v.elements());
-        
-        request.setupAddParameter(URIConstants.CGI_SCREEN_PARAM,"TestScreen");
-        
-        RunData runData = getRunData(request,response,config);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-        DetermineTargetValve valve = new DetermineTargetValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        assertEquals("TestScreen",runData.getScreen());
-
-
-    }
-    public void testScreenNotSet() throws Exception
-    {
-        Vector v = new Vector();
-        v.add(URIConstants.CGI_SCREEN_PARAM);
-        request.setupGetParameterNames(v.elements());
-        
-        String screens[] = new String[1];
-        screens[0]=null;
-        request.setupAddParameter(URIConstants.CGI_SCREEN_PARAM,screens);
-        
-        RunData runData = getRunData(request,response,config);
-        
-        Pipeline pipeline = new TurbinePipeline();
-        PipelineData pipelineData = runData;
-
-        DetermineTargetValve valve = new DetermineTargetValve();
-        pipeline.addValve(valve);
-
-        pipeline.invoke(pipelineData);
-        assertEquals("",runData.getScreen());
-
-
-    }
-    
-   
-}
diff --git a/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java b/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java
deleted file mode 100644
index 4583498..0000000
--- a/src/test/org/apache/turbine/pipeline/ExecutePageValveTest.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.turbine.modules.actions.VelocityActionDoesNothing;
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.template.TemplateService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.test.EnhancedMockHttpServletResponse;
-import org.apache.turbine.test.EnhancedMockHttpSession;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import org.apache.turbine.util.uri.URIConstants;
-
-import com.mockobjects.servlet.MockServletConfig;
-
-/**
- * Tests ExecutePageValve.
- *
- * @author <a href="mailto:epugh@opensourceConnections.com">Eric Pugh</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public class ExecutePageValveTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-    private MockServletConfig config = null;
-    private EnhancedMockHttpServletRequest request = null;
-    private EnhancedMockHttpSession session = null;
-    private HttpServletResponse response = null;
-    private static ServletConfig sc = null;
-    /**
-     * Constructor
-     */
-    public ExecutePageValveTest(String testName) throws Exception
-    {
-        super(testName);
-    }
-
-    protected void setUp() throws Exception
-    {
-        super.setUp();
-        config = new MockServletConfig();
-        config.setupNoParameters();
-        request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-
-        session = new EnhancedMockHttpSession();
-        response = new EnhancedMockHttpServletResponse();
-
-        request.setSession(session);
-
-        sc = config;
-        tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/CompleteTurbineResources.properties");
-        tc.initialize();
-    }
-
-    public void testValve() throws Exception
-    {
-
-        
-        
-        Vector v = new Vector();
-        v.add(URIConstants.CGI_TEMPLATE_PARAM);
-        request.setupGetParameterNames(v.elements());
-        String nulls[] = new String[1];
-        nulls[0]="Index.vm";
-        request.setupAddParameter(URIConstants.CGI_TEMPLATE_PARAM, nulls);
-
-        RunData runData =
-            getRunData(request, response, config);
-        
-        
-        
-        runData.setScreenTemplate("ExistPageWithLayout.vm");
-        
-        
-        TurbineUser tu = new TurbineUser();
-        tu.setName("username");
-        tu.setHasLoggedIn(Boolean.TRUE);
-        String actionName = VelocityActionDoesNothing.class.getName();
-        actionName = actionName.substring(actionName.lastIndexOf(".")+1);
-        runData.setAction(actionName);
-        runData.setUser(tu);
-
-        Pipeline pipeline = new TurbinePipeline();
-
-        PipelineData pipelineData = runData;
-        ExecutePageValve valve = new ExecutePageValve();
-        pipeline.addValve(valve);
-
-        int numberOfCalls = VelocityActionDoesNothing.numberOfCalls;
-        pipeline.invoke(pipelineData);
-        assertEquals("Assert action was called",numberOfCalls +1,VelocityActionDoesNothing.numberOfCalls);
-        User user = runData.getUser();
-        assertNotNull(user);
-        assertEquals("username", user.getName());
-        assertTrue(user.hasLoggedIn());
-
-
-    }
-
-}
diff --git a/src/test/org/apache/turbine/pipeline/PipelineCreationTest.java b/src/test/org/apache/turbine/pipeline/PipelineCreationTest.java
deleted file mode 100644
index ce25284..0000000
--- a/src/test/org/apache/turbine/pipeline/PipelineCreationTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-
-import junit.framework.TestCase;
-
-import com.thoughtworks.xstream.XStream;
-import com.thoughtworks.xstream.io.xml.DomDriver;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- */
-public class PipelineCreationTest extends TestCase
-{
-    private Pipeline pipeline;
-    /**
-     * Constructor
-     */
-    public PipelineCreationTest(String testName)
-    {
-        super(testName);
-    }
-    
-    public void setUp(){
-        pipeline = new TurbinePipeline();
-        pipeline.addValve(new SimpleValve());
-        pipeline.addValve(new DetermineActionValve());
-    }
-
-    
-    public void testSavingPipelineWXstream() throws Exception
-    {
-        XStream xstream = new XStream(new DomDriver()); // does not require XPP3 library
-       
-        String xml = xstream.toXML(pipeline);
-        //System.out.println(xml);
-        //Pipeline pipeline = (Pipeline)xstream.fromXML(xml);
-        
-    }
-    
-    public void testReadingPipelineWXstream() throws Exception{
-        String xml="<org.apache.turbine.pipeline.TurbinePipeline>  <valves>    <org.apache.turbine.pipeline.SimpleValve/>    <org.apache.turbine.pipeline.DetermineActionValve/>  </valves></org.apache.turbine.pipeline.TurbinePipeline>";
-        XStream xstream = new XStream(new DomDriver()); // does not require XPP3 library
-        Object o = xstream.fromXML(xml);
-        Pipeline pipeline = (Pipeline)o;
-        assertEquals(pipeline.getValves().length,2);
-        assertTrue(pipeline.getValves()[0] instanceof SimpleValve);
-        assertTrue(pipeline.getValves()[1] instanceof DetermineActionValve);
-    }
-
-}
diff --git a/src/test/org/apache/turbine/pipeline/PipelineTest.java b/src/test/org/apache/turbine/pipeline/PipelineTest.java
deleted file mode 100644
index 8e42615..0000000
--- a/src/test/org/apache/turbine/pipeline/PipelineTest.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.StringWriter;
-
-import junit.framework.TestCase;
-
-/**
- * Tests TurbinePipeline.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- */
-public class PipelineTest extends TestCase
-{
-    /**
-     * Constructor
-     */
-    public PipelineTest(String testName)
-    {
-        super(testName);
-    }
-
-    /**
-     * Tests the Pipeline.
-     */
-    public void testPipeline() throws Exception
-    {
-
-        // Make sure Valves are getting added properly to the
-        // Pipeline.
-        StringWriter writer = new StringWriter();
-        Pipeline pipeline = new TurbinePipeline();
-
-        SimpleValve valve = new SimpleValve();
-        valve.setWriter(writer);
-        valve.setValue("foo");
-        pipeline.addValve(valve);
-        valve = new SimpleValve();
-        valve.setWriter(writer);
-        valve.setValue("bar");
-        pipeline.addValve(valve);
-
-        pipeline.invoke(new DefaultPipelineData());
-
-        assertEquals("foobar", writer.toString());
-    }
-}
diff --git a/src/test/org/apache/turbine/pipeline/SimpleValve.java b/src/test/org/apache/turbine/pipeline/SimpleValve.java
deleted file mode 100644
index 3952931..0000000
--- a/src/test/org/apache/turbine/pipeline/SimpleValve.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.turbine.pipeline;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.IOException;
-import java.io.Writer;
-
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineException;
-
-/**
- * <code>Valve</code> implementation use for testing purposes.
- *
- * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
- * @version $Id$
- */
-class SimpleValve 
-    extends AbstractValve
-{
-    private String value;
-
-    private Writer writer;
-
-    /**
-     * The value for the associated <code>Writer</code> to write.
-     */
-    public void setValue(String value)
-    {
-        this.value = value;
-    }
-
-    protected void setWriter(Writer writer)
-    {
-        this.writer = writer;
-    }
-
-    /**
-     * @see org.apache.turbine.Valve#invoke(RunData, ValveContext)
-     */
-    public void invoke(PipelineData data, ValveContext context)
-        throws IOException, TurbineException
-    {
-        // Perform our actions
-        writer.write(value);
-
-        // Pass control to the next Valve in the Pipeline
-        context.invokeNext(data);
-    }
-}
diff --git a/src/test/org/apache/turbine/services/LoadingComponentsTest.java b/src/test/org/apache/turbine/services/LoadingComponentsTest.java
deleted file mode 100644
index 41ce854..0000000
--- a/src/test/org/apache/turbine/services/LoadingComponentsTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.apache.turbine.services;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import org.apache.fulcrum.cache.DefaultGlobalCacheService;
-import org.apache.fulcrum.crypto.CryptoService;
-import org.apache.fulcrum.factory.FactoryService;
-import org.apache.fulcrum.intake.IntakeService;
-import org.apache.fulcrum.localization.LocalizationService;
-import org.apache.fulcrum.mimetype.MimeTypeService;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-/**
- * Unit test for verifing that we can load all the appropriate components from the
- * appropriate Container.  For now that is just ECM (AvalonComponentService)
- * but in the future with mixed containers there could be multiple.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class LoadingComponentsTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public LoadingComponentsTest(String name) throws Exception
-    {
-        super(name);
-    }
-    public void testLoading() throws Exception
-    {
-        AvalonComponentService ecm =
-            (AvalonComponentService) TurbineServices.getInstance().getService(
-                    AvalonComponentService.SERVICE_NAME);
-        DefaultGlobalCacheService dgcs = (DefaultGlobalCacheService)ecm.lookup(DefaultGlobalCacheService.ROLE);
-        assertNotNull(dgcs);
-        
-        CryptoService cs = (CryptoService)ecm.lookup(CryptoService.ROLE);
-        assertNotNull(cs);
-        LocalizationService ls = (LocalizationService)ecm.lookup(LocalizationService.ROLE);
-        assertNotNull(ls);
-        IntakeService intake = (IntakeService)ecm.lookup(IntakeService.ROLE);
-        assertNotNull(intake);
-        FactoryService fs = (FactoryService)ecm.lookup(FactoryService.ROLE);
-        assertNotNull(fs);
-        MimeTypeService mimetype = (MimeTypeService)ecm.lookup(MimeTypeService.ROLE);
-        assertNotNull(mimetype);
-    }
-    public void setUp() throws Exception
-    {
-        tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/avaloncomponent/MerlinComponentServiceTest.java b/src/test/org/apache/turbine/services/avaloncomponent/MerlinComponentServiceTest.java
deleted file mode 100644
index b0f047e..0000000
--- a/src/test/org/apache/turbine/services/avaloncomponent/MerlinComponentServiceTest.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fulcrum.mimetype.MimeTypeService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-
-
-/**
- * Simple test to make sure that the AvalonComponentService can be initialized.
- * 
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class MerlinComponentServiceTest extends BaseTestCase
-{
-	private static final Log log = LogFactory.getLog(MerlinComponentServiceTest.class);
-
-	public MerlinComponentServiceTest(String name) throws Exception
-	{
-		super(name);
-	}
-	private MerlinComponentService getService()
-	{
-		return (MerlinComponentService) TurbineServices.getInstance().getService(
-			MerlinComponentService.SERVICE_NAME);
-	}
-
-	/**
-	 * Test that we successfully download and install the HelloComponent form the 
-	 * Merlin tutorial.  Currently pulling from http://jakarta.apache.org/turbine/repo/merlin
-	 * @throws Exception
-	 */
-	public void testMerlinWithMimetype() throws Exception
-	{
-
-		TurbineConfig tc =
-			new TurbineConfig(".", "/conf/test/MerlinComponentServiceTest.properties");
-
-		try
-		{
-			tc.initialize();
-
-			MimeTypeService mimetypeservice = (MimeTypeService) getService().lookup("/fulcrum/mimetype"); // just to test
-			assertNotNull(mimetypeservice);
-            
-			getService().release(mimetypeservice);
-
- 
-		}
-		catch (Exception e)
-		{
-			throw e;
-		}
-		finally
-		{
-			tc.dispose();
-		}
-	}
-    
-	/**
-	 * Test that a locally compiled component can be loaded and used.  Currently not
-	 * working because the org.apache.turbine.test.TestComponent is in this classloader,
-	 * not in a downloaded jar.  
-	 * @throws Exception
-	 */
-	public void OFF_testMerlinWithTestComponent() throws Exception
-		{
-
-			TurbineConfig tc =
-				new TurbineConfig(".", "/conf/test/MerlinComponentServiceTest.properties");
-
-			try
-			{
-				tc.initialize();
-
-				Object appliance = getService().lookup("/local/testcomponent"); // just to test
-				assertNotNull(appliance);
-				assertEquals("appliance:/local/testcomponent", appliance.toString());
-				log.info("Looked up appliance: " + appliance.toString());
-				getService().release(appliance);
-
- 
-			}
-			catch (Exception e)
-			{
-				throw e;
-			}
-			finally
-			{
-				tc.dispose();
-			}
-		}
-}
-
diff --git a/src/test/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentServiceTest.java b/src/test/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentServiceTest.java
deleted file mode 100644
index d4198d4..0000000
--- a/src/test/org/apache/turbine/services/avaloncomponent/TurbineAvalonComponentServiceTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.apache.turbine.services.avaloncomponent;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.TestComponent;
-
-
-/**
- * Simple test to make sure that the AvalonComponentService can be initialized.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineAvalonComponentServiceTest
-        extends BaseTestCase
-{
-    private static final String PREFIX = "services." +
-            AvalonComponentService.SERVICE_NAME + '.';
-
-    /**
-     * Initialize the unit test.  The AvalonComponentService will be configured
-     * and initialized.         
-
-     *
-     * @param name
-     */
-    public TurbineAvalonComponentServiceTest(String name)
-            throws Exception
-    {
-        super(name);
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.setApplicationRoot(".");
-
-        Configuration cfg = new BaseConfiguration();
-        cfg.setProperty(PREFIX + "classname",
-                TurbineAvalonComponentService.class.getName());
-
-        // we want to configure the service to load test TEST configuration files
-        cfg.setProperty(PREFIX + "componentConfiguration",
-                "src/test/componentConfiguration.xml");
-        cfg.setProperty(PREFIX + "componentRoles",
-                "src/test/componentRoles.xml");
-        serviceManager.setConfiguration(cfg);
-
-        try
-        {
-            serviceManager.init();
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    /**
-     * Use the service to get an instance of the TestComponent.  The test() method will be called to
-     * simply write a log message.  The component will then be released.
-     */
-    public void testGetAndUseTestComponent()
-    {
-        try
-        {
-            AvalonComponentService cs = (AvalonComponentService)
-                    TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME);
-
-            TestComponent tc = (TestComponent) cs.lookup(TestComponent.ROLE);
-            tc.test();
-            cs.release(tc);
-        }
-        catch(Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java b/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java
deleted file mode 100644
index 06cc8d3..0000000
--- a/src/test/org/apache/turbine/services/cache/FulcrumCacheComponentTest.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.apache.turbine.services.cache;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://www.apache.org/)."
- *    AintakeToolernately, 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import org.apache.fulcrum.cache.CacheServiceFacade;
-import org.apache.fulcrum.cache.CachedObject;
-import org.apache.fulcrum.cache.GlobalCacheService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-/**
- * Unit test for Accessing the Fulcrum Cache component via the
- * CacheServiceFacade and the Component within Turbine.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class FulcrumCacheComponentTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public FulcrumCacheComponentTest(String name) throws Exception
-    {
-        super(name);
-    }
-    public void testComponentAndFacaded() throws Exception
-    {
-		AvalonComponentService acs = (AvalonComponentService) TurbineServices.getInstance().getService(AvalonComponentService.SERVICE_NAME);
-		GlobalCacheService cache = (GlobalCacheService)acs.lookup(GlobalCacheService.ROLE);
-		CachedObject inputObject = new CachedObject(new Double(10.2));
-		cache.addObject("testObj",inputObject);
-		CachedObject returnObject = CacheServiceFacade.getObject("testObj");
-		assertEquals(inputObject,returnObject);
-    }
-
-    
-    public void setUp() throws Exception
-    {
-        tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/crypto/CryptoRunningInECMTest.java b/src/test/org/apache/turbine/services/crypto/CryptoRunningInECMTest.java
deleted file mode 100644
index 1df481a..0000000
--- a/src/test/org/apache/turbine/services/crypto/CryptoRunningInECMTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://www.apache.org/)."
- *    AintakeToolernately, 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.fulcrum.crypto.CryptoAlgorithm;
-import org.apache.fulcrum.crypto.CryptoService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.AvalonComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Verifies the Fulcrum Crypto Service works properly in Turbine.
- * <br>
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class CryptoRunningInECMTest extends BaseTestCase
-{
-    private static final String preDefinedInput = "Oeltanks";
-    private static TurbineConfig tc = null;
-    private CryptoService cryptoService;
-
-    public CryptoRunningInECMTest(String name) throws Exception
-    {
-        super(name);
-
-      
-    }
-
-    public void testMd5()
-    {
-        String preDefinedResult = "XSop0mncK19Ii2r2CUe29w==";
-
-        try
-        {
-            CryptoAlgorithm ca =cryptoService.getCryptoAlgorithm("default");
-
-            ca.setCipher("MD5");
-
-            String output = ca.encrypt(preDefinedInput);
-
-            assertEquals("MD5 Encryption failed ", preDefinedResult, output);
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testSha1()
-    {
-        String preDefinedResult = "uVDiJHaavRYX8oWt5ctkaa7j1cw=";
-
-        try
-        {
-            CryptoAlgorithm ca = cryptoService.getCryptoAlgorithm("default");
-
-            ca.setCipher("SHA1");
-
-            String output = ca.encrypt(preDefinedInput);
-
-            assertEquals("SHA1 Encryption failed ", preDefinedResult, output);
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-    public void setUp() throws Exception
-    {
-        tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-        AvalonComponentService acs =
-            (AvalonComponentService) TurbineServices.getInstance().getService(
-                    AvalonComponentService.SERVICE_NAME);
-        cryptoService = (CryptoService) acs.lookup(CryptoService.ROLE);
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/crypto/CryptoRunningInMerlinTest.java b/src/test/org/apache/turbine/services/crypto/CryptoRunningInMerlinTest.java
deleted file mode 100644
index 5358718..0000000
--- a/src/test/org/apache/turbine/services/crypto/CryptoRunningInMerlinTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.apache.turbine.services.crypto;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://www.apache.org/)."
- *    AintakeToolernately, 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.fulcrum.crypto.CryptoAlgorithm;
-import org.apache.fulcrum.crypto.CryptoService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.MerlinComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Verifies the Fulcrum Crypto Service works properly in Turbine.
- * <br>
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
- * @version $Id$
- */
-public class CryptoRunningInMerlinTest extends BaseTestCase
-{
-    private static final String preDefinedInput = "Oeltanks";
-    private static TurbineConfig tc = null;
-    private CryptoService cryptoService;
-
-    public CryptoRunningInMerlinTest(String name) throws Exception
-    {
-        super(name);
-
-      
-    }
-
-    public void testMd5()
-    {
-        String preDefinedResult = "XSop0mncK19Ii2r2CUe29w==";
-
-        try
-        {
-            CryptoAlgorithm ca =cryptoService.getCryptoAlgorithm("default");
-
-            ca.setCipher("MD5");
-
-            String output = ca.encrypt(preDefinedInput);
-
-            assertEquals("MD5 Encryption failed ", preDefinedResult, output);
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-
-    public void testSha1()
-    {
-        String preDefinedResult = "uVDiJHaavRYX8oWt5ctkaa7j1cw=";
-
-        try
-        {
-            CryptoAlgorithm ca = cryptoService.getCryptoAlgorithm("default");
-
-            ca.setCipher("SHA1");
-
-            String output = ca.encrypt(preDefinedInput);
-
-            assertEquals("SHA1 Encryption failed ", preDefinedResult, output);
-
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-            fail();
-        }
-    }
-    public void setUp() throws Exception
-    {
-        tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-        MerlinComponentService acs =
-            (MerlinComponentService) TurbineServices.getInstance().getService(
-		MerlinComponentService.SERVICE_NAME);
-        cryptoService = (CryptoService) acs.lookup("/fulcrum/crypto");
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/intake/IntakeToolTest.java b/src/test/org/apache/turbine/services/intake/IntakeToolTest.java
deleted file mode 100644
index c6a3fe8..0000000
--- a/src/test/org/apache/turbine/services/intake/IntakeToolTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-package org.apache.turbine.services.intake;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://www.apache.org/)."
- *    AintakeToolernately, 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import java.io.File;
-import java.util.Vector;
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.fulcrum.intake.model.Group;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.MerlinComponentService;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockHttpSession;
-import com.mockobjects.servlet.MockServletConfig;
-/**
- * Unit test for Localization Tool.  Verifies that localization works the same using the
- * deprecated Turbine localization service as well as the new Fulcrum Localization
- * component.
- *
- * @author <a href="maiintakeToolo:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class IntakeToolTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public IntakeToolTest(String name) throws Exception
-    {
-        super(name);
-    }
-    public void testGet() throws Exception
-    {
-        IntakeTool intakeTool = new IntakeTool();
-        intakeTool.init(getRunData());
-        File file = new File("./target/appData.ser");
-        assertTrue(
-            "Make sure serialized data file exists:" + file,
-            file.exists());
-        Group group = intakeTool.get("LoginGroup","loginGroupKey");
-        assertNotNull(group);
-        assertEquals("loginGroupKey", group.getGID());
-        assertEquals("LoginGroup", group.getIntakeGroupName());
-    }
-
-    
-    /**
-     * Make sure refresh DOESN'T do anything
-     * @throws Exception
-     */
-    public void testRefresh() throws Exception
-    {
-        IntakeTool intakeTool = new IntakeTool();
-        intakeTool.init(getRunData());
-        int numberOfGroups = intakeTool.getGroups().size();
-        intakeTool.refresh();
-        assertEquals(numberOfGroups,intakeTool.getGroups().size());
-    }
-    private RunData getRunData() throws Exception
-    {
-        RunDataService rds =
-            (RunDataService) TurbineServices.getInstance().getService(
-                RunDataService.SERVICE_NAME);
-        EnhancedMockHttpServletRequest request =
-            new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        Vector v = new Vector();
-        request.setupGetParameterNames(v.elements());
-        MockHttpSession session = new MockHttpSession();
-        session.setupGetAttribute(User.SESSION_KEY, null);
-        request.setSession(session);
-        HttpServletResponse response = new MockHttpServletResponse();
-        ServletConfig config = new MockServletConfig();
-        RunData runData = rds.getRunData(request, response, config);
-        return runData;
-    }
-    public void setUp() throws Exception
-    {
-        tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-        
-		MerlinComponentService merlin =
-			(MerlinComponentService) TurbineServices.getInstance().getService(MerlinComponentService.SERVICE_NAME);
-						
-		merlin.lookup("/fulcrum/intake");
-						
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/intake/LoginForm.java b/src/test/org/apache/turbine/services/intake/LoginForm.java
deleted file mode 100644
index 01a4fe0..0000000
--- a/src/test/org/apache/turbine/services/intake/LoginForm.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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.turbine.services.intake;
-
-/**
- * Test form for Intake
- *
- * @author <a href="mailto:epugh@upstate.com">epugh@upstate.com</a>
- * @version $Id$
- */
-public class LoginForm
-{
-
-    private String username;
-    /**
-     * @return
-     */
-    public String getUsername()
-    {
-        return username;
-    }
-
-    /**
-     * @param username
-     */
-    public void setUsername(String username)
-    {
-        this.username = username;
-    }
-
-}
diff --git a/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java b/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java
deleted file mode 100644
index 067e04e..0000000
--- a/src/test/org/apache/turbine/services/localization/BarBundle_en_US.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.apache.turbine.services.localization;
-
-import java.util.ListResourceBundle;
-
-/**
- * An english resource bundle for use in testing.
- */
-public class BarBundle_en_US extends ListResourceBundle
-{
-    private static final Object[][] CONTENTS =
-    {
-        { "key1", "value1" },
-        { "key2", "value2" },
-        { "key3", "value3" },
-        { "key4", "value4" }
-    };
-
-    protected Object[][] getContents()
-    {
-        return CONTENTS;
-    }
-}
diff --git a/src/test/org/apache/turbine/services/localization/LocalizationToolTest.java b/src/test/org/apache/turbine/services/localization/LocalizationToolTest.java
deleted file mode 100644
index 7d49420..0000000
--- a/src/test/org/apache/turbine/services/localization/LocalizationToolTest.java
+++ /dev/null
@@ -1,147 +0,0 @@
-package org.apache.turbine.services.localization;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import java.util.Vector;
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletResponse;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.test.EnhancedMockHttpServletRequest;
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.util.TurbineConfig;
-import com.mockobjects.servlet.MockHttpServletResponse;
-import com.mockobjects.servlet.MockHttpSession;
-import com.mockobjects.servlet.MockServletConfig;
-/**
- * Unit test for Localization Tool.  Verifies that localization works the same using the
- * deprecated Turbine localization service as well as the new Fulcrum Localization
- * component.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class LocalizationToolTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public LocalizationToolTest(String name) throws Exception
-    {
-        super(name);
-    }
-    public void testGet() throws Exception
-    {
-        LocalizationTool lt = new LocalizationTool();
-        lt.init(getRunData());
-        assertEquals("value1", lt.get("key1"));
-        assertEquals("value3", lt.get("key3"));
-    }
-    public void testGetLocale() throws Exception
-    {
-        LocalizationTool lt = new LocalizationTool();
-        lt.init(getRunData());
-        assertNotNull(lt.getLocale());
-        assertEquals("US", lt.getLocale().getCountry());
-        assertEquals("en", lt.getLocale().getLanguage());
-    }
-    public void testInit() throws Exception
-    {
-        LocalizationTool lt = new LocalizationTool();
-        lt.init(getRunData());
-        assertNotNull(lt.getLocale());
-    }
-    public void testRefresh() throws Exception
-    {
-        LocalizationTool lt = new LocalizationTool();
-        lt.init(getRunData());
-        assertNotNull(lt.getLocale());
-        lt.refresh();
-        assertNull(lt.getLocale());
-    }
-    private RunData getRunData() throws Exception
-    {
-        RunDataService rds = (RunDataService) TurbineServices.getInstance().getService(RunDataService.SERVICE_NAME);
-        EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest();
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");
-        Vector v = new Vector();
-        request.setupGetParameterNames(v.elements());
-        MockHttpSession session = new MockHttpSession();
-        session.setupGetAttribute(User.SESSION_KEY, null);
-        request.setSession(session);
-        HttpServletResponse response = new MockHttpServletResponse();
-        ServletConfig config = new MockServletConfig();
-        RunData runData = rds.getRunData(request, response, config);
-        return runData;
-    }
-    public void setUp() throws Exception
-    {
-        tc = new TurbineConfig(".", "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java b/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java
deleted file mode 100644
index 8845507..0000000
--- a/src/test/org/apache/turbine/services/mimetype/FulcrumMimetypeComponentTest.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package org.apache.turbine.services.mimetype;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Locale;
-
-import org.apache.fulcrum.mimetype.MimeTypeService;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.avaloncomponent.MerlinComponentService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-/**
- * Unit test for Accessing the Fulcrum Mimetype component within Turbine.
- * 
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class FulcrumMimetypeComponentTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public FulcrumMimetypeComponentTest(String name) throws Exception
-    {
-        super(name);
-    }
-    public void testComponent() throws Exception
-    {
-        MerlinComponentService merlin =
-            (MerlinComponentService) TurbineServices.getInstance().getService(
-		MerlinComponentService.SERVICE_NAME);
-        MimeTypeService mimeTypeService =
-            (MimeTypeService) merlin.lookup("/fulcrum/mimetype");
-        Locale locale = new Locale("en", "US");
-        String s = mimeTypeService.getCharSet(locale);
-        assertEquals("ISO-8859-1", s);
-    }
-
-    public void setUp() throws Exception
-    {
-        tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/services/rundata/DefaultTurbineRunDataTest.java b/src/test/org/apache/turbine/services/rundata/DefaultTurbineRunDataTest.java
deleted file mode 100644
index e09caeb..0000000
--- a/src/test/org/apache/turbine/services/rundata/DefaultTurbineRunDataTest.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.apache.turbine.services.rundata;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.Turbine;
-import org.apache.turbine.TurbineConstants;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-public class DefaultTurbineRunDataTest extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    public DefaultTurbineRunDataTest(String name) throws Exception
-    {
-        super(name);
-    }
-
-    public void testGetDefaultCharSetWithMimeType()
-    {
-        Turbine.getConfiguration().setProperty(
-            TurbineConstants.LOCALE_DEFAULT_CHARSET_KEY,
-            "");
-		Turbine.getConfiguration().setProperty(
-			  TurbineConstants.LOCALE_DEFAULT_COUNTRY_KEY,
-			  "UK");
-         DefaultTurbineRunData runData =
-            new DefaultTurbineRunData();
-        assertEquals("ISO-8859-1", runData.getDefaultCharSet());
-
-    }
-
-    public void setUp() throws Exception
-    {
-        tc =
-            new TurbineConfig(
-                ".",
-                "/conf/test/TestFulcrumComponents.properties");
-        tc.initialize();
-    }
-    public void tearDown() throws Exception
-    {
-        if (tc != null)
-        {
-            tc.dispose();
-        }
-    }
-
-}
diff --git a/src/test/org/apache/turbine/services/security/AccessControlListTest.java b/src/test/org/apache/turbine/services/security/AccessControlListTest.java
deleted file mode 100644
index 4d84d8b..0000000
--- a/src/test/org/apache/turbine/services/security/AccessControlListTest.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.apache.turbine.services.security;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.factory.FactoryService;
-import org.apache.turbine.services.factory.TurbineFactoryService;
-import org.apache.turbine.services.security.SecurityService;
-import org.apache.turbine.services.security.db.DBSecurityService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.TurbineAccessControlList;
-
-public class AccessControlListTest
-    extends BaseTestCase
-{
-    private static final String PREFIX = "services." +
-        SecurityService.SERVICE_NAME + '.';
-
-    public AccessControlListTest( String name )
-            throws Exception
-    {
-        super(name);
-    }
-
-    public void testSelection() throws Exception
-    {
-    	  ServiceManager serviceManager = TurbineServices.getInstance();
-          serviceManager.setApplicationRoot(".");
-
-          Configuration cfg = new BaseConfiguration();
-
-          cfg.setProperty(PREFIX + "classname",
-                          DBSecurityService.class.getName());
-
-          cfg.setProperty(PREFIX + "acl.class",
-                          TurbineAccessControlList.class.getName());
-
-          // We must run init!
-          cfg.setProperty(PREFIX+"earlyInit", "true");
-
-          /* Ugh */
-
-          cfg.setProperty("services." + FactoryService.SERVICE_NAME + ".classname",
-                          TurbineFactoryService.class.getName());
-
-          serviceManager.setConfiguration(cfg);
-
-          serviceManager.init();
-
-          Class aclClass = TurbineSecurity.getService().getAclClass();
-
-          if(!aclClass.getName().equals(TurbineAccessControlList.class.getName()))
-          {
-              fail("ACL Class is " + aclClass.getName()
-                   + ", expected was " + TurbineAccessControlList.class.getName());
-          }
-
-          Map roles = new HashMap();
-          Map permissions = new HashMap();
-
-          AccessControlList aclTest =
-            TurbineSecurity.getService().getAclInstance(roles, permissions);
-
-          if(aclTest == null)
-          {
-            fail("Security Service failed to deliver a " + aclClass.getName()
-                 + " Object");
-          }
-   }
-
-
-}
diff --git a/src/test/org/apache/turbine/services/template/ClassTest.java b/src/test/org/apache/turbine/services/template/ClassTest.java
deleted file mode 100644
index ac4fc0b..0000000
--- a/src/test/org/apache/turbine/services/template/ClassTest.java
+++ /dev/null
@@ -1,219 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Tests the class mapping of the Template Service for screen,
- * layout and navigation.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ClassTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-
-    public ClassTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-        tc.initialize();
-
-        ts = (TemplateService) TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
-    }
-
-    public void testTemplateDefaults()
-    {
-        // Test if the Default-Values for the Screen, Layout and Navigation classes
-        assertEquals("Default Page failed",           TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultPage());
-        assertEquals("Default Screen failed",         TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultScreen());
-        assertEquals("Default Layout failed",         TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultLayout());
-        assertEquals("Default Navigation failed",     TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultNavigation());
-    }
-
-    public void testVelocityDefaults()
-    {
-        // Test if all the Velocity based Defaults for Page, Screen, Layout, Navigation
-        assertEquals("Default Page failed",           "VelocityPage",       ts.getDefaultPageName("foo.vm"));
-        assertEquals("Default Screen failed",         "VelocityScreen",     ts.getDefaultScreenName("foo.vm"));
-        assertEquals("Default Layout failed",         "VelocityOnlyLayout", ts.getDefaultLayoutName("foo.vm"));
-        assertEquals("Default Navigation failed",     "VelocityNavigation", ts.getDefaultNavigationName("foo.vm"));
-    }
-
-    // Here comes the fun
-
-    public void testNonExistingTemplate()
-        throws Exception
-    {
-        //
-        // Try a non existing Template. This should render with the default screen class,
-        // use the default Layout class and Navigation. It should be rendered with the
-        // default Layout Template but the Screen Template itself must not exist.
-        String templateName = "DoesNotExistPage.vm";
-        assertEquals("Screen translation failed",         "VelocityScreen",     ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "VelocityOnlyLayout", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "VelocityNavigation", ts.getNavigationName(templateName));
-    }
-
-    public void testNonExistingSublevelTemplate()
-        throws Exception
-    {
-        //
-        // Try a non existing Template in a sub-path. This should render with the default screen class,
-        // use the default Layout class and Navigation.
-        String templateName = "this,template,DoesNotExistPage.vm";
-        assertEquals("Screen translation failed",         "VelocityScreen",     ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "VelocityOnlyLayout", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "VelocityNavigation", ts.getNavigationName(templateName));
-    }
-
-    public void testExistingTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template without any backing class. Should also return the default classes
-        String templateName = "ExistPage.vm";
-        assertEquals("Screen translation failed",         "VelocityScreen",     ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "VelocityOnlyLayout", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "VelocityNavigation", ts.getNavigationName(templateName));
-    }
-
-    public void testExistingSublevelTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Sublevel Template without any backing class. Should also return the default classes
-        String templateName = "existing,Page.vm";
-        assertEquals("Screen translation failed",         "VelocityScreen",     ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "VelocityOnlyLayout", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "VelocityNavigation", ts.getNavigationName(templateName));
-    }
-
-    // Now we start checking existing classes.
-
-    public void testExistingClass()
-        throws Exception
-    {
-        //
-        // Now we have a class backed template. It has a separate Class for Screen, Navigation and
-        // Layout. It should find the matching class names in the screens, navigations and layout
-        // packages.
-        String templateName = "ExistPageWithClass.vm";
-        assertEquals("Screen translation failed",         "ExistPageWithClass", ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "ExistPageWithClass", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "ExistPageWithClass", ts.getNavigationName(templateName));
-    }
-
-    public void testExistingSublevelClass()
-        throws Exception
-    {
-        //
-        // Now we have a class backed template. It has a separate Class for Screen, Navigation and
-        // Layout. It should find the matching class names in the screens, navigations and layout
-        // packages. For a twist, the classes are in a subpackage, so they should also find the
-        // classes in the sub packages.
-        String templateName = "existing,PageWithClass.vm";
-        assertEquals("Screen translation failed",         "existing.PageWithClass", ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "existing.PageWithClass", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "existing.PageWithClass", ts.getNavigationName(templateName));
-    }
-
-    public void testDefaultClass()
-        throws Exception
-    {
-        //
-        // We look for a specific Template but it has no class. It has, however
-        // a Default class in its package. So the Loader should find the default
-        String templateName = "existing,dflt,PageWithClass.vm";
-        assertEquals("Screen translation failed",         "existing.dflt.Default", ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "existing.dflt.Default", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "existing.dflt.Default", ts.getNavigationName(templateName));
-    }
-
-    public void testDefaultSublevelClass()
-        throws Exception
-    {
-        //
-        // We look for a specific Template but it has no class. It has, however
-        // a Default class in an upper package. So the Loader should find this.
-        String templateName = "existing,dflt,onelevel,twolevel,threelevel,PageWithClass.vm";
-        assertEquals("Screen translation failed",         "existing.dflt.Default", ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "existing.dflt.Default", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "existing.dflt.Default", ts.getNavigationName(templateName));
-    }
-
-    public void testIgnoreExistingClass()
-        throws Exception
-    {
-        //
-        // This is a test, whether matching classes in upper level packages are ignored.
-        // We're looking for classes which don't exist. We have, however, matching names
-        // in an upper package. This should still match the Default classes, and not these.
-        String templateName = "sublevel,ExistPageWithClass.vm";
-        assertEquals("Screen translation failed",         "VelocityScreen",     ts.getScreenName(templateName));
-        assertEquals("Layout translation failed",         "VelocityOnlyLayout", ts.getLayoutName(templateName));
-        assertEquals("Navigation translation failed",     "VelocityNavigation", ts.getNavigationName(templateName));
-    }
-
-
-}
diff --git a/src/test/org/apache/turbine/services/template/DefaultsTest.java b/src/test/org/apache/turbine/services/template/DefaultsTest.java
deleted file mode 100644
index 85483fc..0000000
--- a/src/test/org/apache/turbine/services/template/DefaultsTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Tests all the various defaults for the Template Service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-public class DefaultsTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-
-    public DefaultsTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-        tc.initialize();
-
-        ts = (TemplateService) TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
-    }
-
-    public void testDefaults()
-    {
-        // Test if the caching property was loaded correctly.
-        assertEquals("isCaching failed!",             ts.isCaching(), false);
-
-        // Test if the default values for Template and Extension were loaded correctly
-        assertEquals("Default Extension failed",      ts.getDefaultExtension(), "");
-        assertEquals("Default Template failed",       ts.getDefaultTemplate(), TemplateService.DEFAULT_TEMPLATE_VALUE);
-    }
-
-    public void testTemplateDefaults()
-    {
-        // Test if the Default-Values for the Screen, Layout and Navigation classes and the Layout Template are correct.
-        assertEquals("Default Page failed",           TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultPage());
-        assertEquals("Default Screen failed",         TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultScreen());
-        assertEquals("Default Layout failed",         TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultLayout());
-        assertEquals("Default Navigation failed",     TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultNavigation());
-        assertEquals("Default LayoutTemplate failed", TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultLayoutTemplate());
-    }
-
-    public void testVelocityDefaults()
-    {
-        // Test if all the Velocity based Defaults for Page, Screen, Layout, Navigation and Layout Template
-        assertEquals("Default Page failed",           "VelocityPage",       ts.getDefaultPageName("foo.vm"));
-        assertEquals("Default Screen failed",         "VelocityScreen",     ts.getDefaultScreenName("foo.vm"));
-        assertEquals("Default Layout failed",         "VelocityOnlyLayout", ts.getDefaultLayoutName("foo.vm"));
-        assertEquals("Default Navigation failed",     "VelocityNavigation", ts.getDefaultNavigationName("foo.vm"));
-        assertEquals("Default LayoutTemplate failed", "Default.vm",         ts.getDefaultLayoutTemplateName("foo.vm"));
-    }
-}
-
diff --git a/src/test/org/apache/turbine/services/template/InitTest.java b/src/test/org/apache/turbine/services/template/InitTest.java
deleted file mode 100644
index b193c1c..0000000
--- a/src/test/org/apache/turbine/services/template/InitTest.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.velocity.VelocityService;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Tests startup of the Template Service and registration of the
- * Velocity Service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class InitTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-
-    public InitTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-        tc.initialize();
-
-        ts = (TemplateService) TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
-    }
-
-
-    public void testService()
-        throws Exception
-    {
-
-        // Can we start the service?
-        assertNotNull("Could not load Service!", ts);
-
-        // Did we register the Velocity Service correctly for "vm" templates?
-        VelocityService vs = (VelocityService) TurbineServices
-            .getInstance().getService(VelocityService.SERVICE_NAME);
-
-        TemplateEngineService tes = ts.getTemplateEngineService("foo.vm");
-
-        assertEquals("Template Service did not return Velocity Service for .vm Templates", vs, tes);
-    }
-}
diff --git a/src/test/org/apache/turbine/services/template/TemplateTest.java b/src/test/org/apache/turbine/services/template/TemplateTest.java
deleted file mode 100644
index f360a49..0000000
--- a/src/test/org/apache/turbine/services/template/TemplateTest.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.apache.turbine.services.template;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Tests all the various template mappings for Screen and Layout
- * templates of the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class TemplateTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static TemplateService ts = null;
-
-    public TemplateTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-        tc.initialize();
-
-        ts = (TemplateService) TurbineServices.getInstance().getService(TemplateService.SERVICE_NAME);
-    }
-
-
-    public void testTemplateDefaults()
-    {
-        assertEquals("Default LayoutTemplate failed", TemplateService.DEFAULT_TEMPLATE_VALUE, ts.getDefaultLayoutTemplate());
-    }
-
-    public void testVelocityDefaults()
-    {
-        assertEquals("Default LayoutTemplate failed", "Default.vm",         ts.getDefaultLayoutTemplateName("foo.vm"));
-    }
-
-    public void testNonExistingTemplate()
-        throws Exception
-    {
-        //
-        // Try a non existing Template. This should render with the default screen class,
-        // use the default Layout class and Navigation. It should be rendered with the
-        // default Layout Template but the Screen Template itself must not exist.
-        String templateName = "DoesNotExistPage.vm";
-        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", null,                 ts.getScreenTemplateName(templateName));
-    }
-
-    public void testNonExistingSublevelTemplate()
-        throws Exception
-    {
-        //
-        // Try a non existing Template in a sub-path. This should render with the default screen class,
-        // use the default Layout class and Navigation. It should be rendered with the
-        // default Layout Template but the Screen Template itself must not exist.
-        String templateName = "this,template,DoesNotExistPage.vm";
-        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", null,                 ts.getScreenTemplateName(templateName));
-    }
-
-    public void testExistingTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template. As we already know, missing classes are found correctly
-        // so we test only Layout and Screen template. This should return the "Default" Layout
-        // template to render and the Screen Template for the Page to render
-        String templateName = "ExistPage.vm";
-        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", "ExistPage.vm",       ts.getScreenTemplateName(templateName));
-    }
-
-    public void testExistingSublevelTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template. As we already know, missing classes are found correctly
-        // so we test only Layout and Screen template. This should return the "Default" Layout
-        // template to render and the Screen Template for the Page to render. The names returned
-        // by the template service are "/" separated so that e.g. Velocity can use this.
-        String templateName = "existing,Page.vm";
-        assertEquals("LayoutTemplate translation failed", "Default.vm",         ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", "existing/Page.vm",   ts.getScreenTemplateName(templateName));
-    }
-
-    public void testExistingLayoutTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template. This time we have a backing Layout page. So the getLayoutTemplateName
-        // method should not return the Default but our Layout page.
-        //
-        String templateName = "ExistPageWithLayout.vm";
-        assertEquals("LayoutTemplate translation failed", "ExistPageWithLayout.vm", ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", "ExistPageWithLayout.vm", ts.getScreenTemplateName(templateName));
-    }
-
-    public void testExistingSublevelLayoutTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template. This time we have a backing Layout page. So the getLayoutTemplateName
-        // method should not return the Default but our Layout page.
-        //
-        String templateName = "existing,ExistSublevelPageWithLayout.vm";
-        assertEquals("LayoutTemplate translation failed", "existing/ExistSublevelPageWithLayout.vm", ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", "existing/ExistSublevelPageWithLayout.vm", ts.getScreenTemplateName(templateName));
-    }
-
-    public void testExistingDefaultLayoutTemplate()
-        throws Exception
-    {
-        //
-        // Try an existing Template in a sublevel. This has an equally named Layout in the root. This
-        // test must find the Template itself but the "Default" layout
-        //
-        String templateName = "existing,ExistPageWithLayout.vm";
-        assertEquals("LayoutTemplate translation failed", "Default.vm",                      ts.getLayoutTemplateName(templateName));
-        assertEquals("ScreenTemplate translation failed", "existing/ExistPageWithLayout.vm", ts.getScreenTemplateName(templateName));
-    }
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/layouts/ExistPageWithClass.java b/src/test/org/apache/turbine/services/template/modules/layouts/ExistPageWithClass.java
deleted file mode 100644
index 7ba5954..0000000
--- a/src/test/org/apache/turbine/services/template/modules/layouts/ExistPageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.layouts;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.layouts.VelocityOnlyLayout;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ExistPageWithClass
-    extends VelocityOnlyLayout
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/layouts/existing/PageWithClass.java b/src/test/org/apache/turbine/services/template/modules/layouts/existing/PageWithClass.java
deleted file mode 100644
index d209aca..0000000
--- a/src/test/org/apache/turbine/services/template/modules/layouts/existing/PageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.layouts.existing;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.layouts.VelocityOnlyLayout;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class PageWithClass
-    extends VelocityOnlyLayout
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/layouts/existing/dflt/Default.java b/src/test/org/apache/turbine/services/template/modules/layouts/existing/dflt/Default.java
deleted file mode 100644
index 4711f8d..0000000
--- a/src/test/org/apache/turbine/services/template/modules/layouts/existing/dflt/Default.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.layouts.existing.dflt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.layouts.VelocityOnlyLayout;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class Default
-    extends VelocityOnlyLayout
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/navigations/ExistPageWithClass.java b/src/test/org/apache/turbine/services/template/modules/navigations/ExistPageWithClass.java
deleted file mode 100644
index 256551c..0000000
--- a/src/test/org/apache/turbine/services/template/modules/navigations/ExistPageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.navigations;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.navigations.VelocityNavigation;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ExistPageWithClass
-    extends VelocityNavigation
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/navigations/existing/PageWithClass.java b/src/test/org/apache/turbine/services/template/modules/navigations/existing/PageWithClass.java
deleted file mode 100644
index c0dc0a9..0000000
--- a/src/test/org/apache/turbine/services/template/modules/navigations/existing/PageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.navigations.existing;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.navigations.VelocityNavigation;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class PageWithClass
-    extends VelocityNavigation
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/navigations/existing/dflt/Default.java b/src/test/org/apache/turbine/services/template/modules/navigations/existing/dflt/Default.java
deleted file mode 100644
index 8aae19f..0000000
--- a/src/test/org/apache/turbine/services/template/modules/navigations/existing/dflt/Default.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.navigations.existing.dflt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.navigations.VelocityNavigation;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class Default
-    extends VelocityNavigation
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/screens/ExistPageWithClass.java b/src/test/org/apache/turbine/services/template/modules/screens/ExistPageWithClass.java
deleted file mode 100644
index 094f1fa..0000000
--- a/src/test/org/apache/turbine/services/template/modules/screens/ExistPageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.screens;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.screens.VelocityScreen;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class ExistPageWithClass
-    extends VelocityScreen
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/screens/existing/PageWithClass.java b/src/test/org/apache/turbine/services/template/modules/screens/existing/PageWithClass.java
deleted file mode 100644
index 6afaa9f..0000000
--- a/src/test/org/apache/turbine/services/template/modules/screens/existing/PageWithClass.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.screens.existing;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.screens.VelocityScreen;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class PageWithClass
-    extends VelocityScreen
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/template/modules/screens/existing/dflt/Default.java b/src/test/org/apache/turbine/services/template/modules/screens/existing/dflt/Default.java
deleted file mode 100644
index bc69500..0000000
--- a/src/test/org/apache/turbine/services/template/modules/screens/existing/dflt/Default.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.apache.turbine.services.template.modules.screens.existing.dflt;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.modules.screens.VelocityScreen;
-
-/**
- * This is a test class for the template service.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class Default
-    extends VelocityScreen
-{
-}
-
diff --git a/src/test/org/apache/turbine/services/velocity/PathConverterTest.java b/src/test/org/apache/turbine/services/velocity/PathConverterTest.java
deleted file mode 100644
index 0616d6c..0000000
--- a/src/test/org/apache/turbine/services/velocity/PathConverterTest.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.apache.turbine.services.velocity;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.collections.ExtendedProperties;
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.TurbineConfig;
-
-/**
- * Tests startup of the Velocity Service and translation of various
- * path patterns.
- *
- * @author <a href="hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @version $Id$
- */
-
-public class PathConverterTest
-    extends BaseTestCase
-{
-    private static TurbineConfig tc = null;
-    private static VelocityService vs = null;
-    private static String fileSeperator = System.getProperty("file.separator");
-
-    public PathConverterTest(String name)
-            throws Exception
-    {
-        super(name);
-        tc = new TurbineConfig(".", "/conf/test/TemplateService.properties");
-        tc.initialize();
-
-        vs = (VelocityService) TurbineServices.getInstance().getService(VelocityService.SERVICE_NAME);
-    }
-
-
-    public void testService()
-        throws Exception
-    {
-
-        // Can we start the service?
-        assertNotNull("Could not load Service!", vs);
-    }
-
-    public void testPathTranslation()
-        throws Exception
-    {
-        Configuration conf = vs.getConfiguration();
-        ExtendedProperties ep = ((TurbineVelocityService) vs).createVelocityProperties(conf);
-
-        String rootPath = Turbine.getRealPath("");
-
-        String [] test1 = ep.getStringArray("test1.resource.loader.path");
-        assertEquals("No Test1 Property found", 1, test1.length);
-        assertEquals("Test1 Path translation failed", rootPath
-                +fileSeperator+"relative"+fileSeperator+"path" , test1[0]);
-
-        String [] test2 = ep.getStringArray("test2.resource.loader.path");
-        assertEquals("No Test2 Property found", 1, test2.length);
-        assertEquals("Test2 Path translation failed", rootPath
-                +fileSeperator+"absolute"+fileSeperator+"path" , test2[0]);
-
-        String [] test3 = ep.getStringArray("test3.resource.loader.path");
-        assertEquals("No Test3 Property found", 1, test2.length);
-        assertEquals("Test3 Path translation failed", rootPath
-                +fileSeperator+"jar-file.jar!/", test3[0]);
-
-        String [] test4 = ep.getStringArray("test4.resource.loader.path");
-        assertEquals("No Test4 Property found", 1, test4.length);
-        assertEquals("Test4 Path translation failed", rootPath
-                +fileSeperator+"jar-file.jar!/with/some/extensions" , test4[0]);
-
-        String [] test5 = ep.getStringArray("test5.resource.loader.path");
-        assertEquals("No Test5 Property found", 1, test5.length);
-        assertEquals("Test5 Path translation failed", rootPath
-                +fileSeperator+"jar-file.jar" , test5[0]);
-
-        String [] test6 = ep.getStringArray("test6.resource.loader.path");
-        assertEquals("No Test6 Property found", 1, test6.length);
-        assertEquals("Test6 Path translation failed", "jar:http://jar.on.website/" , test6[0]);
-
-        String [] test7 = ep.getStringArray("test7.resource.loader.path");
-        assertEquals("No Test7 Property found", 1, test7.length);
-        assertEquals("Test7 Path translation failed", rootPath
-                +fileSeperator+"file"+fileSeperator
-                +"system"+fileSeperator+"reference" , test7[0]);
-
-        String [] test8 = ep.getStringArray("test8.resource.loader.path");
-        assertEquals("No Test8 Property found", 1, test8.length);
-        assertEquals("Test8 Path translation failed", "http://reference.on.website/" , test8[0]);
-
-    }
-}
diff --git a/src/test/org/apache/turbine/test/BaseTestCase.java b/src/test/org/apache/turbine/test/BaseTestCase.java
deleted file mode 100644
index c54d711..0000000
--- a/src/test/org/apache/turbine/test/BaseTestCase.java
+++ /dev/null
@@ -1,148 +0,0 @@
-package org.apache.turbine.test;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.util.Properties;
-import java.util.Vector;
-
-import javax.servlet.ServletConfig;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import junit.framework.TestCase;
-
-import org.apache.log4j.PropertyConfigurator;
-import org.apache.turbine.Turbine;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.pipeline.PipelineData;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.services.rundata.RunDataService;
-import org.apache.turbine.util.RunData;
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-
-/**
- * Base functionality to be extended by all Apache Turbine test cases.  Test
- * case implementations are used to automate testing via JUnit.
- *
- * @author <a href="mailto:celkins@scardini.com">Christopher Elkins</a>
- * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
- * @author <a href="mailto:peter@courcoux.biz">Peter Courcoux</a>
- * @version $Id$
- */
-public abstract class BaseTestCase
-        extends TestCase
-{
-    File log4jFile = new File("conf/test/Log4j.properties");
-
-    public BaseTestCase(String name)
-            throws Exception
-    {
-        super(name);
-
-        Properties p = new Properties();
-        try
-        {
-            p.load(new FileInputStream(log4jFile));
-            p.setProperty(Turbine.APPLICATION_ROOT_KEY, new File(".").getAbsolutePath());
-            PropertyConfigurator.configure(p);
-
-        }
-        catch (FileNotFoundException fnf)
-        {
-            System.err.println("Could not open Log4J configuration file "
-                    + log4jFile);
-        }
-
-
-    }
-    
-    protected RunData getRunData(HttpServletRequest request,HttpServletResponse response,ServletConfig config) throws Exception {
-        RunDataService rds =
-            (RunDataService) TurbineServices.getInstance().getService(
-                    RunDataService.SERVICE_NAME);
-        RunData runData = rds.getRunData(request, response, config);        
-        return runData;
-    }
-    protected PipelineData getPipelineData(HttpServletRequest request,HttpServletResponse response,ServletConfig config) throws Exception {
-       RunData runData = getRunData(request,response,config);
-       return runData;
-    }
-    
-    
-    protected MockHttpServletRequest getMockRequest(){
-        EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest();
-        EnhancedMockHttpSession session = new EnhancedMockHttpSession();
-        session.setupGetAttribute(User.SESSION_KEY, null);
-        request.setupServerName("bob");
-        request.setupGetProtocol("http");
-        request.setupScheme("scheme");
-        request.setupPathInfo("damn");
-        request.setupGetServletPath("damn2");
-        request.setupGetContextPath("wow");
-        request.setupGetContentType("html/text");
-        request.setupAddHeader("Content-type", "html/text");
-        request.setupAddHeader("Accept-Language", "en-US");  
-        Vector v = new Vector();
-        request.setupGetParameterNames(v.elements());
-        request.setSession(session);
-        return request;
-    
-    }
-}
-
diff --git a/src/test/org/apache/turbine/test/EnhancedMockHttpServletRequest.java b/src/test/org/apache/turbine/test/EnhancedMockHttpServletRequest.java
deleted file mode 100644
index 14e199a..0000000
--- a/src/test/org/apache/turbine/test/EnhancedMockHttpServletRequest.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.apache.turbine.test;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import com.mockobjects.servlet.MockHttpServletRequest;
-
-/**
- * Extension to the basic MockHttpServletRequest to provide some extra parameters
- * required by Turbine.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class EnhancedMockHttpServletRequest extends MockHttpServletRequest
-{
-    /**
-     *
-     */
-    public EnhancedMockHttpServletRequest()
-    {
-        super();
-        // TODO Auto-generated constructor stub
-    }
-    public int getServerPort(){
-      return 8080;
-    }
-
-    public String getCharacterEncoding(){
-    return "US-ASCII";
-    }
-
-}
diff --git a/src/test/org/apache/turbine/test/EnhancedMockHttpServletResponse.java b/src/test/org/apache/turbine/test/EnhancedMockHttpServletResponse.java
deleted file mode 100644
index 0ebdc05..0000000
--- a/src/test/org/apache/turbine/test/EnhancedMockHttpServletResponse.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.apache.turbine.test;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.Locale;
-
-import com.mockobjects.servlet.MockHttpServletResponse;
-
-/**
- * Extension to the basic MockHttpServletResponse to provide some extra parameters
- * required by Turbine like setting of Locale
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class EnhancedMockHttpServletResponse extends MockHttpServletResponse
-{
-
-    public void setLocale(Locale locale){
-        // eat the locale.
-    }
-
-}
diff --git a/src/test/org/apache/turbine/test/EnhancedMockHttpSession.java b/src/test/org/apache/turbine/test/EnhancedMockHttpSession.java
deleted file mode 100644
index e36e0c1..0000000
--- a/src/test/org/apache/turbine/test/EnhancedMockHttpSession.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package org.apache.turbine.test;
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-2002 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-import com.mockobjects.servlet.MockHttpSession;
-/**
- * Extension to the basic MockHttpSession to provide some extra parameters
- * required by Turbine.
- *
- * @author <a href="mailto:epugh@upstate.com">Eric Pugh</a>
- * @version $Id$
- */
-public class EnhancedMockHttpSession extends MockHttpSession
-{
-    private boolean isNew = true;
-    private int maxInactiveInterval =0;
-    
-    /**
-     *
-     */
-    public EnhancedMockHttpSession()
-    {
-        super();
-    }
-    /**
-     * The default MockHttpSession doesn't implement this method.  It always
-     * returns true.
-     */
-    public boolean isNew()
-    {
-        return isNew;
-    }
-    
-    public void setMaxInactiveInterval(int maxInactiveInterval){
-        this.maxInactiveInterval =maxInactiveInterval;
-    }
-    
-    public int getMaxInactiveInterval(){
-        return maxInactiveInterval;
-    }
-    
-    /**
-     * The underlying mock objects throws an Assert failure if we don't have
-     * an attribute.  However, in Turbine, getting a null is okay, it just 
-     * means we haven't put the object in yet!
-     */
-    public Object getAttribute(String attributeName)
-    {
-        try
-        {
-            return super.getAttribute(attributeName);
-        }
-        catch (junit.framework.AssertionFailedError afe)
-        {
-            return null;
-        }
-    }
-}
diff --git a/src/test/org/apache/turbine/test/MockSecurityService.java b/src/test/org/apache/turbine/test/MockSecurityService.java
deleted file mode 100644
index a192ad2..0000000
--- a/src/test/org/apache/turbine/test/MockSecurityService.java
+++ /dev/null
@@ -1,1178 +0,0 @@
-package org.apache.turbine.test;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Vector;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.torque.om.BaseObject;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.Group;
-import org.apache.turbine.om.security.Permission;
-import org.apache.turbine.om.security.Role;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.om.security.peer.GroupPeer;
-import org.apache.turbine.om.security.peer.PermissionPeer;
-import org.apache.turbine.om.security.peer.RolePeer;
-import org.apache.turbine.om.security.peer.RolePermissionPeer;
-import org.apache.turbine.om.security.peer.UserGroupRolePeer;
-import org.apache.turbine.om.security.peer.UserPeer;
-import org.apache.turbine.services.security.BaseSecurityService;
-import org.apache.turbine.services.security.TurbineSecurity;
-import org.apache.turbine.util.security.AccessControlList;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.GroupSet;
-import org.apache.turbine.util.security.PermissionSet;
-import org.apache.turbine.util.security.RoleSet;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * An Mock implementation of SecurityService.  Basically replacing existing
- * database methods as needed for a test case.
- *
- * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh</a>
- * @version $Id$
- */
-public class MockSecurityService extends BaseSecurityService
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(MockSecurityService.class);
-
-    /**
-     * The key within services's properties for user implementation
-     * classname (user.class)  - Leandro
-     */
-    public static final String USER_PEER_CLASS_KEY = "userPeer.class";
-
-    /**
-     * The default implementation of User interface
-     * (org.apache.turbine.om.security.DBUser)
-     */
-    public static final String USER_PEER_CLASS_DEFAULT =
-        "org.apache.turbine.om.security.peer.TurbineUserPeer";
-
-    /*-----------------------------------------------------------------------
-      Creation of AccessControlLists
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Constructs an AccessControlList for a specific user.
-     *
-     * This method creates a snapshot of the state of security information
-     * concerning this user, at the moment of invocation and stores it
-     * into an AccessControlList object.
-     *
-     * @param user the user for whom the AccessControlList are to be retrieved
-     * @return A new AccessControlList object.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account is not present.
-     */
-    public AccessControlList getACL(User user)
-        throws DataBackendException, UnknownEntityException
-    {
-        return getAclInstance(new HashMap(), new HashMap());
-    }
-
-    /*-----------------------------------------------------------------------
-      Security management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Grant an User a Role in a Group.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void grant(User user, Group group, Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    UserGroupRolePeer.USER_ID,
-                    ((BaseObject) user).getPrimaryKey());
-                criteria.add(
-                    UserGroupRolePeer.GROUP_ID,
-                    ((BaseObject) group).getPrimaryKey());
-                criteria.add(
-                    UserGroupRolePeer.ROLE_ID,
-                    ((BaseObject) role).getPrimaryKey());
-                UserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(User,Group,Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown user '" + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown group '" + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown role '" + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revoke a Role in a Group from an User.
-     *
-     * @param user the user.
-     * @param group the group.
-     * @param role the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if user account, group or role is not
-     *         present.
-     */
-    public synchronized void revoke(User user, Group group, Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        boolean groupExists = false;
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            groupExists = checkExists(group);
-            roleExists = checkExists(role);
-            if (userExists && groupExists && roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    UserGroupRolePeer.USER_ID,
-                    ((BaseObject) user).getPrimaryKey());
-                criteria.add(
-                    UserGroupRolePeer.GROUP_ID,
-                    ((BaseObject) group).getPrimaryKey());
-                criteria.add(
-                    UserGroupRolePeer.ROLE_ID,
-                    ((BaseObject) role).getPrimaryKey());
-                UserGroupRolePeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(User,Role,Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!userExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown user '" + user.getName() + "'");
-        }
-        if (!groupExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown group '" + group.getName() + "'");
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown role '" + role.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all roles from an User.
-     *
-     * This method is used when deleting an account.
-     *
-     * @param user the User.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the account is not present.
-     */
-    public synchronized void revokeAll(User user)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean userExists = false;
-        try
-        {
-            lockExclusive();
-            userExists = TurbineSecurity.accountExists(user);
-            if (userExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    UserGroupRolePeer.USER_ID,
-                    ((BaseObject) user).getPrimaryKey());
-                UserGroupRolePeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(User) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException(
-            "Unknown user '" + user.getName() + "'");
-    }
-
-    /**
-     * Grants a Role a Permission
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void grant(Role role, Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    RolePermissionPeer.ROLE_ID,
-                    ((BaseObject) role).getPrimaryKey());
-                criteria.add(
-                    RolePermissionPeer.PERMISSION_ID,
-                    ((BaseObject) permission).getPrimaryKey());
-                UserGroupRolePeer.doInsert(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("grant(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown role '" + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown permission '" + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes a Permission from a Role.
-     *
-     * @param role the Role.
-     * @param permission the Permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if role or permission is not present.
-     */
-    public synchronized void revoke(Role role, Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            permissionExists = checkExists(permission);
-            if (roleExists && permissionExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    RolePermissionPeer.ROLE_ID,
-                    ((BaseObject) role).getPrimaryKey());
-                criteria.add(
-                    RolePermissionPeer.PERMISSION_ID,
-                    ((BaseObject) permission).getPrimaryKey());
-                RolePermissionPeer.doDelete(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revoke(Role,Permission) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        if (!roleExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown role '" + role.getName() + "'");
-        }
-        if (!permissionExists)
-        {
-            throw new UnknownEntityException(
-                "Unknown permission '" + permission.getName() + "'");
-        }
-    }
-
-    /**
-     * Revokes all permissions from a Role.
-     *
-     * This method is user when deleting a Role.
-     *
-     * @param role the Role
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the Role is not present.
-     */
-    public synchronized void revokeAll(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                Criteria criteria = new Criteria();
-                criteria.add(
-                    RolePermissionPeer.ROLE_ID,
-                    ((BaseObject) role).getPrimaryKey());
-                RolePermissionPeer.doDelete(criteria);
-
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("revokeAll(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException(
-            "Unknown role '" + role.getName() + "'");
-    }
-
-    /*-----------------------------------------------------------------------
-      Group/Role/Permission management
-      -----------------------------------------------------------------------*/
-
-    /**
-     * Retrieve a set of Groups that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Group selection.
-     * @return a set of Groups that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public GroupSet getGroups(Criteria criteria) throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(GroupPeer.getColumnName(key), criteria.get(key));
-        }
-        List groups = new ArrayList(0);
-        try
-        {
-            groups = GroupPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getGroups(Criteria) failed", e);
-        }
-        return new GroupSet(groups);
-    }
-
-    /**
-     * Retrieve a set of Roles that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Roles selection.
-     * @return a set of Roles that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public RoleSet getRoles(Criteria criteria) throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(RolePeer.getColumnName(key), criteria.get(key));
-        }
-        List roles = new ArrayList(0);
-        try
-        {
-            roles = RolePeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getRoles(Criteria) failed", e);
-        }
-        return new RoleSet(roles);
-    }
-
-    /**
-     * Retrieve a set of Permissions that meet the specified Criteria.
-     *
-     * @param criteria A Criteria of Permissions selection.
-     * @return a set of Permissions that meet the specified Criteria.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     */
-    public PermissionSet getPermissions(Criteria criteria)
-        throws DataBackendException
-    {
-        Criteria dbCriteria = new Criteria();
-        Iterator keys = criteria.keySet().iterator();
-        while (keys.hasNext())
-        {
-            String key = (String) keys.next();
-            dbCriteria.put(
-                PermissionPeer.getColumnName(key),
-                criteria.get(key));
-        }
-        List permissions = new Vector(0);
-        try
-        {
-            permissions = PermissionPeer.doSelect(criteria);
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "getPermissions(Criteria) failed",
-                e);
-        }
-        return new PermissionSet(permissions);
-    }
-
-    /**
-     * Retrieves all permissions associated with a role.
-     *
-     * @param role the role name, for which the permissions are to be retrieved.
-     * @return A Permission set for the Role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role is not present.
-     */
-    public PermissionSet getPermissions(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockShared();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                return PermissionPeer.retrieveSet(role);
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("getPermissions(Role) failed", e);
-        }
-        finally
-        {
-            unlockShared();
-        }
-        throw new UnknownEntityException(
-            "Unknown role '" + role.getName() + "'");
-    }
-
-    /**
-     * Stores Group's attributes. The Groups is required to exist in the system.
-     *
-     * @param group The Group to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public void saveGroup(Group group)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveGroup(Group) failed", e);
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Stores Role's attributes. The Roles is required to exist in the system.
-     *
-     * @param role The Role to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public void saveRole(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("saveRole(Role) failed", e);
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Stores Permission's attributes. The Permissions is required to exist in
-     * the system.
-     *
-     * @param permission The Permission to be stored.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public void savePermission(Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "savePermission(Permission) failed",
-                e);
-        }
-        throw new UnknownEntityException(
-            "Unknown permission '" + permission + "'");
-    }
-
-    /**
-     * Creates a new group with specified attributes.
-     *
-     * @param group the object describing the group to be created.
-     * @return a new Group object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the group already exists.
-     */
-    public synchronized Group addGroup(Group group)
-        throws DataBackendException, EntityExistsException
-    {
-        boolean groupExists = false;
-
-        if (StringUtils.isEmpty(group.getName()))
-        {
-            throw new DataBackendException(
-                "Could not create " + "a group with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (!groupExists)
-            {
-                // add a row to the table
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(GroupPeer.NAME, group.getName());
-                List results = GroupPeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                            + results.size()
-                            + " rows");
-                }
-                Group newGroup = (Group) results.get(0);
-                // add the group to system-wide cache
-                getAllGroups().add(newGroup);
-                // return the object with correct id
-                return newGroup;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the groupExists was true.
-        throw new EntityExistsException("Group '" + group + "' already exists");
-    }
-
-    /**
-     * Creates a new role with specified attributes.
-     *
-     * @param role the object describing the role to be created.
-     * @return a new Role object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the role already exists.
-     */
-    public synchronized Role addRole(Role role)
-        throws DataBackendException, EntityExistsException
-    {
-        boolean roleExists = false;
-
-        if (StringUtils.isEmpty(role.getName()))
-        {
-            throw new DataBackendException(
-                "Could not create " + "a role with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (!roleExists)
-            {
-                // add a row to the table
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(RolePeer.NAME, role.getName());
-                List results = RolePeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                            + results.size()
-                            + " rows");
-                }
-                Role newRole = (Role) results.get(0);
-                // add the role to system-wide cache
-                getAllRoles().add(newRole);
-                // return the object with correct id
-                return newRole;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("addRole(Role) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the roleExists was true.
-        throw new EntityExistsException("Role '" + role + "' already exists");
-    }
-
-    /**
-     * Creates a new permission with specified attributes.
-     *
-     * @param permission the object describing the permission to be created.
-     * @return a new Permission object that has id set up properly.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws EntityExistsException if the permission already exists.
-     */
-    public synchronized Permission addPermission(Permission permission)
-        throws DataBackendException, EntityExistsException
-    {
-        boolean permissionExists = false;
-
-        if (StringUtils.isEmpty(permission.getName()))
-        {
-            throw new DataBackendException(
-                "Could not create " + "a permission with empty name!");
-        }
-
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (!permissionExists)
-            {
-                // add a row to the table
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doInsert(criteria);
-                // try to get the object back using the name as key.
-                criteria = new Criteria();
-                criteria.add(PermissionPeer.NAME, permission.getName());
-                List results = PermissionPeer.doSelect(criteria);
-                if (results.size() != 1)
-                {
-                    throw new DataBackendException(
-                        "Internal error - query returned "
-                            + results.size()
-                            + " rows");
-                }
-                Permission newPermission = (Permission) results.get(0);
-                // add the permission to system-wide cache
-                getAllPermissions().add(newPermission);
-                // return the object with correct id
-                return newPermission;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "addPermission(Permission) failed",
-                e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        // the only way we could get here without return/throw tirggered
-        // is that the permissionExists was true.
-        throw new EntityExistsException(
-            "Permission '" + permission + "' already exists");
-    }
-
-    /**
-     * Removes a Group from the system.
-     *
-     * @param group The object describing the group to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void removeGroup(Group group)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doDelete(criteria);
-                getAllGroups().remove(group);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            log.error("Failed to delete a Group");
-            log.error(e);
-            throw new DataBackendException("removeGroup(Group) failed", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Removes a Role from the system.
-     *
-     * @param role The object describing the role to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void removeRole(Role role)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                // revoke all permissions from the role to be deleted
-                revokeAll(role);
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doDelete(criteria);
-                getAllRoles().remove(role);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removeRole(Role)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Removes a Permission from the system.
-     *
-     * @param permission The object describing the permission to be removed.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void removePermission(Permission permission)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doDelete(criteria);
-                getAllPermissions().remove(permission);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("removePermission(Permission)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException(
-            "Unknown permission '" + permission + "'");
-    }
-
-    /**
-     * Renames an existing Group.
-     *
-     * @param group The object describing the group to be renamed.
-     * @param name the new name for the group.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the group does not exist.
-     */
-    public synchronized void renameGroup(Group group, String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean groupExists = false;
-        try
-        {
-            lockExclusive();
-            groupExists = checkExists(group);
-            if (groupExists)
-            {
-                group.setName(name);
-                Criteria criteria = GroupPeer.buildCriteria(group);
-                GroupPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameGroup(Group,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown group '" + group + "'");
-    }
-
-    /**
-     * Renames an existing Role.
-     *
-     * @param role The object describing the role to be renamed.
-     * @param name the new name for the role.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the role does not exist.
-     */
-    public synchronized void renameRole(Role role, String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean roleExists = false;
-        try
-        {
-            lockExclusive();
-            roleExists = checkExists(role);
-            if (roleExists)
-            {
-                role.setName(name);
-                Criteria criteria = RolePeer.buildCriteria(role);
-                RolePeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException("renameRole(Role,String)", e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException("Unknown role '" + role + "'");
-    }
-
-    /**
-     * Renames an existing Permission.
-     *
-     * @param permission The object describing the permission to be renamed.
-     * @param name the new name for the permission.
-     * @throws DataBackendException if there was an error accessing the data
-     *         backend.
-     * @throws UnknownEntityException if the permission does not exist.
-     */
-    public synchronized void renamePermission(
-        Permission permission,
-        String name)
-        throws DataBackendException, UnknownEntityException
-    {
-        boolean permissionExists = false;
-        try
-        {
-            lockExclusive();
-            permissionExists = checkExists(permission);
-            if (permissionExists)
-            {
-                permission.setName(name);
-                Criteria criteria = PermissionPeer.buildCriteria(permission);
-                PermissionPeer.doUpdate(criteria);
-                return;
-            }
-        }
-        catch (Exception e)
-        {
-            throw new DataBackendException(
-                "renamePermission(Permission,name)",
-                e);
-        }
-        finally
-        {
-            unlockExclusive();
-        }
-        throw new UnknownEntityException(
-            "Unknown permission '" + permission + "'");
-    }
-
-    /* Service specific implementation methods */
-
-    /**
-     * Returns the Class object for the implementation of UserPeer interface
-     * used by the system (defined in TR.properties)
-     *
-     * @return the implementation of UserPeer interface used by the system.
-     * @throws UnknownEntityException if the system's implementation of UserPeer
-     *         interface could not be determined.
-     */
-    public Class getUserPeerClass() throws UnknownEntityException
-    {
-        String userPeerClassName =
-            getConfiguration().getString(
-                USER_PEER_CLASS_KEY,
-                USER_PEER_CLASS_DEFAULT);
-        try
-        {
-            return Class.forName(userPeerClassName);
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                "Failed create a Class object for UserPeer implementation",
-                e);
-        }
-    }
-
-    /**
-     * Construct a UserPeer object.
-     *
-     * This method calls getUserPeerClass, and then creates a new object using
-     * the default constructor.
-     *
-     * @return an object implementing UserPeer interface.
-     * @throws UnknownEntityException if the object could not be instantiated.
-     */
-    public UserPeer getUserPeerInstance() throws UnknownEntityException
-    {
-        UserPeer up;
-        try
-        {
-            up = (UserPeer) getUserPeerClass().newInstance();
-        }
-        catch (Exception e)
-        {
-            throw new UnknownEntityException(
-                "Failed instantiate an UserPeer implementation object",
-                e);
-        }
-        return up;
-    }
-
-    /**
-     * Determines if the <code>Group</code> exists in the security system.
-     *
-     * @param group a <code>Group</code> value
-     * @return true if the group exists in the system, false otherwise
-     * @throws DataBackendException when more than one Group with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Group group)
-        throws DataBackendException, Exception
-    {
-        return GroupPeer.checkExists(group);
-    }
-
-    /**
-     * Determines if the <code>Role</code> exists in the security system.
-     *
-     * @param role a <code>Role</code> value
-     * @return true if the role exists in the system, false otherwise
-     * @throws DataBackendException when more than one Role with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Role role)
-        throws DataBackendException, Exception
-    {
-        return RolePeer.checkExists(role);
-    }
-
-    /**
-     * Determines if the <code>Permission</code> exists in the security system.
-     *
-     * @param permission a <code>Permission</code> value
-     * @return true if the permission exists in the system, false otherwise
-     * @throws DataBackendException when more than one Permission with
-     *         the same name exists.
-     * @throws Exception A generic exception.
-     */
-    protected boolean checkExists(Permission permission)
-        throws DataBackendException, Exception
-    {
-        return PermissionPeer.checkExists(permission);
-    }
-
-}
diff --git a/src/test/org/apache/turbine/test/MockUserManager.java b/src/test/org/apache/turbine/test/MockUserManager.java
deleted file mode 100644
index 284a71e..0000000
--- a/src/test/org/apache/turbine/test/MockUserManager.java
+++ /dev/null
@@ -1,327 +0,0 @@
-package org.apache.turbine.test;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.util.List;
-
-import org.apache.commons.configuration.Configuration;
-
-import org.apache.torque.util.Criteria;
-
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.turbine.om.security.User;
-import org.apache.turbine.services.security.UserManager;
-import org.apache.turbine.util.security.DataBackendException;
-import org.apache.turbine.util.security.EntityExistsException;
-import org.apache.turbine.util.security.PasswordMismatchException;
-import org.apache.turbine.util.security.UnknownEntityException;
-
-/**
- * This Mock object is used in testing. 
- *
- * @author <a href="mailto:epugh@opensourceconnections.com">Eric Pugh</a>
- * @version $Id$
- */
-public class MockUserManager implements UserManager
-{
-    /**
-     * Initializes the UserManager
-     *
-     * @param conf A Configuration object to init this Manager
-     */
-    public void init(Configuration conf)
-    {
-        // GNDN
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param user The user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data backend.
-     */
-    public boolean accountExists(User user)
-            throws DataBackendException
-    {
-        return true;
-    }
-
-    /**
-     * Check whether a specified user's account exists.
-     *
-     * The login name is used for looking up the account.
-     *
-     * @param userName The name of the user to be checked.
-     * @return true if the specified account exists
-     * @throws DataBackendException if there was an error accessing the data backend.
-     */
-    public boolean accountExists(String userName)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key.
-     *
-     * @param username the name of the user.
-     * @return an User object.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String username)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     * @deprecated Use <a href="#retrieveList">retrieveList</a> instead.
-     */
-    public User[] retrieve(Criteria criteria)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a set of users that meet the specified criteria.
-     *
-     * As the keys for the criteria, you should use the constants that
-     * are defined in {@link User} interface, plus the names
-     * of the custom attributes you added to your user representation
-     * in the data storage. Use verbatim names of the attributes -
-     * without table name prefix in case of DB implementation.
-     *
-     * @param criteria The criteria of selection.
-     * @return a List of users meeting the criteria.
-     * @throws DataBackendException if there is a problem accessing the
-     *         storage.
-     */
-    public List retrieveList(Criteria criteria)
-            throws DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Retrieve a user from persistent storage using username as the
-     * key, and authenticate the user. The implementation may chose
-     * to authenticate to the server as the user whose data is being
-     * retrieved.
-     *
-     * @param username the name of the user.
-     * @param password the user supplied password.
-     * @return an User object.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public User retrieve(String username, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        TurbineUser tu = new TurbineUser();
-        tu.setName(username);
-        return tu;
-    }
-
-    /**
-     * Save an User object to persistent storage. User's record is
-     * required to exist in the storage.
-     *
-     * @param user an User object to store.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void store(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support saving user data");
-    }
-
-    /**
-     * Saves User data when the session is unbound. The user account is required
-     * to exist in the storage.
-     *
-     * LastLogin, AccessCounter, persistent pull tools, and any data stored
-     * in the permData hashtable that is not mapped to a column will be saved.
-     *
-     * @exception UnknownEntityException if the user's account does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void saveOnSessionUnbind(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support saving user data");
-    }
-
-    /**
-     * Authenticate an User with the specified password. If authentication
-     * is successful the method returns nothing. If there are any problems,
-     * exception was thrown.
-     *
-     * @param user an User object to authenticate.
-     * @param password the user supplied password.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void authenticate(User user, String password)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager knows no users");
-    }
-
-    /**
-     * Creates new user account with specified attributes.
-     *
-     * @param user the object describing account to be created.
-     * @param initialPassword The password to use for the object creation
-     *
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws EntityExistsException if the user account already exists.
-     */
-    public void createAccount(User user, String initialPassword)
-            throws EntityExistsException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support"
-                + " creating accounts");
-    }
-
-    /**
-     * Removes an user account from the system.
-     *
-     * @param user the object describing the account to be removed.
-     * @throws DataBackendException if there was an error accessing the data backend.
-     * @throws UnknownEntityException if the user account is not present.
-     */
-    public void removeAccount(User user)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support removing accounts");
-    }
-
-    /**
-     * Change the password for an User.
-     *
-     * @param user an User to change password for.
-     * @param oldPassword the current password supplied by the user.
-     * @param newPassword the current password requested by the user.
-     * @exception PasswordMismatchException if the supplied password was
-     *            incorrect.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void changePassword(User user, String oldPassword,
-                               String newPassword)
-            throws PasswordMismatchException, UnknownEntityException,
-            DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support setting passwords");
-    }
-
-    /**
-     * Forcibly sets new password for an User.
-     *
-     * This is supposed by the administrator to change the forgotten or
-     * compromised passwords. Certain implementatations of this feature
-     * would require administrative level access to the authenticating
-     * server / program.
-     *
-     * @param user an User to change password for.
-     * @param password the new password.
-     * @exception UnknownEntityException if the user's record does not
-     *            exist in the database.
-     * @exception DataBackendException if there is a problem accessing the
-     *            storage.
-     */
-    public void forcePassword(User user, String password)
-            throws UnknownEntityException, DataBackendException
-    {
-        throw new DataBackendException("PassiveUserManager does not support setting passwords");
-    }
-}
diff --git a/src/test/org/apache/turbine/test/TestComponent.java b/src/test/org/apache/turbine/test/TestComponent.java
deleted file mode 100644
index 4655a02..0000000
--- a/src/test/org/apache/turbine/test/TestComponent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.apache.turbine.test;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.avalon.framework.component.Component;
-
-/**
- * This is a simple component that is only used to test the avalon component
- * service.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public interface TestComponent
-        extends Component
-{
-
-    static final String ROLE = "org.apache.turbine.test.TestComponent";
-
-    void test();
-}
diff --git a/src/test/org/apache/turbine/test/TestComponentImpl.java b/src/test/org/apache/turbine/test/TestComponentImpl.java
deleted file mode 100644
index f8b885b..0000000
--- a/src/test/org/apache/turbine/test/TestComponentImpl.java
+++ /dev/null
@@ -1,95 +0,0 @@
-package org.apache.turbine.test;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.avalon.framework.logger.AbstractLogEnabled;
-import org.apache.avalon.framework.activity.Initializable;
-import org.apache.avalon.framework.activity.Disposable;
-import org.apache.avalon.framework.context.Contextualizable;
-import org.apache.avalon.framework.context.Context;
-import org.apache.avalon.framework.context.ContextException;
-
-/**
- * Implementation of the test component.
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TestComponentImpl
-        extends AbstractLogEnabled
-        implements Initializable, Disposable, TestComponent, Contextualizable
-{
-    private String appRoot;
-
-    public void initialize() throws Exception
-    {
-    }
-
-    public void dispose()
-    {
-    }
-
-    public void test()
-    {
-        setupLogger(this, "TestComponent");
-        getLogger().debug("test");
-        getLogger().debug("componentAppRoot = "+appRoot);
-    }
-
-    public void contextualize(Context context) throws ContextException
-    {
-        appRoot = (String) context.get("componentAppRoot");
-    }
-}
diff --git a/src/test/org/apache/turbine/util/BaseValueParserTest.java b/src/test/org/apache/turbine/util/BaseValueParserTest.java
deleted file mode 100644
index ff86624..0000000
--- a/src/test/org/apache/turbine/util/BaseValueParserTest.java
+++ /dev/null
@@ -1,671 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import java.math.BigDecimal;
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.parser.BaseValueParser;
-import org.apache.turbine.util.parser.ParserUtils;
-
-/**
- * Testing of the BaseValueParser class
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class BaseValueParserTest extends BaseTestCase
-{
-    private BaseValueParser parser;
-
-    /**
-     * Constructor for test.
-     *
-     * @param testName name of the test being executed
-     */
-    public BaseValueParserTest(String testName)
-            throws Exception
-    {
-        super(testName);
-
-        // Setup configuration
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.setApplicationRoot(".");
-        Configuration cfg = new BaseConfiguration();
-        cfg.setProperty(ParserUtils.URL_CASE_FOLDING_KEY,
-                ParserUtils.URL_CASE_FOLDING_LOWER_VALUE );
-        serviceManager.setConfiguration(cfg);
-
-    }
-
-    /**
-     * Performs any initialization that must happen before each test is run.
-     */
-    protected void setUp()
-    {
-        parser = new BaseValueParser();
-    }
-
-    /**
-     * Clean up after each test is run.
-     */
-    protected void tearDown()
-    {
-        parser = null;
-    }
-
-    public void testGetByte()
-    {
-        // no param
-        byte result = parser.getByte("invalid");
-        assertEquals(result, 0);
-
-        // default
-        result = parser.getByte("default", (byte)3);
-        assertEquals(result, 3);
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getByte("exists");
-        assertEquals(result, 1);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getByte("unparsable");
-        assertEquals(result, 0);
-    }
-
-    public void testGetByteObject()
-    {
-        // no param
-        Byte result = parser.getByteObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getByteObject("default", new Byte((byte)3));
-        assertEquals(result, new Byte((byte)3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getByteObject("exists");
-        assertEquals(result, new Byte((byte)1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getByteObject("unparsable");
-        assertNull(result);
-    }
-
-    public void testGetInt()
-    {
-        // no param
-        int result = parser.getInt("invalid");
-        assertEquals(result, 0);
-
-        // default
-        result = parser.getInt("default", 3);
-        assertEquals(result, 3);
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getInt("exists");
-        assertEquals(result, 1);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getInt("unparsable");
-        assertEquals(result, 0);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        int arrayResult[] = parser.getInts("array");
-        int compare[] = {1,2,3};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        int arrayResult2[] = parser.getInts("array2");
-        int compare2[] = {1,0,3};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-    public void testGetIntObject()
-    {
-        // no param
-        Integer result = parser.getIntObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getIntObject("default", new Integer(3));
-        assertEquals(result, new Integer(3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getIntObject("exists");
-        assertEquals(result, new Integer(1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getIntObject("unparsable");
-        assertNull(result);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        Integer arrayResult[] = parser.getIntObjects("array");
-        Integer compare[] = {new Integer(1), new Integer(2), new Integer(3)};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        Integer arrayResult2[] = parser.getIntObjects("array2");
-        Integer compare2[] = {new Integer(1), null, new Integer(3)};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-    public void testGetFloat()
-    {
-        // no param
-        float result = parser.getFloat("invalid");
-        assertEquals(result, 0, 0);
-
-        // default
-        result = parser.getFloat("default", 3);
-        assertEquals(result, 3, 0);
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getFloat("exists");
-        assertEquals(result, 1, 0);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getFloat("unparsable");
-        assertEquals(result, 0, 0);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        float arrayResult[] = parser.getFloats("array");
-        float compare[] = {1,2,3};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i], 0);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        float arrayResult2[] = parser.getFloats("array2");
-        float compare2[] = {1,0,3};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i], 0);
-        }
-    }
-
-    public void testGetFloatObject()
-    {
-        // no param
-        Float result = parser.getFloatObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getFloatObject("default", new Float(3));
-        assertEquals(result, new Float(3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getFloatObject("exists");
-        assertEquals(result, new Float(1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getFloatObject("unparsable");
-        assertNull(result);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        Float arrayResult[] = parser.getFloatObjects("array");
-        Float compare[] = {new Float(1), new Float(2), new Float(3)};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        Float arrayResult2[] = parser.getFloatObjects("array2");
-        Float compare2[] = {new Float(1), null, new Float(3)};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-    public void testGetDouble()
-    {
-        // no param
-        double result = parser.getDouble("invalid");
-        assertEquals(result, 0, 0);
-
-        // default
-        result = parser.getDouble("default", 3);
-        assertEquals(result, 3, 0);
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getDouble("exists");
-        assertEquals(result, 1, 0);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getDouble("unparsable");
-        assertEquals(result, 0, 0);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        double arrayResult[] = parser.getDoubles("array");
-        double compare[] = {1,2,3};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i], 0);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        double arrayResult2[] = parser.getDoubles("array2");
-        double compare2[] = {1,0,3};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i], 0);
-        }
-    }
-
-    public void testGetDoubleObject()
-    {
-        // no param
-        Double result = parser.getDoubleObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getDoubleObject("default", new Double(3));
-        assertEquals(result, new Double(3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getDoubleObject("exists");
-        assertEquals(result, new Double(1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getDoubleObject("unparsable");
-        assertNull(result);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        Double arrayResult[] = parser.getDoubleObjects("array");
-        Double compare[] = {new Double(1), new Double(2), new Double(3)};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        Double arrayResult2[] = parser.getDoubleObjects("array2");
-        Double compare2[] = {new Double(1), null, new Double(3)};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-    public void testGetLong()
-    {
-        // no param
-        long result = parser.getLong("invalid");
-        assertEquals(result, 0);
-
-        // default
-        result = parser.getLong("default", 3);
-        assertEquals(result, 3);
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getLong("exists");
-        assertEquals(result, 1);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getLong("unparsable");
-        assertEquals(result, 0);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        long arrayResult[] = parser.getLongs("array");
-        long compare[] = {1,2,3};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        long arrayResult2[] = parser.getLongs("array2");
-        long compare2[] = {1,0,3};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i]);
-        }
-    }
-
-    public void testGetLongObject()
-    {
-        // no param
-        Long result = parser.getLongObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getLongObject("default", new Long(3));
-        assertEquals(result, new Long(3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getLongObject("exists");
-        assertEquals(result, new Long(1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getLongObject("unparsable");
-        assertNull(result);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        Long arrayResult[] = parser.getLongObjects("array");
-        Long compare[] = {new Long(1), new Long(2), new Long(3)};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        Long arrayResult2[] = parser.getLongObjects("array2");
-        Long compare2[] = {new Long(1), null, new Long(3)};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-    public void testGetBoolean()
-    {
-        // no param
-        boolean result = parser.getBoolean("invalid");
-        assertEquals(result, false);
-
-        // default
-        result = parser.getBoolean("default", true);
-        assertEquals(result, true);
-
-        // true values - Case is intentional
-        parser.add("true1", "trUe");
-        result = parser.getBoolean("true1");
-        assertEquals(result, true);
-        parser.add("true2", "yEs");
-        result = parser.getBoolean("true2");
-        assertEquals(result, true);
-        parser.add("true3", "1");
-        result = parser.getBoolean("true3");
-        assertEquals(result, true);
-        parser.add("true4", "oN");
-        result = parser.getBoolean("true4");
-        assertEquals(result, true);
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getBoolean("unparsable");
-        assertEquals(result, false);
-
-    }
-
-    public void testGetBooleanObject()
-    {
-        // no param
-        Boolean result = parser.getBooleanObject("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getBooleanObject("default", Boolean.TRUE);
-        assertEquals(result, Boolean.TRUE);
-
-        // true values - Case is intentional
-        parser.add("true1", "trUe");
-        result = parser.getBooleanObject("true1");
-        assertEquals(result, Boolean.TRUE);
-        parser.add("true2", "yEs");
-        result = parser.getBooleanObject("true2");
-        assertEquals(result, Boolean.TRUE);
-        parser.add("true3", "1");
-        result = parser.getBooleanObject("true3");
-        assertEquals(result, Boolean.TRUE);
-        parser.add("true4", "oN");
-        result = parser.getBooleanObject("true4");
-        assertEquals(result, Boolean.TRUE);
-
-        // false values - Case is intentional
-        parser.add("false1", "falSe");
-        result = parser.getBooleanObject("false1");
-        assertEquals(result, Boolean.FALSE);
-        parser.add("false2", "nO");
-        result = parser.getBooleanObject("false2");
-        assertEquals(result, Boolean.FALSE);
-        parser.add("false3", "0");
-        result = parser.getBooleanObject("false3");
-        assertEquals(result, Boolean.FALSE);
-        parser.add("false4", "oFf");
-        result = parser.getBooleanObject("false4");
-        assertEquals(result, Boolean.FALSE);
-
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getBooleanObject("unparsable");
-        assertNull(result);
-    }
-
-    public void testGetBigDecimal()
-    {
-        // no param
-        BigDecimal result = parser.getBigDecimal("invalid");
-        assertEquals(new BigDecimal(0), result);
-
-        // default
-        result = parser.getBigDecimal("default", new BigDecimal(3));
-        assertEquals(result, new BigDecimal(3));
-
-        // param exists
-        parser.add("exists", "1");
-        result = parser.getBigDecimal("exists");
-        assertEquals(result, new BigDecimal(1));
-
-        // unparsable value
-        parser.add("unparsable", "a");
-        result = parser.getBigDecimal("unparsable");
-        assertEquals(new BigDecimal(0), result);
-
-        // array
-        parser.add("array", "1");
-        parser.add("array", "2");
-        parser.add("array", "3");
-        BigDecimal arrayResult[] = parser.getBigDecimals("array");
-        BigDecimal compare[] = {new BigDecimal(1), new BigDecimal(2),
-                                new BigDecimal(3)};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-        // array w/ unparsable element
-        parser.add("array2", "1");
-        parser.add("array2", "a");
-        parser.add("array2", "3");
-        BigDecimal arrayResult2[] = parser.getBigDecimals("array2");
-        BigDecimal compare2[] = {new BigDecimal(1), null, new BigDecimal(3)};
-        assertEquals(arrayResult2.length, compare2.length);
-        for( int i=0; i<compare2.length; i++)
-        {
-            assertEquals(compare2[i], arrayResult2[i] );
-        }
-    }
-
-
-    public void getString()
-    {
-        // no param
-        String result = parser.getString("invalid");
-        assertNull(result);
-
-        // default
-        result = parser.getString("default", "default");
-        assertEquals(result, "default");
-
-        // null value
-        parser.add("null", "null");
-        assertNull( parser.getString("null"));
-
-        // only return the first added
-        parser.add("multiple", "test");
-        parser.add("multiple", "test2");
-        assertEquals("test2", parser.getString("multiple"));
-
-        // array
-        parser.add("array", "line1");
-        parser.add("array", "line2");
-        parser.add("array", "line3");
-        String arrayResult[] = parser.getStrings("array");
-        String compare[] = {"line1","line2","line3"};
-        assertEquals(arrayResult.length, compare.length);
-        for( int i=0; i<compare.length; i++)
-        {
-            assertEquals(compare[i], arrayResult[i]);
-        }
-
-    }
-
-}
diff --git a/src/test/org/apache/turbine/util/FormMessageTest.java b/src/test/org/apache/turbine/util/FormMessageTest.java
deleted file mode 100644
index b013fd8..0000000
--- a/src/test/org/apache/turbine/util/FormMessageTest.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package org.apache.turbine.util;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001 The Apache Software Foundation.  All rights
- * reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * 3. The end-user documentation included with the redistribution,
- *    if any, must include the following 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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.turbine.test.BaseTestCase;
-
-public class FormMessageTest
-    extends BaseTestCase
-{
-    public FormMessageTest(String name)
-            throws Exception
-    {
-        super(name);
-    }
-
-    public void testCreateFormMessage()
-    {
-        FormMessage fm = new FormMessage("mainForm","someField","A message!");
-        String fmString = fm.toString();
-        assertTrue("Make sure toString works",fmString.indexOf("someField")>-1);
-        assertTrue("Make sure toString works",fmString.indexOf("A message")>-1);
-        assertTrue("Make sure toString works",fmString.indexOf("mainForm")>-1);
-    }
-
-    public void testCreateFormMessageMultipleFields()
-    {
-        FormMessage fm = new FormMessage("mainForm","someField","A message!");
-        fm.setFieldName("someOtherField");
-        String fmString = fm.toString();
-        assertTrue("Make sure toString works",fmString.indexOf("someField")>-1);
-        assertTrue("Make sure toString works",fmString.indexOf("someOtherField")>-1);
-        assertTrue("Make sure toString works",fmString.indexOf("A message")>-1);
-        assertTrue("Make sure toString works",fmString.indexOf("mainForm")>-1);
-    }
-}
diff --git a/src/test/org/apache/turbine/util/uri/TurbineURITest.java b/src/test/org/apache/turbine/util/uri/TurbineURITest.java
deleted file mode 100644
index c23aade..0000000
--- a/src/test/org/apache/turbine/util/uri/TurbineURITest.java
+++ /dev/null
@@ -1,136 +0,0 @@
-package org.apache.turbine.util.uri;
-
-/* ====================================================================
- * The Apache Software License, Version 1.1
- *
- * Copyright (c) 2001-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://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 Turbine" must not be used to endorse or promote products
- *    derived from this 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 Turbine", 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/>.
- */
-
-import org.apache.commons.configuration.BaseConfiguration;
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.services.ServiceManager;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.test.BaseTestCase;
-import org.apache.turbine.util.ServerData;
-import org.apache.turbine.util.parser.ParserUtils;
-
-/**
- * Testing of the TurbineURI class
- *
- * @author <a href="mailto:quintonm@bellsouth.net">Quinton McCombs</a>
- * @version $Id$
- */
-public class TurbineURITest extends BaseTestCase
-{
-    private TurbineURI turi;
-
-    /**
-     * Constructor for test.
-     *
-     * @param testName name of the test being executed
-     */
-    public TurbineURITest(String testName)
-            throws Exception
-    {
-        super(testName);
-
-        // Setup configuration
-        ServiceManager serviceManager = TurbineServices.getInstance();
-        serviceManager.setApplicationRoot(".");
-        Configuration cfg = new BaseConfiguration();
-        cfg.setProperty(ParserUtils.URL_CASE_FOLDING_KEY,
-                ParserUtils.URL_CASE_FOLDING_LOWER_VALUE );
-        serviceManager.setConfiguration(cfg);
-
-    }
-
-    /**
-     * Performs any initialization that must happen before each test is run.
-     */
-    protected void setUp()
-    {
-        ServerData sd = new ServerData("www.testserver.com", 
-                URIConstants.HTTP_PORT, URIConstants.HTTP,
-                "/servlet/turbine", "/context");
-        turi = new TurbineURI(sd);
-    }
-
-    /**
-     * Clean up after each test is run.
-     */
-    protected void tearDown()
-    {
-        turi = null;
-    }
-
-
-    public void testAddRemove()
-    {
-        assertEquals("TurbineURI should not have a pathInfo", false, turi.hasPathInfo());
-        assertEquals("TurbineURI must not have a queryData", false, turi.hasQueryData());
-        turi.addPathInfo("test","x");
-        assertEquals("TurbineURI must have a pathInfo", true, turi.hasPathInfo());
-        assertEquals("TurbineURI must not have a queryData", false, turi.hasQueryData());
-        turi.removePathInfo("test");
-        assertEquals("TurbineURI must not have a pathInfo", false, turi.hasPathInfo());
-        assertEquals("TurbineURI must not have a queryData", false, turi.hasQueryData());
-
-        assertEquals("TurbineURI should not have a queryData", false, turi.hasQueryData());
-        assertEquals("TurbineURI must not have a pathInfo", false, turi.hasPathInfo());
-        turi.addQueryData("test","x");
-        assertEquals("TurbineURI must have a queryData", true, turi.hasQueryData());
-        assertEquals("TurbineURI must not have a pathInfo", false, turi.hasPathInfo());
-        turi.removeQueryData("test");
-        assertEquals("TurbineURI must not have a queryData", false, turi.hasQueryData());
-        assertEquals("TurbineURI must not have a pathInfo", false, turi.hasPathInfo());
-    }
-
-}
diff --git a/src/tlds/jsp_example.txt b/src/tlds/jsp_example.txt
deleted file mode 100644
index 8534f59..0000000
--- a/src/tlds/jsp_example.txt
+++ /dev/null
@@ -1,104 +0,0 @@
--------------------------------------------------------------
-layouts/default.jsp
--------------------------------------------------------------
-<%@ page import = "org.apache.turbine.services.jsp.util.*" %> 
-<%@ page import = "org.apache.turbine.util.*" %> 
-<%@ page import = "java.util.*" %> 
-<%@ taglib uri='/WEB-INF/tlds/template.tld' prefix='turbine' %>
-
-<jsp:useBean id="rundata" class="RunData" scope="request"/> 
-<jsp:useBean id="link" class="JspLink" scope="request"/> 
-
-<html>
-<!--
-	A simple jsp layout
-	<a href="mailto:jmcnally@collab.net">John D. McNally</a>
--->
-
-<head>
-	<turbine:screen section="head" contextRelevant="false" />
-</head>
-
-<body<turbine:bodyAttributes />>
-
-<table width="100%" border="0">
-	<tr>
-		<td>
-			<turbine:navigation template="top.jsp" />
-		</td>
-	</tr>
-</table> 
-
-<table width="120" align="left" border="0">
-	<tr>
-		<td valign="top">
-			Some side<br>
-			links<br>
-			Home<br>
-		</td>
-	</tr>
-</table>        
-  
-<table width="480" border="0">
-	<tr>
-		<td>
-			<p><font color="#330000"><%= rundata.getMessageAsHTML() %><br></font></p>
-			<turbine:screen section="body" />
-		</td>
-	</tr>
-</table> 
-
-<br clear="all">
-
-<table width="100%" border="0">
-	<tr>
-		<td>
-			<turbine:navigation template="bottom.jsp" />
-		</td>
-	</tr>
-
-</table> 
-</body>
-</html>
-
--------------------------------------------------------------
-navigations/top.jsp
--------------------------------------------------------------
-<%@ taglib uri='/WEB-INF/tlds/template.tld' prefix='turbine' %>
-
-<H1>JSP example</H1>
-This is version 0.1.
-<BR>
-<BR>
-
--------------------------------------------------------------
-navigations/bottom.jsp
--------------------------------------------------------------
-<%@ taglib uri='/WEB-INF/tlds/template.tld' prefix='turbine' %>
-<BR>
-<BR>
-The End
-
--------------------------------------------------------------
-screens/welcome.jsp
--------------------------------------------------------------
-<%@ taglib uri='/WEB-INF/tlds/template.tld' prefix='turbine' %>
-
-<turbine:head>
-	<title>Welcome</title>
-</turbine:head>
-
-<turbine:body>
-Hello<br>
-<br>
-
-<% if (true) { %>
-    Browser_Name: turbine:wmVar name="browserDetector.BrowserName" <br>
-    Browser_Version: turbine:wmVar name="browserDetector.BrowserVersion" <br>
-    Browser_Platform: turbine:wmVar name="browserDetector.BrowserPlatform" <br>
-    Browser_JavaScriptOK: turbine:wmVar name="browserDetector.JavascriptOK" <br>
-    Browser_CSSOK: turbine:wmVar name="browserDetector.CssOK" <br>
-    Browser_FileUpload : turbine:wmVar name="browserDetector.FileUploadOK" <br>
-<% } %>
-
-</turbine:body>
diff --git a/src/tlds/template.tld b/src/tlds/template.tld
deleted file mode 100644
index 09c400e..0000000
--- a/src/tlds/template.tld
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<!DOCTYPE taglib PUBLIC 
-  "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" 
-  "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> 
-<taglib>
-	<tlibversion>1.0</tlibversion>
-	<jspversion>1.1</jspversion>
-	<shortname>Turbine Template System</shortname>
-	<tag>
-		<name>head</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.HeadTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-	</tag>
-	<tag>   
-		<name>body</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.BodyTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-		<attribute>
-			<name>attributes</name>
-			<required>false</required>
-			<rtexprvalue>true</rtexprvalue>
-		</attribute>
-	</tag>
-	<tag>   
-		<name>navigation</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.NavigationTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-		<attribute>
-			<name>template</name>
-			<required>true</required>
-		</attribute>
-	</tag>
-	<tag>   
-		<name>screen</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.ScreenTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-		<attribute>
-			<name>section</name>
-			<required>true</required>
-		</attribute>
-		<attribute>
-			<name>staticContent</name>
-			<required>false</required>
-			<rtexprvalue>false</rtexprvalue>
-		</attribute>
-	</tag>
-	<tag>   
-		<name>bodyAttributes</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.BodyAttributesTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-	</tag>
-	<tag>   
-		<name>wmVar</name>
-		<tagclass>org.apache.turbine.services.jsp.tags.WebMacroVariableTag</tagclass>
-		<bodycontent>JSP</bodycontent>
-		<attribute>
-			<name>name</name>
-			<required>true</required>
-		</attribute>
-	</tag>
-    <tag>
-      <name>link</name>
-      <tagclass>org.apache.turbine.services.jsp.tags.TemplateLinkTag</tagclass>
-      <bodycontent>JSP</bodycontent>
-      <attribute>
-        <name>template</name>
-        <required>true</required>
-      </attribute>
-      <attribute>
-        <name>action</name>
-        <required>false</required>
-        <rtexprvalue>false</rtexprvalue>
-      </attribute>
-    </tag>
-</taglib>
diff --git a/xdocs/changes-pre24.xml b/xdocs/changes-pre24.xml
deleted file mode 100644
index 9f26cc0..0000000
--- a/xdocs/changes-pre24.xml
+++ /dev/null
@@ -1,725 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-<properties>
-  <title>2.x Changes</title>
-</properties>
-
-<body>
-
-<p>
-Latest changes are available from <a href="changes-report.html">Changes Report</a>.
-</p>
-
-<section name="Turbine 2.3">
-
-<p>
-Changes between Turbine 2.2 and 2.3.
-</p>
-
-<subsection name="Building">
-<p>
-  <ul>
-    <li>
-      It is now necessary to use Maven to build Turbine 2.3. The old,
-      ant-based build system is no longer supported and actively removed
-      from the distribution.
-    </li>
-    <li>
-      Turbine requires the Maven Torque plugin to build. If you don't
-      use at least Maven 1.0b9, you will have to install it manually
-      before you can recompile the source code.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-<subsection name="Changes that could break older environments">
-<p>
-  <ul>
-  	<li>
-      The IntakeService has been refactored, introducing two Abstract classes; the 
-      DefaultValidator and the NumberValidator. They both contain rules which are 
-      applicable to all Validator's and NumbeValidator's respectively. Unnecessary use
-      was being made of (Old) NumberValidator which used BigDecimals, cleaned this up
-      implementing concrete classes for all Number Types. Simplified definition of 
-      (number &amp; required) rules in Intake.xml.  	
-  	</li>
-    <li>
-      The LoginUser action no longer checks to see if the user object is already
-      in the session and returns if it is found.  The user will always be there
-      now.  If you have a custom LoginUser action that still performs this
-      check, you will need to remove it in order for your login action to work.
-    </li>
-    <li>
-      AccessControlList is now an interface and its implementation is in
-      TurbineAccessControlList. This is now configurable and can be replaced
-      by a custom AccessControlList implementation. If older compiled code
-      suddently throws IncompatibleClassChange errors, just recompile and
-      they go away.
-    </li>
-    <li>
-      All deprecated java code was removed (incl. support for webmacro, freemarker
-      and castor). Make sure to not get any deprecation warnings before you
-      switch to 2.3!
-    </li>
-    <li>
-      The LoggingService was removed. Deprecated everything in the utils.Log class.
-    </li>
-    <li>
-       The TurbineResources Service was removed and replaced with commons-configuration.
-    </li>
-    <li>
-       The service initialization code has been changed. This is important if
-       you write services yourself. You should supply a constructor which takes
-       no parameters. The usage of a constructor which takes a RunData object
-       is deprecated and might be removed later. If you're using the supplied
-       services, you shouldn't notice any change.
-    </li>
-    <li>
-       TTWS38: BaseValueParser.getInteger(String name) now returns null if the
-       key name is not found - the old behaviour was to return new Integer(0).
-       For consistency a similar change was made to getBool() and
-       getBigInteger().
-    </li>
-    <li>
-        The velocity mail classes (o.a.t.util.velocity package) now throw
-        VelocityEmailException instead of MessagingException if a problem
-        occurs.
-    </li>
-    <li>
-      The handling of "," as a separator in template names was tightened and
-      clarified. Many places where you could get away with using "/" as a separator
-      or use a leading "/" for a template name now no longer work. There is a long
-      description on how to use and not to use this in the javadoc for 
-      org.apache.turbine.services.template.TurbineTemplateService. If you want to volunteer
-      for work on Turbine, feel free to whip this into an xdoc and put it into the
-      documentation tree.
-    </li>
-    <li>
-      Some classes have been moved into different packages to allow cleanup and
-      clarification of their usage. The old locations are still available but 
-      deprecated. Examples are the parser classes from org.apache.turbine.util to
-      org.apache.turbine.util.parser and some of the pull tools from org.apache.turbine.util.pull
-      to org.apache.turbine.services.pull.tools
-    </li>
-    <li>
-      getSizeMax() in the UploadService interface and implementations changed
-      from int to long to reflect a change that was made in the underlying 
-      commons-fileupload component.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-
-<subsection name="Other changes">
-<p>
-  <ul>
-    <li>
-	 Added ability to specify either the class TurbineResources.properties file
-	 or a new TurbineConfiguration.xml file.  TurbineConfiguration.xml allows
-	 Turbine to pull it's configuration values from multiple locations.  Please
-	 read the howto for more information.
-    </li>
-    <li>
-	 Added a Howto describing using Hibernate with Turbine.  The actual code is
-	 currently not part of the Turbine distrib due to licensing issues, but is very
-	 easy to implement due to Turbine support of Avalon Components.
-    </li>    
-    <li>
-	 Changed TurbineUser so that when either perment or temporary values are
-	 stored, if the required hashtable was missing, then it was created.  This
-	 happened in conjunction with the PassiveUserManager.  Additionally, the
-	 setTempStorage(Hashtable newTempStorage) did not actually assign the new
-	 Hashtable.  Cleaned up some of the code so the parallel permanent and temp
-	 data storage methods followed the same patterns.  Created a cactus testcase
-	 to test TurbineUser.
-    </li>
-    <li>
-	 Changed scheduler so that if it is NOT enabled, then it doesn't attempt
-	 to connect to the database and retrieve jobs.  This prevents a spurious
-	 no data source error from showing up in the turbine logs on startup.  Added
-	 a cactus test to test the fix.
-    </li>
-    <li>
-      A new pull tool is available in the session scope called $sessionData.
-      This tool can be used to store data that will persist for the duration
-      of the session.  This should be used instead of the getTemp() and
-      setTemp() methods in TurbineUser.
-    </li>
-    <li>
-      The use of getPerm() and setPerm() methods in Turbine user have been
-      deprecated.  See the Extending Turbine User how-to for using additional
-      database columns for storage if you are using the DBSecurityService.
-      You can also switch to the TorqueSecurityService where it is much easier
-      to use additional columns.
-    </li>
-    <li>
-      Perm scope pull tools have been deprecated.  If you use these type of
-      tools, you need to switch to authorized scope pull tools.  These tools
-      are initialized with a user object.  Any state information that you were
-      storing in the tools itself, you will now need to store in the user
-      object.
-    </li>
-    <li>
-      Turbine used to remove all data from the session before executing
-      the login action.  This no longer happens.  Instead, the session
-      is invalidated before calling to logout action.
-    </li>
-    <li>
-      There is a new pull tool that makes it easy to format
-      Date objects into Strings.  See
-      org.apache.turbine.services.pull.util.DateFormatter for details.
-    </li>
-    <li>
-      Backported the Scheduler service from Fulcrum.  Other Scheduler
-      related changes include:
-      <ul>
-      <li>
-        The scheduler can now be enabled/disabled while Turbine is running.
-      </li>
-      <li>
-        A new pull tool is available to allow access to the Scheduler service
-        from Velocity templates.  See
-        org.apache.turbine.service.scheduler.SchedulerTool for details.
-      </li>
-      <li>
-        TurbineException is now thrown instead of Exception.
-      </li>
-      <li>
-        Torque generated objects are now used to for accessing the database.  You
-        can now add additional fields for the OM objects without modifing the source
-        code.  The OM objects are generated from scheduler-schema.xml
-      </li>
-      <li>
-        updateJob(job) can be used to add a new job.  It will perform the correct
-        action (insert or update) for you.  addJob(job) simply calls updateJob(job).
-      </li>
-      <li>
-        A new fascade class has been created for easier access to the Scheduler Service.
-        It is org.apache.turbine.services.schedule.TurbineScheduler.
-      </li>
-      </ul>
-    </li>
-    <li>
-      Backported the Crypto Service from Fulcrum.
-    </li>
-    <li>
-      TTWS24: With this patch LDAP security services can have users, groups,
-      roles and permissions in the LDAP repository. It also works with users in
-      LDAP and the rest in the Database. <br/>
-      Sample configuration files for Openldap can be found
-      <a href="http://cvs.apache.org/viewcvs/jakarta-turbine-2/conf/openldap/">
-      here</a>
-    </li>
-    <li>
-      TTWS34: Implemented the following functions in LDAPUserManager:
-      store(), createAccount() and removeAccount().
-    </li>
-    <li>
-      added new Logging code which uses commons-logging everywhere.
-    </li>
-    <li>
-       added new Configuration code based on commons-configuration. Switched
-       all configuration requests to commons-configuration.
-       <ul>
-         <li>
-           Configuration values can now be stored in XML, .properties, as well as JNDI Tree.
-         </li>
-         <li>
-		   Configuration values can be overridden.  If you specify JNDI and the .xml, if a value
-		   is found in JNDI, then it is used.  Useful for overriding environment specific values
-		   like mail servers or whether Velocity templates are reloadable.
-         </li>         
-       </ul>
-    </li>
-    <li>
-      added Log4j configuration and startup.
-    </li>
-    <li>
-      removed all remaining Torque code.
-    </li>
-    <li>
-      VelocityLayout is now the proposed default layout.
-      VelocityECSLayout might go away post-2.3.
-      See <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?JakartaTurbine2/VelocityOnlyLayout">
-      Moving to VelocityOnlyLayout</a> to see what changes need to be made to your
-      application(s).
-    </li>
-    <li>
-      TurbineException, TurbineRuntimeException, and TurbineError all extend
-      the corresponding "Nestable" exception type from commons-lang.
-    </li>
-    <li>
-      VelocityHtmlMail can now be used in a scheduled job.  It has a new constructor
-      accepting a velocity context object.
-    </li>
-    <li>
-      Intake changes:
-      <ul>
-        <li>
-          Backported changes from Fulcrum version
-        </li>
-        <li>
-          IntakeException is now thrown from intake methods instead of
-          TurbineException and Exception.
-        </li>
-        <li>
-          Multiple XML definition files can be used.
-        </li>
-        <li>
-          Logging has been improved to give more information when an
-          error occurs.
-        </li>
-        <li>
-          The DTD has been updated and fully documented!
-        </li>
-        <li>
-          Intake now uses commons-pool for pooling.
-        </li>
-        <li>
-          intake.dtd is now packaged in the turbine.jar file.  If your
-          intake.xml file validates against
-          jakarta.apache.org/turbine/dtd/intake.dtd, then the DTD included
-          in the jar file will be used instead of the online version.
-        </li>
-        <li>
-          The DTD resolved for intake will now look for intake.dtd on the
-          class path when the DTD in the XMl file is
-          http://jakarta.apache.org/turbine/dtd/intake_2_2_1.dtd.  The application
-          functions in the same way.  This was done to allow XML editors to use
-          the correct version of the DTD.
-        </li>
-        <li>
-          The field object has two new methods to help in creating the HTML
-          input tags for the field.  They are getDisplaySize() and getMaxSize().
-          The display size is set in the xml definition.  The max size is pulled
-          from the maxLength rule (if defined).
-        </li>
-        <li>
-           The setDefaultValue() method on the Field object is now public.  This
-           will allow you to assign a value to a field for display on a form that
-           does come from a mapped object.  Before this change, your only option
-           was to defined the default value in intake.xml.
-          </li>
-      </ul>
-    </li>
-    <li>
-        All deprecated calls to the old org.apache.turbine.util.Log have
-        been replaced with calls to org.apache.commons.logging.Log.
-    </li>
-    <li>
-        A new SessionService has been added.  This will allow access to all
-        sessions in the current context if you use Servlet API 2.3 or better.
-    </li>
-    <li>
-        The non-secure web server for handling xml-rpc requests
-        will now use the services.XmlRpcService.address setting for
-        the address on which to listen for requests.  If the setting
-        is not found in TR.props, it will use the default of 0.0.0.0.
-        This address will cause the server to listen on all
-        addresses of a multi-homed machine.
-    </li>
-    <li>
-        Nearly all of the methods of o.a.t.util.StringUtils has been deprecated.  You should change your
-        application code to use StringUtils from commons-lang.
-    </li>
-    <li>
-        All classed in the org.apache.turbine.util.mail package have been deprecated.  You should change your
-        application code to use commons-mail instead.
-    </li>
-    <li>
-        Turbine now uses commons-fileupload.  The org.apache.turbine.util.upload
-        package has been deprecated.
-    </li>
-    <li>
-        The Pull Service got a new scope: authorized tools. These are like Session Tools but only
-        available after the user logged in.
-    </li>
-    <li>
-        The Pull Service got a new type of tools: RunDataApplicationTools. These tools get the
-        current RunData object passed at every refresh(). This type obviously makes sense only
-        for non-request scope tools.
-    </li>
-    <li>
-      Some services got static facade classes: FactoryService, JspService, RunDataService, SchedulerService.
-    </li>
-    <li>
-      Turbine can use the ConfigurationFactory from commons-configuration to load all kinds of configuration types
-      like XML, JNDI or (still) plain properties files.
-    </li>
-    <li>
-      A completely new URI handling scheme was added and is now the proposed default method to handle URI representations
-      in Turbine. The older URI handling classes like ContentURI and DynamicURI will go after the 2.3 release.
-    </li>
-    <li>
-      A new Security Service is available: TorqueSecurityService. It has the same functionality as the DBSecurityService
-      but allows the usage of arbitrary Torque generated peer classes and objects as security objects.
-    </li>
-    <li>
-      The security object get methods from Security Service have been deprecated and replaced by methods which are
-      able to reference Objects by Name and by Primary Key.
-    </li>
-    <li>
-      The TurbineDB Service has been deprecated. Use Torque and the Component Service to start Torque.
-    </li>
-    <li>
-      It is possible to debug pressure on the PoolService by setting services.PoolService.pool.debug to true 
-      in the TurbineResources.properties.
-    </li>
-    <li>
-      Turbine now has some integration for Avalon Components. It can start
-      Avalon based components with the new AvalonComponentService.
-    </li>
-    <li>Added a new TurbineMacros file to the turbine jar, which contains some helper
-        macros for Velocity Templates. Currently there are only some macros to be used
-        with VelocityOnlyLayout to render the page attributes like in VelocityECSLayout
-        based pages.
-    </li>
-    <li>
-      The ComponentService (using the stratum lifecycle interfaces) is 
-      deprecated. It will be removed after the 2.3 release as the stratum 
-      package is unmaintained. We use the new AvalonComponentService to
-      initialize Torque. 
-    </li>
-    <li>
-      ActionEvent and VelocityActionEvent can "ignore" eventSubmit_&lt;xxx&gt; events if they 
-      contain an empty or a zero value. This behaviour is controlled by the "action.eventsubmit.needsvalue"
-      property that defaults to "off", which  means no change from the pre-2.3 behaviour. The new behaviour
-      is  useful if you have multiple event fields in a form and only one should be selected 
-      (e.g. by a client side java script application).
-    </li>
-    <li>
-      VelocityService now uses the EventCartridge Code to catch and log invocation errors from templates.
-      This is very useful when debugging pull tools, because you get the actual exception in the log and
-      not only the velocity internal stack trace. You can switch this behaviour off by setting 
-      "services.VelocityService.catch.errors" to off or false.
-    </li>
-    <li>
-      Intake can now assign "empty" values to fields which are not returned or left out by the browser. This
-      is useful if you want your string fields not to map to null if the user does not enter anything.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-<subsection name="Fixed bugs">
-<p>
-  <ul>
-    <li>
-      TTWS25: Removed deprecated call to TurbineDB
-    </li>
-    <li>
-      TRQD10: Extending Turbine User How-to for T2.2
-    </li>
-    <li>
-      TTWS20: Intake can not set mapped attributes to null.
-    </li>
-    <li>
-      Changed made to scheduled jobs are now recognized by the scheduler
-      service.  Before, it would only recognize changes to the next run
-      time.
-    </li>
-    <li>
-      Fixed null pointer exception during initialization of IntakeTool when there are
-      no groups defined in intake.xml
-    </li>
-    <li>
-      TTWS41: PrimaryKey not set on TurbineUser after insert.
-    </li>
-    <li>
-      Cookies now work properly.  A NullPointerException was being thrown
-      during the call to data.getCookies() if no cookies were present.  Also,
-      the path for cookies was being set incorrectly.  Both of these issues
-      have been fixed.
-    </li>
-    <li>
-      The pull service now really refreshes non-request tool every time a tool is requested.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-</section>
-
-<section name="Turbine 2.2 (= 2.2-rc2)">
-<p>
-Changes between Turbine 2.2-rc1 and 2.2.
-</p>
-
-<subsection name="Other changes">
-<p>
-  <ul>
-    <li>
-      TTWS1: TemplatePageAttributes enhancements
-    </li>
-    <li>
-      TTWS5: Reference support for DynamicURI
-    </li>
-    <li>
-      TTWS13: IntakeTool.getGroups() should be public
-    </li>
-  </ul>
-</p>
-</subsection>
-</section>
-
-<section name="Turbine 2.2-rc1">
-<p>
-Changes between Turbine 2.2-b2 and 2.2-rc1.
-</p>
-
-<subsection name="Other changes">
-<p>
-  <ul>
-    <li>
-      Enhancements to support Apache XML-RPC versions 1.2 alpha 1 and 2.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-<subsection name="Fixed bugs">
-<p>
-  <ul>
-    <li>
-      TRQD2: Update to intake-howto to mention remove()
-    </li>
-  </ul>
-</p>
-</subsection>
-</section>
-
-<section name="Turbine 2.2-b2">
-
-<p>
-Changes between Turbine 2.2-b1 and 2.2-b2.
-</p>
-
-<p>
-<b>The coupled version of Torque has been removed from Turbine 2.2!</b> <br/>
-Get a full list of changes at the
-<a href="http://jakarta.apache.org/turbine/torque/changes">Torque-site</a>.
-</p>
-
-<subsection name="Changes that could break older environments">
-<p>
-  <ul>
-    <li>
-      the coupled version of torque has been removed.
-    </li>
-  </ul>
-</p>
-</subsection>
-
-
-<subsection name="Other changes">
-<p>
-  <ul>
-    <li>
-      Maven is used as build system for Turbine 2.2
-    </li>
-    <li>
-      removed antiquated redirect logic.
-    </li>
-    <li>
-      You can use log4j properties directly.
-    </li>
-    <li>
-      The configuration package has been moved from stratum to commons
-    </li>
-    <li>
-      BaseValueParser.setProperty() changed from private to protected
-    </li>
-  </ul>
-</p>
-</subsection>
-
-<subsection name="Fixed bugs">
-<p>
-  <ul>
-    <li>
-      Fixed IllegalStateException when removing an attribute from an invalid
-      session (patch by David Vandegrift - dvandegrift@bluearc.com)
-    </li>
-    <li>
-      Fixed NumberFormatException in UUIdGenerator.
-    </li>
-  </ul>
-</p>
-</subsection>
-</section>
-
-
-<section name="Turbine 2.2b1">
-
-<p>
-Changes between Turbine 2.1 and 2.2b1.
-</p>
-
-<p>
-Torque and Fulcrum (the service framework) have been decoupled in preparation
-for Turbine 3.0. The decoupled versions can be used with Turbine 2.2.
-We strongly recommend to use the decoupled versions (some of the 'old' services
-must be used, because they are used internally by Turbine)
-</p>
-
-<p>
-If you wrote your own services you should also change them to be Fulcrum
-services to make them work with Turbine 3.x
-</p>
-
-<subsection name="Changes that could break older environments">
-
-<p>
-  <ul>
-    <li>
-      The Service interface was extended to allow integration of Service
-      implementations: <br/>
-      <b>Service.getName()</b> <br/>
-      since most Service implementations extend BaseService
-      (which implements a public getName method), this should not be an issue.
-    </li>
-  </ul>
-</p>
-
-</subsection>
-
-
-<subsection name="Other changes">
-
-<p>
-  <ul>
-    <li>
-      <b>ECS, Freemarker and Webmacro</b> services/modules are marked
-      <b>deprecated</b>. You should use Velocity instead.
-    </li>
-    <li>
-      <b>Castor</b> service is marked as <b>deprecated</b>. You should use
-      om/peer classes instead!
-    </li>
-    <li>
-      The XSLT Service is updated to use Xalan 2.0
-    </li>
-    <li>
-      Improved datatype mappings for mysql, oracle, postgresql, sapdb
-    </li>
-    <li>
-      adding support for DB2 on AS400 (patch by Sweaver@rippe.com).
-    </li>
-    <li>
-      adding support for secure connections in the xmlrpc service.
-    </li>
-    <li>
-      Added a configuration parameter to torque, addTimeStamp, that allows the
-      user to generate files without a timestamp. Default is true, timestamps
-      will be generated.
-    </li>
-    <li>
-      Criteria.Criterion implements Serializable
-    </li>
-    <li>
-      DB implements Serializable
-    </li>
-    <li>
-      torque: id-methods <i>sequence</i> and <i>autoincrement</i> are
-      <b>deprecated</b>. You should use <b>native</b>. torque uses the method
-      provided by your database
-    </li>
-    <li>
-      added static strings for ISNULL and ISNOTNULL to Criteria.
-    </li>
-    <li>
-      added getDateString() method to format date fields to DB.
-    </li>
-    <li>
-      added VelocityDirectLayout/Screen to make it possible to embed
-      servlet/JSP outputs into a Velocity template used within Turbine.
-      (patch by raphael.luta@networks.groupvu.com)
-    </li>
-    <li>
-      added an easy to use localization pull tool.
-    </li>
-    <li>
-      Javadocs improvements.
-    </li>
-    <li>
-      Documentation improvements.
-    </li>
-  </ul>
-</p>
-
-</subsection>
-
-
-<subsection name="Fixed bugs">
-
-<p>
-  <ul>
-
-    <li>
-      fixed error in Mssql unique.vm template (removed a blank line)
-    </li>
-    <li>
-      [2301] Embedding message parts in HtmlEmail throws NullPointerException.
-    </li>
-    <li>
-      bugfix for BigDecimal attributes with default value
-    </li>
-    <li>
-      fixed handling of sequences for db2, oracle, postgresql, sapdb
-    </li>
-    <li>
-      fixed syntax for create index (postgresql)
-    </li>
-    <li>
-      fixed problem for postgres with blob style column in TurbineUser table.
-      (patch by Jerome Veryleyen)
-    </li>
-    <li>
-      BaseUnicastRemoteService.java: Corrected method name (setName -> getName).
-    </li>
-    <li>
-      fixed Roleset.add(RoleSet) (patch by lujin@yahoo.com)
-    </li>
-    <li>
-      fixed database - defaultIdMethod (torque)
-    </li>
-    <li>
-      fixed date formating problem with Oracle.
-    </li>
-    <li>
-      fixed problem when ignoreCase was used with ISNULL or ISNOTNULL.
-    </li>
-    <li>
-      fixed Option object initialisation in SelectorBox
-      (patch by Kurt Grafius kurtg@jvoom.com)
-    </li>
-  </ul>
-</p>
-
-</subsection>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
deleted file mode 100644
index 44abfdf..0000000
--- a/xdocs/changes.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-  <properties>
-    <title>Changes</title>
-    <author email="epugh@opensourceconnections.com.com">Eric Pugh</author>
-  </properties>
-
-  <body>
-    <release version="2.4-M2" date="in cvs">
-    </release>
-    <release version="2.4-M1" date="2004-08-14" description="Milestone release including Pipeline and PipelineData objects">
-      <action dev="epugh" type="update">
-     Update to Commons Configuration 1.0-RC1.  TurbineConfiguration.xml files should switch
-     from &lt;dom4j className="org.apache.commons.configuration.DOM4JConfiguration" fileName="conf/test/TurbineResources.xml"/&gt;
-     to &lt;xml fileName="conf/test/TurbineResources.xml"/&gt; syntax.
-      </action>   
-    <action dev="epugh" type="update">
-        Refactored how Turbine sets up it's ServerData object.  Removed the use
-     of RunData from the process.
-     </action>
-<action dev="" type="update">Removed dependency on deprecated Log4jFactory in favor of Log4jLogger.</action>
-<action dev="" type="add">Replaced existing Maven plugin with Hennings' META: Maven Environment for 
-  	  Turbine Applications plugin.</action>
-<action dev="epugh" type="update">Updated to use Stratum b5 which properly supports the upcoming 1.0 release of 
-  	  Commons Configuration.  Also removed uses of getVector which has been removed 
-  	  from the Configuration API.</action>
-<action dev="epugh" type="add"> Backported the Pipeline from Turbine 3 to Turbine 2.4.  The pipeline allows
-  	  you to define via an XML file all the stages for processing a request.  This
-  	  makes it simple to add your own custom steps to be applied to each HTTP
-  	  request coming into Turbine.  You will need to add the pipeline.xml file. 
-  	  Added methods to many classes to allow the use of PipelineData as an 
-  	  alternative to RunData. Added new PipelineDataApplicationTool interface for
-  	  tools which use PipelineData instead of RunData.</action>
-<action dev="epugh" type="update">Maven Plugin for Turbine moved to /extensions directory.  The torque
-  	  codegeneration of objects for the Schedule and Security services was
-  	  moved to a new project /extensions/torque.  This removes all the nasty
-  	  logic required to code generate the torque objects before hand.  Should
-  	  help new users work with Turbine as well as allow other backend providers
-  	  for the Schedule and LDAP security services.  The multiproject plugin is
-  	  now used to build Turbine.</action>
-<action dev="" type="remove">Removed deprecated Turbine Security methods.</action>
-<action dev="" type="add">Added to website documentation the Maven Plugin for Turbine.  Now has goals to
-	 help with inplace development of Turbine apps.</action>
-<action dev="" type="update">Upgraded to commons-pool-1.1</action>
-<action dev="" type="add">A means of initializing Velocity action modules has been added.</action>
-<action dev="epugh" type="add" due-to="Peter Courcoux">Added first cut of the MerlinComponentService which uses the Avalon Merlin
-  	   container.  Merlin has many many features to help with dealing with components.</action>
-<action dev="epugh" type="update">The cache, crypto, localization, intake, factory, and mimetype services have now been deprecated in favor
-  	   of the Fulcrum versions as well.  </action>
-<action dev="epugh" type="update">Turbine security now uses the Fulcrum crypto component.</action>
-<action dev="epugh" type="update">The intake service within Turbine has been deprecated in favor
-	   of the Fulcrum Intake service.  The intake pull tool has
-	   been updated to reflect this.</action>
-<action dev="epugh" type="update">The localization service within Turbine has been deprecated in favor
-	   of the Fulcrum Localization service.  The localization pull tool has
-	   been updated to reflect this.</action>
-<action dev="" type="fix">Fixed problem in Intake with the "remove" method in IntakeTool that is 
-       triggered by a "removeAll".</action>
-<action dev="" type="fix">When there is more than one instance of a group and a "removeAll" is
-       done the "remove" method is called for each of the instances of the
-       group. If a mutiply instantiated group is the last one to be removed,
-       it's parameter entries will already have been removed and "getStrings"
-       returns null, which is not being handled in the code.</action>
-<action dev="" type="fix"> Intake now handles multiValued="true" on type="int" fields correctly.
-       The get/set methods of the underlying object need to deal with an array
-       of ints.  The intake processing for other primitive types has also been 
-       updated, though not tested to the same extent as int.</action>
-<action dev="" type="fix">HttpUtils.httpDateFormat had the year set as 'yyyyy', should be 'yyyy' therefore
-  		setting expiry dates failed.</action>
-<action dev="epugh" type="fix"> doXXX events would eat exceptions while doPerform would bubble them up.
-       Added property action.event.bubbleexception which is true by default that
-       applies to both types and either bubbles them up, or logs and sinks them.</action>
-<action dev="" type="fix">The intake validators were fixed so that fields with required=false 
-       rules no longer attempt to execute the remaining rules when no
-       input is provided.  A minLength > 0 rule is no longer synonymous
-       with required=true.</action>
-<action dev="" type="fix">Actions triggered from html input elements with type="button" are 
-       now processed correctly (the trailing ".x" and ".y" are removed from
-       the event names).</action>
-<action dev="" type="fix"> Intake was fixed so that fields with required elements with value=false 
-       can later be enabled with field.setRequired(true) (i.e. you should 
-       do this rather than using the deprecated required-message element).</action>
-<action dev="" type="fix">Intake was fixed so that DateString will use the "formatn" (where n 
-       &gt;= 1) rules to parse the input and then the "format" rule to format 
-       it (the "format" rule is also used to parse the date if there are no
-       "formatn" rules or they are not able to parse it).  In order to 
-       retrieve the correctly formatted DateString value you need to use
-       <em>$group.foo.StringValue</em> rather than <em>$group.foo.Value</em> 
-       (you can do this for all values, not just DateString).</action>
-<action dev="" type="fix">Intake now makes use of the the emptyValue attribute from the field 
-       elements when mapping from the group to the object when no value has 
-       been set.  This makes it possible to clear values in an existing object
-       that is being overwritten with Intake data using 
-       <em>group.setProperties(obj)</em> (or you can provide non-null values
-       in your intake.xml file).  Make sure you do not inadvertently include 
-       the primary key for the object in the intake group without actually 
-       setting it to the appropriate value (it shouldn't be in the group 
-       anyway).</action>
-<action dev="" type="fix">Fixed the intake DateString flexible rule so that it applies to the
-       format rules and not just to the default locale format.</action>       
-<action dev="" type="fix"> DateFormatter now allows for a differnet date format to be provided
-       via <em>tool.dateTool.format</em> in TurbineResources.properties.</action>       
-<action dev="" type="fix">DirectResponseLayout is provided to allow direct writing to 
-       ServletOutputStream when VelocityOnlyLayout is the default.  To use it
-       you need to add <em>data.declareDirectResponse();</em> and then 
-       <em>data.setLayout("DirectResponseLayout");</em> to your action class.
-       Thanks to Peter Courcoux for the code.</action>       
-</release>
-<release version="PRE 2.4" description="Older Changes Logs">
-    <action>Please see <a href="changes-pre24.html">Pre 2.4 Changelog</a></action>
-    </release>
-
-  </body>
-</document>
diff --git a/xdocs/features.xml b/xdocs/features.xml
deleted file mode 100644
index a7ab721..0000000
--- a/xdocs/features.xml
+++ /dev/null
@@ -1,127 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Features</title>
- </properties>
-
-<body>
-
-<section name="Features">
-
-<p>
-This document is for bragging about all of Turbine's features and inherent
-coolness. Turbine is well over 200 classes and contains a boat load of
-features and API's. Many of these can also be used indepently of Turbine.
-Almost all of the default implementations can be easily overridden with
-your own implementations. Turbine also has extensive Javadoc documentation
-for nearly all of the classes as well as in-code comments. At the risk
-of sounding snooty &lt;smile>, Turbine is by far the leader of complex
-web application development tools. No other systems come close to being
-as cleanly implemented and executed. It clearly has been developed by the
-people who do web applications on a daily basis and have to constantly
-solve the same problems over and over again.
-</p>
-
-<p>
-<strong>All of these features have been made possible thanks to the over
-30 developers (and growing all the time!) who have <a href="team-list.html">
-contributed</a> to Turbine over the last 2+ years.</strong>
-</p>
-
-<ul>
-    <li>
-      Integration with template systems: Velocity, JSP
-    </li>
-    <li>
-        Utility code for working with Velocity, such as a
-        SelectorBox class for building <code>select</code> boxes</li>
-    <li>
-        Single Entry Point Servlet model for optimal security and control</li>
-    <li>
-        ParameterParsing for GET/POST/PATH_INFO</li>
-    <li>
-        Event based Action handling!</li>
-    <li>
-        Strict MVC guidelines implemented through many interfaces and abstract
-        classes as well as through the template systems.</li>
-    <li>
-        Object-Relational tools: DatabaseMap/Peers, Village.</li>
-    <li>
-        IDBroker that abstracts the autoinsert/sequence usage from the database</li>
-    <li>
-        Failsafe Job based scheduler system (ie: a Java based cron)</li>
-    <li>
-        GlobalCache (Singleton based system for caching data across servlets and
-        requests)</li>
-    <li>
-        DateSelector (utility for building the HTML for popup date menus)</li>
-    <li>
-        File Upload API</li>
-    <li>
-        Generic Services API for creating Singletons</li>
-    <li>
-        <a href="http://www.xml-rpc.com/">XML-RPC</a> Service Integration</li>
-    <li>
-        Localization Services API</li>
-    <li>
-        JNDI Services API</li>
-    <li>
-        Visitor/Member API for managing users</li>
-    <li>
-        Temporary and Permanent storage/management for users session data</li>
-    <li>
-        ACL (Access Control List) based security system that uses Roles and
-        Permissions (and the database schemas)</li>
-    <li>
-        BrowserDetector class for determining which browser someone is using</li>
-    <li>
-        GenerateUniqueId class for getting a unique number (ie: for sessions)</li>
-    <li>
-        Logging via commons-logging, backed by Log4j.
-    </li>
-    <li>
-        A centralized configuration using commons-configuration to make it easy
-        to retrieve properties.
-    </li>
-    <li>
-        Properties can be stored in JNDI, XML, or .properties files!  Properties can
-        override each other.
-    </li>    
-    <li>
-        Integration with JavaMail to make sending email painless</li>
-    <li>
-        Integration with JavaMail and Velocity/WebMacro to allow you to send
-        processed Velocity templates as email!</li>
-    <li>
-        Built using Maven</li>
-    <li>
-        Initial application development WAR archive creation tool using Ant</li>
-    <li>
-        Turbine Servlet works cleanly with Servlet API 2.1 and higher</li>
-    <li>
-        Works with JDK 1.2.x and higher - 100% Pure Java</li>
-</ul>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/fsd.xml b/xdocs/fsd.xml
deleted file mode 100644
index 853d2cb..0000000
--- a/xdocs/fsd.xml
+++ /dev/null
@@ -1,427 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Specification</title>
- </properties>
-
-<body>
-
-<section name="Specification">
-
-<p>
-Turbine is made up of five different modules which serve a specific
-service within the Turbine framework. In order for the reader to understand
-the general flow of the Turbine framework, each of these modules is explained
-in detail below.
-</p>
-
-<p>
-<center>
-<img src="images/Modules.gif"/>
-</center>
-</p>
-
-</section>
-
-<section name="Action">
-
-<p>
-The Action module represents a chunk of code that performs task. For
-example, when a user submits an Html form, one of the hidden fields
-is which Action to execute in order to process the form information.
-The processing generally includes form validation as well as storing
-the form information into a database. The Page is responsible for
-executing the Action before the Screen is executed. That way, the
-Action can help determine which Screen is executed depending on the
-results of the Action.
-</p>
-
-<p>
-The process looks like this:
-</p>
-
-<table>
-<tr>
-    <td>HTTP Client -></td>
-    <td>Execute Turbine Servlet -></td>
-    <td>Execute Page -></td>
-    <td>Execute Layout/Screen/Navigation -></td>
-    <td>Return Page Content</td>
-</tr>
-<tr>
-    <td></td>
-    <td></td>
-    <td align="center">If Action is defined then...</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td></td>
-    <td></td>
-    <td>Execute Action</td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-
-<p>
-This model makes it really easy to separate the POST (GET works here as well)
-data processing into component modules that can be re-used. For instance, the
-Action "Logout" can be re-used from a number of different points in the system.
-It performs one single function and performs it well. The advantage of this type
-of behavior is that it prevents you from putting logic for handling form data
-into your servlets. This is great for those of you who want to integrate EJB's
-into Turbine because your Action's can simply make calls to your EJB's to process
-business logic.
-</p>
-
-</section>
-
-<section name="Page">
-
-<p>
-The Page module is the first module in the chain of execution for
-the Page generation. It is considered to be the module which contains
-the rest of the modules (Action, Layout, Screen and Navigation).
-The Page module checks to see if there has been an Action defined in
-the request. If so, it attempts to execute that Action. After the
-Action has been executed, it asks the set Screen object for its Layout.
-Page then attempts to execute the Layout object which the Screen
-returned. Please note that the Action module can modify which Screen
-is executed. Also note that the Screen module has the option to
-override the Layout setting which defaults to "DefaultLayout." (Note:
-the DefaultLayout value is actually defined in the TurbineResources.properties
-file. This way, it is a simple property change instead of having to re-compile
-the Turbine code for your own purposes.
-</p>
-
-</section>
-
-<section name="Screen">
-
-<p>
-The Screen module is essentially considered the "body" of the webpage. The
-Layout module executes the Screen module. This is where the Html of the page is
-generated. <strong>It is entirely possible to call external code here.</strong> For
-example, you can call an EJB to provide you some business data which is then
-transformed using a tool such as <a
-href="http://cocoon.apache.org/">Cocoon</a> to render the business data
-into HTML which is then transfered to the client.
-</p>
-
-</section>
-
-<section name="Navigation">
-
-<p>
-A website generally has a top and bottom navigation scheme. This is generally
-defined as the header and footer of the website. The Navigation is executed by
-the Layout. There may be multiple Navigation modules that the Layout executes
-(ie: the side, top and bottom parts of the page). Since it is generally common
-for multiple webpages to contain the same navigation, it is most common to
-define different Layouts for screens with very different Navigations. The
-advantage of using a system like this is that you can have multiple Navigations
-that are conditionally included and excluded in the Layout. Like Screens, the
-Navigation modules can also call out to external code, such as EJB's to get the
-business logic that is responsible for rendering the Html that is sent to the
-browser.
-</p>
-
-</section>
-
-<section name="Layout">
-
-<p>
-The Layout module is called from the Page module. This modules defines
-the physical Layout of a webpage. It generally defines the location of the
-Navigation portion (ie: the top and bottom part of the webpage) as well as
-the location of where the body (or Screen) of the page is. The
-Layout module executes the Screen module to build the body of the webpage.
-It executes the Navigation modules to build the portions of the webpage
-which define the navigation for the website.
-</p>
-
-<section name="Module object Encapsulation">
-<p>
-<center>
-<img src="images/ModuleObjectLayout.gif"/>
-</center>
-</p>
-
-</section>
-
-<p>
-<dt>From a module object encapsulation point of view, the image above represents
-how each of the modules fits into one another.</dt> For example, the Page module
-executes the Layout module, which then executes the Navigation and Screen
-modules. As one can see, this tends to appear how a templated Html page would
-look. This is no accident, the Turbine framework is essentially an object oriented
-representation of the components of an Html page.
-</p>
-
-</section>
-
-<section name="Loaders">
-
-<p>
-<center>
-<img src="images/Loaders.gif"/>
-</center>
-</p>
-
-<p>
-The loaders are responsible for dynamicially loading each of the five modules.
-These loaders have an option to cache the module objects in memory for extremely
-fast loading times.
-</p>
-
-<p>
-The loaders use intelligent factories in that we have added a property to
-TurbineResources.properties that allows you to define the "Loader Classpath". In
-other words, it is possible to physicially keep all of your web applications
-modules in their own package classpath and the loaders will be responsible for
-finding the right file to execute.
-</p>
-
-<p>
-This feature is great because it allows you to upgrade the core Turbine framework
-without having to make any modifications to your existing code! It also allows
-you to simply distribute your web application as a standalone system and then
-have your users download the Turbine framework as a separate requirement. Then,
-multiple web applications can be combined to form a complete system.
-</p>
-
-<p>
-<strong>Note</strong> that each of the modules must be multithread safe
-since multiple threads may try to execute a single module at the exact same time.
-These rules apply to general servlet programming so they are not that difficult
-to understand. The basic rule is to not try to define any class global variables
-within each of the modules unless it has been wrapped in a syncronized statement.
-</p>
-
-</section>
-
-<section name="Factories">
-<p>
-Each of the loaders mentioned makes use of one or more factories to create the
-different modules.  By default the only factory that is enabled is the Java
-factory that creates requested modules from java class files.
-</p>
-
-<p>
-You can easily create your own factories by implementing a simple interface
-and registering them in the TurbineResource.properities.  This allows you a lot
-of flexibility in the sense that you can load Turbine modules from <strong>any
-</strong> source that is able to provide you with a java object, for example an
-RMI server or scripting options like Rhino and JPython.  Keep in mind that
-factories <strong>must</strong> be thread-save (the same applies to modules).
-</p>
-
-</section>
-
-<section name="System Flow">
-
-<p>
-When a new request comes in, the Turbine servlet first checks to make sure that
-a ServletAPI HttpSession object exists for the user making the request. If this
-HttpSession object does not exist, a Http redirect header is returned that
-redirects the browser to the "homepage" of the website (by default it is the
-"Login" screen and this can be configured via the TurbineResources.properties
-file). This redirect attempts to set a cookie that is unique for the visitor. If
-the cookie is not accepted, it will not be returned in the new request for the
-"homepage" and thus further session tracking will happen with modified URL's
-that contain the session information within them.
-</p>
-
-<p>
-<strong>Note</strong>: If you do not wish to require the user to login to the
-system with a username and password before executing the pages, then set the
-"Login" screen to be something else. This is done in the Turbine Servlet under
-the data.session.isNew() check. Until the user actually logs in, it is only possible
-to store temporary data for that users session. When the user logs in, it is
-possible to store permant information by simply putting data into a hashtable.
-The implementation of the User object (ie: TurbineUser) in the framework takes care
-of the issues involved with serializing that information to a resource such as a
-database or file on the hard disk.
-</p>
-
-<p>
-After a session with the user has been established, Turbine caches a few frequently
-used pieces of data in the RunData object. This object is created for each and
-every request and is passed around the system in order to provide all of the
-modules with access to request specific information such as a database
-connection, GET/POST/PATH_INFO (GPP) data (via the ParametersParser object), the
-Action and Screen names (made available from the GPP data), and the Document
-object where you put your Html output. The RunData object should never be stored
-in a global context because it is not multithread safe and each of the modules
-is expected to be multithread safe. Also, the RunData object may or may not
-contain information that should be persistent across requests.
-</p>
-
-<p>
-The Turbine servlet then checks to see if a user is attempting to Login to the
-system by looking at the defined Action and checking to see if the value is
-"LoginUser." If so, it will execute the "LoginUser" action (again, the action to
-execute here can be defined in the TurbineResources.properties file). Within this
-action, it is the coders responsibility to define the procedure for
-authenticating the user with the validateUser() method. This will probably mean
-validating the username and password against a database. The abstraction of
-Action modules makes it easily possible to have multiple authentication methods.
-</p>
-
-<p>
-Once the user has been validated (the RunData.save() method has been called) or
-not validated, then the SessionValidator action is executed from within the Turbine
-servlet. The SessionValidator action checks to see if a user has been logged in.
-If the user has not been logged in, then the Screen is set to be the "Login"
-screen. If not, then the users last access datestamp is updated. <strong>If you would
-like to allow the user to view multiple pages without the need to login first,
-you will need to implement your own version of SessionValidator that just
-returns nothing as a result.</strong> Then, for the pages that you will want to make
-secure, you should define a Layout that executes the SessionValidator action to
-make things secure. Then, your Screens should call that "secure" Layout.
-</p>
-
-<p>
-Next, the "DefaultPage" page is executed by the Turbine servlet. The "DefaultPage"
-starts a chain of events that eventually leads to a complete webpage
-development. First, the DefaultPage attempts to see if an Action has been
-defined. If so, then it attempts to execute that Action. See the definition of
-Action and Page above for more information. After the Action has been executed,
-the Screen is then asked for its Layout and the Layout is then executed.
-</p>
-
-<p>
-It is the Layouts responsibility to then execute the Navigation and requested
-Screen. After the Layout has executed its parts, it is finished and control is
-returned to the Turbine servlet which then sends out the page information.
-</p>
-
-</section>
-
-<section name="Access Control Lists and User Permissions">
-
-<p>
-We have provided a beautiful system (because it is so simple and powerful) for
-controlling what a User is allowed to do and not allowed to do. It is based on
-the following concepts:
-</p>
-
-<p>
-One or more Roles are assigned to a User. A Role is a collection of one or more
-Permission's. The AccessControlList uses an AccessControlBuilder that
-allows you to determine whether or not a User has a Permission to do something
-or not.
-</p>
-
-<p>
-Thus, a User can have both the "Admin" and "Guest" Role. Within those Roles are
-the sets of Permissions that are allowed. In the "Admin" Role, one might have
-the Permission, "Edit Users". Then, it is simple to use the AccessControlList to
-check to see if the User has the permission "Edit Users" or if the User has the
-Role "Admin", in which case, it does not matter what the Permissions are.
-</p>
-
-<p>
-You will then use this system within any of modules to determine whether or
-not to execute some code. This will provide you with both a Page level of
-security (does the User have access to this page) as well as a Content level of
-security (does the User have access to see the content on this page, ie:
-hide/show content based on what Role the User is).
-</p>
-
-</section>
-
-<section name="Exception Handling">
-
-<p>
-During execution, if at any time an exception is raised, the Turbine servlet
-catches that exception and attempts to execute the "DefaultPage" with the Screen
-set to be "Error". This is a simple debugging screen which displays a java stack
-trace as well as any CGI environment variables that have been set. It is
-possible to modify this Screen to display anything that you wish as well as
-define an alternative error screen within your web application via the
-TurbineResources.properties file. The idea is that all errors can be trapped in one
-location in order to make debugging as simple as possible as well as provide a
-consistent error interface to the users.
-</p>
-
-</section>
-
-<section name="Utility Code">
-
-<p>
-There is a number of utility classes included with Turbine.
-</p>
-
-<p>
-The Database pooling classes are helpful for defining the methods for obtaining
-a connection to the database. This code is implemented as a singleton system so
-that all you need to do is get an instance of the database class, get a
-connection and go. There is no need to pass around a Connection object. Turbine
-comes with pool implementations for many of the most popular databases. Creating
-your own is quite simple as well, all you need to do is look at the existing
-code and create your own. If you need help or want someone to create one for
-your database, simply ask on the mailing list.
-</p>
-
-<p>
-The *Peer classes are a great idea on how to abstract the database accesses so
-that all you need to do is pass in a Criteria object and execute doInsert(),
-doSelect(), doUpdate() or doDelete(). While not necessarily part of the Turbine
-framework, because each implementation is different depending on your needs, it
-is a great model to work from. Take a look at the TurbineUserPeer.java file for a
-good example of this methodology in use.
-</p>
-
-<p>
-The ParameterParser class takes all of the GET/POST/PATH_INFO data and parses it
-into a hashtable where it can be easily retrieved in a number of forms with the
-provided get* methods. This is how you can have access to form data that has
-been posted by a users web browser.
-</p>
-
-<p>
-The DynamicURI class should be used whenever a URI is needed within the system.
-Each portion of a URI can be defined in order to produce a custom URI that also
-includes the session tracking information if it exists. It is highly recommended
-that you use this class for generating all of your URI's for your application
-because it will allow you to easily add global functionality to your system.
-</p>
-
-<p>
-The DateSelector class generates Html popup menus for month/day/year. The beauty
-of this class is that you can provide a date for it to start with and it will
-automaticially generate the Html popups with that date.
-</p>
-
-<p>
-The Mail classes make it easy to send email via the JavaMail API's. These
-classes are just very simple classes and there is not a huge amount of
-functionality here. Essentially they allow you to get the job done and that is
-about it. Contributions to improve these classes are appreciated.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/getting-started.xml b/xdocs/getting-started.xml
deleted file mode 100644
index 33517cc..0000000
--- a/xdocs/getting-started.xml
+++ /dev/null
@@ -1,145 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Getting Started</title>
- </properties>
-
-<body>
-
-<section name="Getting Started">
-<p>
-The purpose of this document is to define simple documentation on
-getting started with Turbine. For information about the overall
-structure of Turbine, please refer to the <a href="fsd.html">Functional
-Specification Document (FSD)</a> as well as the other documentation that
-is available.
-</p>
-
-<p>
-The first thing that you should do is download and install the <a
-href="http://jakarta.apache.org/turbine/tdk/">Turbine Developer Kit</a>
-(TDK). The TDK has everything that you need to get started with Turbine,
-including the <a href="http://jakarta.apache.org/tomcat/">Tomcat Servlet
-Engine</a> which is preconfigured to run Turbine. The TDK also has
-sample applications as well as scripts that allow you to quickly build
-your own application. As time progresses, we will be including more and
-more helpful information in the TDK.  Please see the
-<a href="http://jakarta.apache.org/turbine/tdk/tdk-howto.html">Turbine
-Development Kit Howto</a> for more information.
-</p>
-</section>
-
-<section name="Code Organization">
-<p>
-Turbine can be used in three different ways depending on what you need.
-You can choose to only use one way or choose to use all three. It is up
-to you.
-</p>
-
-<ul>
-<li>As a servlet framework with Turbine as the controller.</li>
-<li>As a framework of useful code in your application.</li>
-<li>As a Object-Relational Tool.</li>
-</ul>
-
-<p>
-In all cases, it means that you simply link against the API and code
-provided in the turbine.jar file. In other words, if you want to only
-use the Object Relational aspects of Turbine, then you would use Torque
-to build your Object Relational code and then add the turbine.jar into
-your classpath. Another example is if you want to use Turbine's
-connection pool code. All you need to do is tell Turbine where its
-configuration file is, add turbine.jar to your classpath and then add
-the appropriate Turbine Java code into your application.
-</p>
-
-<p>
-Turbine is now a fairly large codebase. This can be daunting to people
-who are just starting out with Turbine. However, the code is fairly well
-organized and as you learn about each part of the code, the entire
-architecture starts to make sense and is really quite easy to master.
-All of our code is well javadoc'd so we encourage you to review not only
-the actual source code, but also the documentation. :-) The different
-parts of Turbine are:
-</p>
-
-<ul>
-<li>
-org.apache.turbine.modules - This is where the code for the Modules
-system is stored. The different Modules are described in more detail in
-the <a href="fsd.html">funtional specification document</a>.
-</li>
-<li>
-org.apache.turbine.om - OM stands for Object Model. This is where the
-code that represents Turbine's Object Model lives. The code in here is
-for handling a lot of Turbine's RDBMS relationships. For example, there
-is code that represents what a Turbine User is as well as code for the
-BaseObject and BasePeer which is for the Peer based Object Relational
-Tool.
-</li>
-<li>
-org.apache.turbine.services - This is where the Services Framework
-lives. The Services framework is a core aspect of Turbine. Essentially
-it is a framework for creating Singleton objects which may also have an
-init() and destroy() lifecycle. There are Services for many different
-things.
-</li>
-<li>
-org.apache.turbine.util - The Util package is just that. A package of
-utility code that is used within Turbine. There is code that will allow
-you to easily send template based email using WebMacro or Velocity as
-well as many other commonly used web application tools.
-</li>
-</ul>
-</section>
-
-<section name="Standalone Usage">
-<p>
-Turbine can be easily used on its own. In order to do so, all you need
-to do is something like this before you attempt to make a call to Turbine
-based code:
-</p>
-
-<source>
-TurbineConfig tc = new TurbineConfig("/path","TurbineResources.properties");
-tc.init();
-</source>
-
-<p>
-What that does is it tells Turbine the path to its configuration file
-based on the relative path from "/path" (insert your own path). This is
-held as a static in memory and therefore you only need to do it once.
-You do not even have to worry about hanging on to the TurbineConfig
-object. For more information, please see the javadoc for the
-TurbineConfig object.
-</p>
-</section>
-
-<section name="Further Questions and Comments">
-<p>
-If you have further questions or comments, please send them to the <a
-href="http://jakarta.apache.org/site/mail.html">Turbine Mailing list</a>.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/how-to-build.xml b/xdocs/how-to-build.xml
deleted file mode 100644
index 7d12ae6..0000000
--- a/xdocs/how-to-build.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>How To Build Turbine</title>
- </properties>
-
-<body>
-
-<section name="How to build Turbine">
-
-<p>
-  Turbine is built using the <a href="http://maven.apache.org/">Maven</a> build
-  tool.  So to get started you should download and install Maven.
-</p>
-
-<p>
-  There are three major components to the core Turbine codebase.  They are the Turbine
-  server itself, a Maven plugin to make working Turbine easier, and an implementation
-  of the Schedule and Security services that uses Torque to generate object mapping classes
-  for the database backend.
-</p>
-
-<p>
-  To build these three projects, from the Turbine home directory just run 'maven' and by 
-  default each of these projects will be compiled, test cases run, and jar files created.
-  This will also install the artifacts into your local Maven repository as well.
-</p>
-<p>
-  To build the site documentation, run <code>maven multiproject:site</code>, and this will build
-  the site documenation for all the projects, and aggregate them together.
-</p>
-
-</section>
-
-
-
-<section name="Extension Details">
-	
-<subsection name="Maven Plugin for Turbine">
-<p>
-  You can then go into your local repostory and take the jar file called <code>maven-turbine-plugin-XX.jar</code>
-  and place it in your maven plugins directory.  Make sure to delete any existing onces.  Then run <code>maven -g</code>
-  and you will see the turbine goals.  For more information see the <a href="maven-turbine-plugin/index.html">site docs</a> for the Maven plugin.
-</p>
-</subsection>
-
-<subsection name="Torque Impl">
-<p>
-  The Torque implementations for the Schedule and Security services where broken out into seperate Maven
-  projects in the Extensions directory because they require a codegeneration step before compiling the 
-  source code.  Additioanlly, these services should implement an API defined by the main services Interface.
-  This way, over time, other backend implementations of the Schedule and Security services can be added.
-</p>
-</subsection>
-</section>
-</body>
-</document>
diff --git a/xdocs/how-to-help.xml b/xdocs/how-to-help.xml
deleted file mode 100644
index 4ff364c..0000000
--- a/xdocs/how-to-help.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>How To Help with Turbine Development</title>
- </properties>
-
-<body>
-
-<section name="How to help">
-
-<p>
-  If you are a new developer to Turbine or even an existing developer, these are
-  areas where you can take ownership and help complete. Please do not ask us how
-  you can help, but rather specific questions about how you think that these items
-  should be implemented. It is up to you to take initiative and provide solutions
-  to the missing functionality described below. ;-)
-</p>
-
-<p>
-  It is always possible to take ownership of any portion of the project. The way
-  to do this is to post a message to the turbine-dev mailing list.  Just explain
-  what you are wanting to work on or any ideas that you might have on the subject.
-</p>
-
-<p>
-    Documentation is <b>*always*</b> appreciated in any form.  The documentation for
-    Turbine exists in basically four forms.
-    <ul>
-        <li>
-            XML formatted docs (xdoc) - This is used to generate the documentation
-            on the jakarta site.  The source for this documentation can be found
-            in the xdocs directory in the source distribution.  To submit additional
-            documentation in this form or patches to existing documentation, please
-            create an issue is the
-            <a href="http://issues.apache.org/scarab/issues">issue tracking system</a>
-            and attach the patch files (or new files).
-        </li>
-        <li>
-            Mailing list - The archives of turbine-user@jakarta.apache.org and
-            turbine-dev@jakarta-apache.org are an excellent source of information
-            for the project.  Answering questions that are asked on the mailing list
-            or simply posting information that might be of use to other Turbine users
-            would be very welcome contribution to the project.
-        </li>
-        <li>
-            The <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?TurbineProjectPages">
-            Apache Wiki</a> another repository of documentation for the project.  It
-            contains development information, user documentation, how-to documents,
-            discussion of new features, etc.  Anyone can add new pages and edit existing
-            pages very easily!  This is perhaps the easiest way to contribute documentation
-            (well, second only to the mailing lists).
-        </li>
-        <li>
-            The javadocs are another very important form of documentation for the project.
-            Changes to this form of documentation should be in the form of patches.  To submit
-            them, create a new issue in the
-            <a href="http://issues.apache.org/scarab/issues">issue tracking system</a>
-            and attach your patch(s).
-        </li>
-    </ul>
-    The documentation is probably the easiest area for anyone to contribute in.  If you are
-    new to Turbine and learning your way around, documenting what you learn and submitting
-    it in any other the various forms would be appreciated.
-</p>
-
-<p>
-    Testing is another area in which help is always needed.  This could consist of simply
-    reporting problems that you run into using Turbine.  It could also consist of submitting
-    code to perform unit tests.  Turbine uses JUnit and Cactus for testing.  You can find
-    examples in the src/test directory of the source distribution.
-</p>
-
-<p>
-    If you do discover a defect in the Turbine product, please create a defect issue in
-    the <a href="http://issues.apache.org/scarab/issues">issue tracking system</a> clearly
-    discribing the problem.  If you can take the time to track down the source of the problem,
-    it would certainly help speed the process of getting it corrected.  Of course, actually
-    fixing the problem and attaching a patch to the issue would be greatly appreciated.
-</p>
-
-<p>
-    You can also contribute to the project by enhancing existing functionality and/or
-    adding new functionality.  There is a current list of requested features on the
-    <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?JakartaTurbine2/WishList">
-    Apache Wiki</a>.  Everyone is encouraged to take part in the discussion, design, and
-    implementation.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/action-event-howto.xml b/xdocs/howto/action-event-howto.xml
deleted file mode 100644
index b360512..0000000
--- a/xdocs/howto/action-event-howto.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Action Events Howto</title>
- </properties>
-
-<body>
-
-<section name="Action Events">
-
-<p>
-Turbine has a very useful feature that makes handling form submission
-much more painless for the developer. In order to understand this, you
-need to be familiar with the way that Turbine handles Actions. What happens
-is that when a URI has the action= variable defined, a class is executed
-before all of your other Screen classes by your Page class. So, consider
-the following URI (I'm using the <a href="velocity-site-howto.html">
-VelocitySite Howto
-</a> example):
-</p>
-
-<p>
-http://www.server.com/servlet/Turbine/template/AddUser/action/NewUser
-What happens is that Turbine will first execute the Java class file Action
-named NewUser. Then, any class that extends the ActionEvent class instead
-of the Action class will be able to take advantage of what happens next...
-</p>
-
-<source><![CDATA[
-public class NewUser extends VelocityAction
-{
-    public void doAdd (RunData data, Context context) throws Exception
-    {
-        // put code here to add the user to the system
-        context.put ("username", username );
-        data.setMessage("User Added!");
-    }
-
-    public void doPerform(RunData data, Context context) throws Exception
-    {
-        data.setMessage("Button not found!");
-    }
-}
-]]></source>
-
-<p>
-Then, write your HTML tags specially like this:
-</p>
-
-<source><![CDATA[
-<input type="submit" name="eventSubmit_doAdd" value="Add User">
-]]></source>
-
-<p>
-When your Action is executed, an "event" is sent to it by attempting
-to execute a "doAdd()" method in your Action. The cool thing about this
-is that each of your "actions" that are performed within your Action class
-now are componentized into a single method that can be javadoc'ed individually.
-</p>
-
-<p>
-This new functionality does not mean that you should write all of your
-actions in one single class, what it means is that if you have a screen
-with many buttons on it that are very specific to that screen, it might
-be a good idea to place all those methods into a single class. This allows
-you to do it easily and also prevents you from having to do a "if then
-elseif" tree to figure out which button was clicked.
-</p>
-
-<p>
-For a catchall, the doPerform() method will be executed if no other
-method or button could be found.
-</p>
-
-<p>
-Because ParameterParser makes all the key values lowercase, we have
-to do some work to format the string into a method name. For example, a
-button name eventSubmit_doDelete gets converted into eventsubmit_dodelete.
-Thus, we need to form some sort of naming convention so that dodelete can
-be turned into doDelete.
-</p>
-
-<p>
-Thus, the convention is this:
-<ul>
-    <li>
-        The variable name MUST have the prefix "eventSubmit_".</li>
-
-    <li>
-        The variable name after the prefix MUST begin with the letters "do".</li>
-
-    <li>
-        The first letter after the "do" will be capitalized and the rest will be
-        lowercase</li>
-</ul>
-</p>
-
-<p>
-If you follow these conventions, then you should be ok with your method
-naming in your Action class.
-</p>
-
-<p>
-There is a property in the TurbineResources.properties file, called "action.eventsubmit.needsvalue".
-If you set this to "true", only the events that contain a non-empty, non-zero value will be
-executed. This is useful if you have a form with multiple, different events, that need to be executed
-and the form is submitted by client-side code, e.g. JavaScript.
-</p>
-<p>
-If you want to trigger an action event from an html link, versus a button, then just add a parameter with the name eventSubmit_doMyaction.
-The value can be anything as the name is all that is important.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/configuration-howto.xml b/xdocs/howto/configuration-howto.xml
deleted file mode 100644
index f030d64..0000000
--- a/xdocs/howto/configuration-howto.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-<properties>
-    <title>Configuration Howto</title>
-</properties>
-
-<body>
-
-<section name="Configurating Turbine">
-<p>
-With Turbine 2.3, there are now two different ways to configure Turbine.  The old
-classic way was to provide a TurbineResources.properties file in the standard 
-properties format.  However, added to 2.3 is the ability to specify an XML based
-TurbineConfiguration.xml file that instructs Turbine how to load properties from
-multiple sources.  
-</p>
-</section>
-
-<section name="Why do I want multiple sources of configuration?">
-<p>
-In the classic development environment, the developer has one environment, there is
-a QA environment, and then production.  While all of these environments strive to be
-as similar as possible, there are often difference betweent them.  For instance, in 
-the development environment, you might want to not have Turbine cache templates, that
-way, as you change them, they are just reloaded.  But in test and production you might
-need them to be non reloading for performance.  There are many other situations like this.
-</p>
-<p>
-This leads to complex build scripts where you try and customize properties based on what
-environment you are performing a build for.  The more complex the build is, the less frequently
-the development team performs them, which goes against Agile development principles.  The
-ability of Turbine to merge multiple configuration properties together allows developers to
-easily customize Turbine without resorting to complex build scripts.  A simple war:webapp is
-all you need for any environment!  Replacing something like build:dev, build:test, and build:live.
-</p>
-</section>
-
-<section name="Classic Configuration Using Single Property File">
-<p>
-The classic way of performing configuration is to provide the properties file via your
-web.xml file:
-</p>
-
-<source test=""><![CDATA[
-    <servlet>
-        <servlet-name>fortius</servlet-name>
-        <servlet-class>org.apache.turbine.Turbine</servlet-class>
-        <init-param>
-            <param-name>properties</param-name>
-                    <param-value>
-                            /WEB-INF/conf/TurbineResources.properties
-            </param-value>   
-        </init-param>
-        
-        <load-on-startup>1</load-on-startup>
-    </servlet> 
-]]></source>
-
-<p>
-This works well, but if you want to customize the various settings that Turbine uses to
-control it's behavior, then you need to provide a TurbineConfiguration.xml file!
-</p>
-</section>
-
-<section name="TurbineConfiguration.xml File for Multiple Sources">
-<p>
-The TurbineConfiguration.xml file doesn't contain any configuration data itself, instead
-it points at other files that may have configuration data.  Turbine leverages Commons-Configuration's
-ConfigurationFactory to access the data.  For more information, look at 
-<a href="http://jakarta.apache.org/commons/sandbox/configuration/">Configuration</a> homepage.
-</p>
-
-<p>
-To specify the location of your TurbineConfiguration.xml file, just change your servlet init 
-parameters to this:
-</p>
-<source test=""><![CDATA[
-    <servlet>
-        <servlet-name>fortius</servlet-name>
-        <servlet-class>org.apache.turbine.Turbine</servlet-class>
-        <init-param>
-            <param-name>configuration</param-name>
-            <param-value>
-                    /WEB-INF/conf/TurbineConfiguration.xml
-            </param-value>     
-        </init-param>
-        
-        <load-on-startup>1</load-on-startup>
-    </servlet> 
-]]>
-</source>
-
-<p>
-This file will contain lines like this:
-</p>
-
-<source test=""><![CDATA[
-<configuration>
-  <jndi className="org.apache.commons.configuration.JNDIConfiguration" prefix="java:comp/env"/>
-  <dom4j className="org.apache.commons.configuration.DOM4JConfiguration" fileName="/WEB-INF/conf/OtherProperties.xml"/>
-  <properties className="org.apache.commons.configuration.PropertiesConfiguration" fileName="/WEB-INF/conf/TurbineResources.properties"/>
-</configuration>
-]]></source>
-
-<p>
-The configurations specified first override the values of configurations specified 
-afterwords.  So, if the configuration value "mail.server" is specified as mymailserver.mycompany.com in
-your JNDI settings, and localhost in the TurbineResources.properties, then when you issue:
-</p>
-<source>
-	String mailServer = Turbine.getConfiguration().get("mail.server");
-</source>
-<p>
-Then the mailServer value returned will be "mymailserver.mycompany.com".  However, if you
-don't have a setting specifed in your JNDI settings, then this would return "localhost".
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/context-howto.xml b/xdocs/howto/context-howto.xml
deleted file mode 100644
index f22a997..0000000
--- a/xdocs/howto/context-howto.xml
+++ /dev/null
@@ -1,498 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-<properties>
-    <title>Context Howto</title>
-</properties>
-
-<body>
-
-<section name="Using the Turbine Context">
-<p>
-The Turbine Templating Services attach references to default Objects in the
-Turbine Context as part of their initialization. In the case of the
-TurbineVelocityService these references point to RunData, TemplateLink and
-TemplatePageAttributes. These three are put into the Context in the
-TurbineVelocityService class. The Context stores the Objects in a Hashtable
-with a key and the Object.
-</p>
-</section>
-
-<section name="Using the RunData Object">
-<p>
-The RunData Object is referenced by the "data" keyword, which when using this
-in the templating system is referenced by $data. As the Context contains a link
-to the RunData object all the public methods in the RunData Object are made
-available to the template. For example, typing $data.getMessage() will access
-the message String being stored in the RunData Object and print that as part
-of the templates output.
-</p>
-
-<p>
-RunData exposes an extremely rich series of methods and fields, for a full list
-of these methods refer to the Javadocs for RunData. Some of the useful methods
-exposed in RunData include;
-</p>
-
-<p>
-<ul>
-    addMessage(String msg) <br />
-    getMessage() <br />
-    getParameters() <br />
-    getServerName() <br />
-    getTitle() <br />
-    getUser() <br />
-    removeUserFromSession() <br />
-    setMessage(String message) <br />
-    setRedirectUri(String ruri) <br />
-    setTitle(String title) <br />
-</ul>
-</p>
-
-<p>
-The RunData also allows for access to the TemplateInfo Object via
-getTemplateInfo() and several convenience methods. This allows for properties
-of the Templates to be modified for a Request when using templating systems like
-Velocity, WebMacro or Freemarker.
-</p>
-
-<p>
-As an example assume we want a printable page that contains only the Templating
-Screen and not all the navigational components. To achieve this we can strip
-out all the non screen templating components by describing a new Layout Template
-called PrintableLayout.vm in the templates/layouts directory. All the
-PrintableLayout needs contain is;
-</p>
-
-<source test=""><![CDATA[
-    $screen_placeholder
-]]></source>
-
-<p>
-Without the references to the $navigation.setTemplate() methods in the template
-no navigational screen will be called. In the Screen Template that wants to take
-advantage of the PrintableLayout Template add to the Template;
-</p>
-
-<source test=""><![CDATA[
-    $data.setLayoutTemplate("/PrintableLayout.vm")
-]]></source>
-
-<p>
-This will strip the Screen Template of its Navigational components. These
-convenience methods can also be used to expose and to set the Layout when the
-Template is processed. Through this a User can potentially choose how they would
-like their webpage to appear by choosing one of many differant Layouts or
-choices you, the webdesigner provide.
-</p>
-
-<p>
-Currently the setLayoutTemplate(), getLayoutTemplate(), setScreenTemplate() and
-getScreenTemplate() methods arent available in TDKa9. Until the next build of
-the TDK contains RunData with those methods, the setLayoutTemplate method can
-still be accessed through the TemplateInfo Object that RunData exposes.
-For example;
-</p>
-
-<source test=""><![CDATA[
-    $data.getTemplateInfo().setLayoutTemplate("/PrintableLayout.vm")
-
-    or
-
-    #set $template = $data.getTemplateInfo()<br />
-    $template.setLayoutTemplate("/PrintableLayout.vm")
-
-    or
-
-    #set $template = $data.getTemplateInfo()<br />
-    $!template.setLayoutTemplate("/PrintableLayout.vm")
-
-]]></source>
-
-<p>
-In the third example, the ! stops the echo of the Velocty Directive echoing to
-screen.
-</p>
-</section>
-
-<section name="Using the TemplateLink Object">
-<p>
-The TemplateLink is an extended version of DynamicURI customised to be used in
-the templates. The TemplateLink is referenced in the templates via $link and
-exposes convenience methods for building URI's on the fly. For example in a
-template to build the URI to another template, TemplateLink would be referenced
-via;
-</p>
-
-<source test=""><![CDATA[
-    $link.setPage("newpage.vm")
-]]></source>
-
-<p>
-which when added to a Velocity template in the TDK that is running as localhost,
-would return;
-</p>
-
-<p>
-<blockquote>
-    http://127.0.0.1:8080/newapp/servlet/newapp/template/index.vm
-</blockquote>
-</p>
-
-<p>
-where "newapp" is the chosen webapp deployment name.
-</p>
-
-<p>
-This same mechanism can also be used to link to static html;
-</p>
-
-<source>
-    $link.setPage("/path/to/static.html")
-</source>
-
-<p>
-However the HTML page will load itself into a screen and not be embedded withint the Layouts and Navigations. If you still wish static content to be embedded within the specified layouts and navigations it is easier to add the static content as a velocity template and not take advantage of any of the dynamic content addition the Velocity Context allows.
-</p>
-
-
-<p>
-TemplateLink and DynamicURI again expose a rich set of methods and fields to
-the link reference, for a full list of fields and methods please refer to
-TemplateLink and DynamicURI in the javadocs. Some of the useful methods
-exposed are;
-</p>
-
-<p>
-<ul>
-    setPage(String templatename) <br />
-    addPathInfo(ParameterParser pp) <br />
-    addPathInfo(String name, String value) <br />
-    addQueryData(ParameterParser pp) <br />
-    addQueryData(String name, String value) <br />
-    getScriptName() <br />
-    getServerData() <br />
-    getServerPort() <br />
-    setAction(String action) <br />
-    setScreen(String screen) <br />
-    setSecure() <br />
-</ul>
-</p>
-</section>
-
-<section name="Using the TemplatePageAttributes Object">
-<p>
-The TemplatePageAttributes is accessed from within the context by the keyword
-"page" and provides methods to modify the various HTML attributes of the
-templating system. The Template context can be used to dictate the style of
-the HTML page in the navigation and layout templates as well as modify these
-attributes from within a screen.
-</p>
-
-<p>
-As an example in the default.vm the page can be set to a maroon background with;
-</p>
-
-<source test=""><![CDATA[
-    $page.setBgColor("#800000")
-]]></source>
-
-<p>
-the screen template may need to set a new title to the page being displayed in
-the browser, this can be done in the screen template via;
-</p>
-
-<source test=""><![CDATA[
-    $page.setTitle("New Title to Page")
-]]></source>
-
-<p>
-Non standard attributes can be added to the Body tag, for instance the
-leftmargin or topmargin attributes via;
-</p>
-
-<source test=""><![CDATA[
-    $page.addAttribute("topmargin", 0)
-]]></source>
-
-<p>
-Note though that the addAttribute method only adds attributes to the Body tag.
-For a full list of methods exposed to the page reference view the Javadocs for
-TemplatePageAttributes. Other methods exposed to the page reference are;
-</p>
-
-<p>
-<ul>
-    addAttribute(String name, String value) <br />
-    getTitle() <br />
-    setBackground(String url) <br />
-    setBgColor(String color) <br />
-    setDescription(String description) <br />
-    setKeywords(String description) <br />
-    setLinkColor(String color) <br />
-    setStyleSheet(String url) <br />
-    setTextColor(String color) <br />
-    setTitle(String title) <br />
-    setVLinkColor(String color) <br />
-</ul>
-</p>
-</section>
-
-<section name="Adding your own Objects to the Context">
-<p>
-As the Context is stored as a Hashtable any Object can be placed inside
-it and be accessed from a template. For instance, in a Velocity Screen
-in the doBuildTemplate() method, a String could be added to the Context.
-Please refer to the <a href="../getting-started.html">Getting
-Started</a> documentation for more examples of using the Velocity
-Context with screens and events.
-</p>
-
-<source test=""><![CDATA[
-    context.put("hello",new String("testing"));
-]]></source>
-
-<p>
-This can be referenced from within the template via;
-</p>
-
-<source test=""><![CDATA[
-    $hello the hello reference
-]]></source>
-
-<p>
-which would be output as;
-</p>
-
-<source test=""><![CDATA[
-    testing the hello reference
-]]></source>
-</section>
-
-<section name="Using an Image Object in the Context">
-<p>
-Creating an HTML link to an image from a template could be done by;
-</p>
-
-<source test=""><![CDATA[
-   $link.getServerScheme()
-   ://
-   $link.getServerName()
-   :
-   $link.getServerPort()
-   /context/imagename.jpg
-]]></source>
-
-<p>
-This has been split up into multiple lines for clarity. Doing this once is a
-pain, doing it twice stinks, if the screen requires several images .... and
-there are many screens .... it is a productivity killer. The Velocity Context
-can be used to store this information and expose it to all the Screens
-requiring it. To do this we can create an Image Object which extends the Turbine
-DynamicURI Object. The following class is Jakarta Tomcat specific;
-</p>
-
-
-<source test=""><![CDATA[
-//Turbine
-import org.apache.turbine.util.DynamicURI;
-import org.apache.turbine.util.RunData;
-
-
-public class Image extends DynamicURI
-{
-
-    /** The images directory */
-    public static final String DIR = "images";
-
-    /** tomcat specific - tomcat context */
-    private String contextpath;
-
-    /** Constructor */
-    public Image (RunData data)
-    {
-        super(data);
-
-        //the Tomcat context
-        contextpath = data.getRequest().getContextPath();
-    }
-
-    /** set the image and URI */
-    public String setImage(String imagename)
-    {
-        return (
-        getServerScheme() + //http
-        "://" +
-        getServerName()  + //www.foo.com
-        ":" +
-        getServerPort() + //port webserver running on (8080 for TDK)
-
-        //the context for tomcat adds a / so no need to add another
-
-        contextpath  +  //the tomcat context
-        "/" +
-        Images.DIR +
-        "/" +
-        imagename);
-    }
-}
-]]></source>
-
-<p>
-This can be instantiated from within the doBuildTemplate method in a Velocity
-Screen and added to the context from there;
-</p>
-
-<source test=""><![CDATA[
-    public void doBuildTemplate(RunData data, Context context) throws Exception
-    {
-        Image image = new Image(data);
-        context.put("image",image);
-    }
-]]></source>
-
-<p>
-from this the Image Object is accessible from within the corresponding screen
-template and can be accessed by;
-</p>
-
-<source test=""><![CDATA[
-    $image.setImage("imagename.jpg");
-]]></source>
-
-<p>
-Which is much simpler than the original attempt at dynamically creating an image
-URL. To make this Image object accessible across all Screens, sublass the
-VelocityScreen Object with one that overrides the doBuildTemplate() method by
-adding the Image object to the Velocity Context. Then use this class as the
-parent class for the Screens that need access to the Image Object. For more
-detail on taking advantage and extending the VelocityScreen Object, please view
-the <a href="../getting-started.html">Getting Started</a> Document.
-</p>
-
-<p>
-The above Image Object can also be modified to include any static data required
-by the templates. For instance CSS files, JavaScript files etc. Instead of an
-Image Object, it can be rewritten as a StaticLink Object;
-</p>
-
-<source test=""><![CDATA[
-//Turbine
-import org.apache.turbine.util.DynamicURI;
-import org.apache.turbine.util.RunData;
-
-
-public class StaticLink extends DynamicURI
-{
-
-    /** the images directory */
-    public static final String IMAGES = "images";
-
-    /** the css directory */
-    public static final String CSS = "css";
-
-    // etc
-
-    /** tomcat specific - tomcat context */
-    private String contextpath;
-
-    /** Constructor */
-    public Image (RunData data)
-    {
-        super(data);
-
-        //the Tomcat context
-        contextpath = data.getRequest().getContextPath();
-    }
-
-    /** set the image and URI */
-    public String setImage(String imagename)
-    {
-        //URI Logic
-    }
-
-    /** set the CSS style and URI*/
-    public String setCss(String stylesheet)
-    {
-        //URI Logic
-    }
-
-    /** general set method, input as string
-     *  ie can be set as $staticlink.setStaticLink("images/imagename")
-     */
-    public String setStaticLink(String staticlink)
-    {
-        //URI Logic
-    }
-
-}
-
-]]></source>
-</section>
-
-<section name="Using the Context Object with the Base/Peer OM">
-<p>
-As a more complex example, assume we are building a book archive system,
-where users can search for books by author and title. If we search on author
-"Greg Egan" and title "Permutation City", we can query the database through the
-base\peer system and return a Book Object that contains the information on the
-book "Permutation City". The Book Object would be placed in the context via;
-</p>
-
-<source test=""><![CDATA[
-    Book book = new Book();
-
-    //add the data to the Book Object
-    //from the Base/Peer Objects for Book
-
-    context.put("book", book);
-
-]]></source>
-
-<p>
-and then accessed in the velocity template by;
-</p>
-
-<source test=""><![CDATA[
-    $book.getAuthor()
-    $book.getTitle()
-]]></source>
-
-<p>
-where the two methods are public methods in the Book Object, in this case built
-by the <a href="torque.html">Torque Tool</a>. These methods would return;
-</p>
-
-<source test=""><![CDATA[
-    Greg Egan
-    Permutation City
-]]></source>
-
-<p>
-It is important not to try and put Objects with value null into the Context.
-A NullPointerException will be returned. This above example is intended to get
-across how the Velocity Context can be used to store data from the Base/Peer
-system that can be accessed from the Templates.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/extend-user-howto.xml b/xdocs/howto/extend-user-howto.xml
deleted file mode 100644
index 78bd6a4..0000000
--- a/xdocs/howto/extend-user-howto.xml
+++ /dev/null
@@ -1,701 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Extend User Howto</title>
-  </properties>
-
-  <body>
-
-    <section name="Important note">
-      <p>
-        The information in this HOWTO pertains to Turbine 2.2.  Please refer 
-        to the <a href="../services/torque-security-service.html">Torque 
-        Security Service</a> page for information on extending TurbineUser 
-        in Turbine 2.3 and beyond.
-      </p>
-    </section>
-    <section name="Introduction">
-      <p>
-        This is a HOWTO on extending the TurbineUser and its
-        functionality.  The motivating factors for extending TurbineUser
-        are:
-        <ol>
-          <li>
-            to be able to make use of TURBINE_USER.USER_ID as a foreign key in
-            application tables; and
-          </li>
-          <li>
-            to be able to represent additional user attributes by adding columns
-            to TURBINE_USER.
-          </li>
-        </ol>
-      </p>
-      <p>
-        The example herein uses a very simple object model with only one table.
-        This table would be defined in your project-schema.xml file.
-        To illustrate solutions to both of our motivators we will:
-        <ol>
-          <li>
-            Add a REVIEWED_BY_USER_ID column to the BOOK application table.  This will
-              also include a foreign key reference back to TURBINE_USER.
-          </li>
-          <li>
-            Add a TITLE column to TURBINE_USER.
-          </li>
-        </ol>
-      </p>
-      <p>
-        <b>Important Note:</b> This solution is functionally incomplete in that
-        it does not support the ability to use TurbineUser as a commit point for
-        a transaction.  See the very end of this document for further details.
-      </p>
-
-      <p>
-          It is also important to note that this HOWTO is intended for use with
-          the database implementation of the SecurityService.  I will not address
-          how to extend TurbineUser for use with any other implementation.
-      </p>
-    </section>
-
-    <section name="How does TurbineUser actually work?" >
-
-        <p>
-            The inplementation of TurbineUser and TurbineUserPeer is distributed
-            with Turbine in the <code>org.apache.turbine.om.security</code>
-            package.  It is _NOT_ generated by Torque at this time.  There are
-            no corresponding Base* classes nor a TurbineUserMapBuilder either.
-        </p>
-        <p>
-            TurbineUser implements the User interface (from the same package).
-            This interface is used by the Security Service and a few other
-            services as well.  This is the reason behind not generating TurbineUser
-            through Torque.  It would have no idea how to provide an implementation
-            of the User interface leaving that inplementaion to you.
-        </p>
-        <p>
-            The MapBuilder for TurbineUser is
-            <code>org.apache.turbine.util.db.map.TurbineMapBuilder</code>.  This
-            MapBuilder is also used by Turbine for the other Turbine* classes
-            that are defined in the turbine-schema.xml file distributed with Turbine.
-        </p>
-        <p>
-            The turbine-schema.xml file is the source of a small problem.  The ant task
-            used to generate your OM layer will generate OM objects for all of the tables
-            defined in this file along with the MapBuilders.  These classes do not really
-            hurt anything but they can be a source of confusion.  There are not used
-            by Turbine for anything!
-        </p>
-        <p>
-            One valid reason for leaving this file in place is for the ant task that will
-            create your database schema for you.  Since the task will not modify the schema
-            for you after it is created (to add/remove columns, indexes, etc), it is of
-            little use after the database is created other than to serve as a reference.
-        </p>
-        <p>
-            Later in this discussion, you will be given instruction to rename this file to
-            prevent it from being used by the ant tasks as well as removing any objects
-            generated as a result.
-        </p>
-        <p>
-            Another interesting fact about TurbineUser is the way in which data stored in
-            the database is accessed.  Instaed of using using private attributes for storage
-            within the object, all attibutes are stored in a hashtable (known herein as the
-            perm hashtable).  Access to the perm hashtable is controlled through the
-            getPerm/setPerm methods.
-        </p>
-        <p>
-            When the object is returned from the database, data from the columns are
-            added to the perm hashtable for you.  When you save the object, the data
-            is removed from the perm hashtable and written to the appropriate database
-            columns.
-        </p>
-        <p>
-            As you will read later, any data left in the perm hashtable that does
-            not have a mapped database column (more on this later)
-            during the save operation will be serialized and written to the
-            TURBINE_USER.OBJECTDATA column.
-        </p>
-        <p>
-            Another very nice feature of TurbineUser is the getTemp/setTemp
-            methods.  This allows you to store data in TurbineUser for the duration
-            of the session.  It will not be written to your persistent storage.
-            It is ONLY for the session.  Keep in mind that the login action will
-            replace the user object in the session with a user object from your
-            persistent storage thus removing any data you might have stored in the
-            user.
-        </p>
-
-    </section>
-
-    <section name="Modifications to project-schema.xml">
-      <p>
-        Here is the sample project-schema.xml file before making modifications
-        to reference TURBINE_USER.
-      </p>
-      <source>
-<![CDATA[
-<database defaultIdMethod="native" defaultJavaType="object">
-    <table name="BOOK">
-        <column name="BOOK_ID" required="true" primaryKey="true" type="INTEGER"/>
-        <column name="TITLE" required="true" type="VARCHAR"/>
-        <column name="AUTHOR" required="true" type="VARCHAR"/>
-    </table>
-</database>
-]]>
-      </source>
-      <p>
-        First we update the schema to include an alias definition of TurbineUser
-        as well as the desired foreign key
-        references.  Note how the TurbineUser definition refers to a pair of
-        adapter classes (we will create these shortly) and how it is only
-        necessary to define the columns we are referring to as foreign keys
-        elsewhere in the application database.  Note also the addition of
-        REVIEWED_BY_USER_ID as a foreign key in the BOOK table.
-      </p>
-      <source>
-<![CDATA[
-<database defaultIdMethod="native" defaultJavaType="object">
-    <table name="EXTENDED_USER" alias="TurbineUser"
-            baseClass="org.mycompany.sampleapp.om.TurbineUserAdapter"
-            basePeer="org.mycompany.sampleapp.om.TurbineUserPeerAdapter">
-        <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    </table>
-    <table name="BOOK">
-        <column name="BOOK_ID" required="true" primaryKey="true" type="INTEGER"/>
-        <column name="TITLE" required="true" type="VARCHAR"/>
-        <column name="AUTHOR" required="true" type="VARCHAR"/>
-        <column name="REVIEWED_BY_USER_ID" type="INTEGER"/>
-        <foreign-key foreignTable="EXTENDED_USER">
-            <reference local="REVIEWED_BY_USER_ID" foreign="USER_ID"/>
-        </foreign-key>
-    </table>
-</database>
-]]>
-      </source>
-        <p>
-            Notice the attribute on the database tag for defaultJavaType.  I used
-            "object" as the value.  The default is "primative".  You do not have to
-            use "object"!!!
-        </p>
-        <p>
-            In the last version of Turbine (2.1), the only option was to use the
-            primative types.  However, this posed a small problem.  It was not
-            possible to have number or boolean types that contained null values.
-            If a null value was found in the database for columns of these types,
-            the value returned from the OM object was 0 or false, respectively.
-            This also implies that you can not have non-required foreign key
-            references back to TURBINE_USER.  The primary key of TURBINE_USER
-            is a number.
-        </p>
-    </section>
-
-    <section name="Deciding how additional data in Turbine User will be stored">
-      <p>
-          There are two ways in which additional data in your extended TurbineUser
-          object can be stored.  The first, and simplest method, is to store it in
-          the perm hashtable.  As described earlier, any data in the perm hashtable
-          not mapped to a database column will get serialized into the 
-          TURBINE_USER.OBJECTDATA column.  The second, and perferred method, is to 
-          use additional database column(s) for storage.
-      </p>
-      <p>
-          Although storing the additional data in the TURBINE_USER.OBJECTDATA
-          column is the simplest method, it has a few drawbacks.
-          <ol>
-              <li>
-                  You will not have easy access to the data through SQL.
-              </li>
-              <li>
-                  You will not be able to specify criteria to select TurbineUser
-                  objects from the database by filtering on data stored in
-                  TURBINE_USER.OBJECTDATA.
-              </li>
-              <li>
-                  There is an upper limit to the amount of data that can be stored
-                  in the TURBINE_USER.OBJECTDATA column.  A few users have reported
-                  on the mailing list that they ran into this problem.  The limit
-                  will vary from one database to another.  This limit is reduced
-                  by persistent pull tools (see the docs on the PullService for
-                  details), if you have any in your project,
-                  as they are stored using this method by the PullService.
-              </li>
-          </ol>
-      </p>
-      <p>
-          If you do decide to store some of your additional attributes
-          in the TURBINE_USER.OBJECTDATA column, you need to be careful
-          of possible conflicts with the keys used in the perm hashtable by
-          TurbineUser.  When
-          the object is saved to the database, this data is removed from the
-          perm hashtable and written to the correct columns.  The keys used in the
-          perm hashtable are the uppercase names of the columns.  The column names
-          are not fully qualified with the names of the table like
-          <code>TURBINE_USER.LAST_NAME</code>.  Instead the key used is
-          <code>LAST_NAME</code>.  See
-          <code>org.apache.turbine.util.db.map.TurbineMapBuilder</code> for a
-          complete list of the keys used for the default columns.
-      </p>
-      <p>
-          If you choose to use additional database columns, you will not have
-          any of the drawbacks mentioned above.  Using the additional columns
-          is the approach that should be taken unless you have a 
-          <strong>VERY</strong> good reason not to do so.
-      </p>
-    </section>
-
-    <section name="Implementing adapter and map builder classes">
-        <p>
-            First, we will extend the map builder used by Turbine for the Turbine*
-            classes to add the additional column(s) that we will be using in
-            TURBINE_USER.
-        </p>
-        <source>
-<![CDATA[
-package org.mycompany.sampleapp.util.db.map;
-
-import org.apache.torque.Torque;
-import org.apache.torque.map.TableMap;
-import org.apache.turbine.util.db.map.TurbineMapBuilder;
-
-/**
- * Used to add the mapping of additional columns into any of the
- * TURBINE_* tables.  This can be implemented as an empty class
- * if you are not adding any additional database columns.
- */
-public class TurbineMapBuilderAdapter extends TurbineMapBuilder
-{
-    /*
-    * Note: The getUser_*() methods in this class should be static, but
-    * getTableUser() and the initial field level methods are incorrectly
-    * declared in TurbineMapBuilder and hence we must use non-static methods
-    * here.
-    */
-
-    /**
-     * Gets the name of the database column that we are adding to
-     * TURBINE_USER.
-     * @return The name of the database column.
-     */
-    public static String getTitle()
-    {
-        return "TITLE";
-    }
-
-    /**
-     * Gets the fully qualified column name (TABLE.COLUMN) that will be
-     * used to store the Title attribute in the extended TurbineUser object.
-     * @return The fully qualified database column name.
-     */
-    public String getUser_Title()
-    {
-        return getTableUser() + '.' + getTitle();
-    }
-
-    /**
-     * Creates the map used by Torque to persist the Turbine* objects
-     * to the TURBINE_* tables.
-     * @throws Exception generic error
-     */
-    public void doBuild() throws Exception
-    {
-        // the superclass version of the MapBuilder must be called to create
-        // the mappings for the default columns.
-        super.doBuild();
-
-        // When you add a column to the database map, the map must know
-        // what type of data will be stored in the column.  For that
-        // purpose, we will create a few dummy objects to serve as
-        // data type indicators.  Not all of them are used in our example.
-        Integer dummyInteger = new Integer(0);
-        Date dummyDate = new Date();
-        String dummyString = new String();
-
-        // Add extra column.
-        TableMap tMap = Torque.getDatabaseMap().getTable(getTableUser());
-        tMap.addColumn(getTitle(),dummyInteger);
-    }
-}
-]]>
-      </source>
-      <p>
-          Now we will implement the pair of adapters we referred to in our
-          schema.  First we implement TurbineUserAdapter to provide access
-          to the primary key as well any additional attibutes we are adding.
-      </p>
-      <source>
-<![CDATA[
-package org.mycompany.sampleapp.om;
-
-import org.apache.turbine.om.security.TurbineUser;
-import org.apache.torque.om.NumberKey;
-import org.apache.turbine.util.ObjectUtils;
-
-/**
- * This class extends TurbineUser for the purpose of adding get/set methods
- * for accessing additional attributes.
- */
-public class TurbineUserAdapter extends TurbineUser
-{
-    /** Used as the key in the perm hashtable.  */
-    public static final String TITLE = "TITLE";
-
-    /**
-     * Gets the userId of the user.  This is also the primary key
-     * of the TURBINE_USER table.  The return type of Integer is
-     * valid only if the javaType for the ExtendedUser table
-     * is "object".  If it is "primative", the return type
-     * should be changed to int.
-     * @return the user id
-     */
-    public Integer getUserId()
-    {
-        return new Integer(((NumberKey)getPrimaryKey()).intValue());
-    }
-
-    /**
-     * Sets the title of the user.
-     * @param title the user's title
-     */
-    public void setTitle(String title)
-    {
-        setPerm(TITLE, title);
-    }
-
-    /**
-     * Gets the user's title
-     * @return the user's title
-     */
-    public String getTitle()
-    {
-        String tmp = null;
-        try
-        {
-            tmp = (String) getPerm(TITLE);
-            if ( tmp.length() == 0 )
-            tmp = null;
-        }
-        catch (Exception e)
-        {
-        }
-        return tmp;
-    }
-}
-]]>
-      </source>
-      <p>
-          Note: This class uses the setPerm and getPerm methods to
-          access the data even though we are going to use the TURBINE_USER.TITLE
-          column for storage.  As mentioned earlier, the data is removed from the
-          hashtable when the object is saved to the database and written to the
-          correct database column.  Likewise, the when the object is retrieving
-          data from the database, the data from the TURBINE_USER.TITLE column is
-          added to the perm hashtable with the TITLE key.
-      </p>
-      <p>
-          Next comes TurbineUserPeerAdapter to which we add details of the new
-          database columns.
-      </p>
-      <source>
-<![CDATA[
-package org.mycompany.newapp.om;
-
-import org.mycompany.sampleapp.util.db.map.TurbineMapBuilderAdapter;
-import org.apache.torque.om.ObjectKey;
-import org.apache.torque.util.Criteria;
-import org.apache.turbine.om.security.peer.TurbineUserPeer;
-
-/**
- * This class extends TurbineUserPeer for the purpose of mapping additional
- * database columns.  You can implement this as an empty class if you are not
- * using any additional database columns.
- */
-public class TurbineUserPeerAdapter extends TurbineUserPeer
-{
-    /** the default database name for this class */
-    public static final String DATABASE_NAME = "default";
-
-    /** Used to build the map for the extended Turbine User */
-    private static final TurbineMapBuilderAdapter mapBuilder =
-        (TurbineMapBuilderAdapter)getMapBuilder("org.mycompany.sampleapp.util.db.map.TurbineMapBuilderAdapter");
-
-    /** The fully qualified name of the database table */
-    public static final String TITLE = mapBuilder.getUser_Title();
-
-    /**
-     * Builds a criteria object to select by a primary key value.  Of course,
-     * it could also be used for an update or delete.
-     * @param pk Primary key to select/update/delete
-     * @return A Criteria object built to select by primary key
-     */
-    public static Criteria buildCriteria(ObjectKey pk)
-    {
-        Criteria crit = new Criteria();
-        crit.add(TurbineUserPeer.USER_ID, pk.getValue());
-
-        return crit;
-    }
-}]]>
-      </source>
-    </section>
-
-    <section name="Generating the OM layer">
-        <p>
-            Before generating the OM layer, see if you have a turbine-schema.xml
-            file in your WEB-INF/conf directory.  If you do, rename this file to
-            turbine-schema.xml.nogenerate.  Also, the only Turbine* classes that
-            you should have in your om package are the two adapters that you
-            created earlier.  Any other Turbine* or BaseTurbine* class in your om
-            package should be removed.  You should also remove any om.map.Turbine*
-            classes that might have been generated.
-        </p>
-        <p>
-
-            <b>Warning:  Do not run the init ant task after doing this.</b>
-            That task will drop and recreate your database.  Without the
-            turbine-schema.xml file present, the TURBINE_* tables will not
-            be recreated!
-        </p>
-        <p>
-            These classes were generated from the turbine-schema.xml file.  The
-            project-om ant task will process
-            any file in your WEB-INF/conf directory ending in <code>-schema.xml</code>
-            and generate the appropriate classes from that definition.  Renaming the
-            turbine-schema.xml file stops these extra classes from being generated.
-        </p>
-        <p>
-            Next, you will need to manually create any additional database columns
-            that you will be using in TURBINE_USER.  Make sure that the name of the
-            columns match what you speificied in TurbineUserPeerAdapter.
-        </p>
-        <p>
-            We can now use project-om ant task to generate our OM layer using
-            the adapter classes we defined above.
-        </p>
-        <p>
-            With any luck everything will compile okay and we are only a small step
-            away from being able to use the new OM layer.
-        </p>
-    </section>
-
-    <section name="Modifications to TurbineResources.properties">
-        <p>
-            The last step is to tell Turbine about the new classes we are using for
-            Users and MapBuilder.  To do this we need to update the following
-            entries in TurbineResources.properties:
-        </p>
-      <source>
-<![CDATA[
-database.maps.builder=org.mycompany.sampleapp.util.db.map.TurbineMapBuilderAdapter
-services.SecurityService.user.class=org.mycompany.sampleapp.om.ExtendedUser
-services.SecurityService.userPeer.class=org.mycompany.sampleapp.om.ExtendedUserPeer
-]]>
-      </source>
-        <p>
-            That is basically it.  We can now modify our application to utilise the
-            new columns via the methods defined in the OM objects we have modified.
-            Note that in order to access the new methods in ExtendedUser we need to cast
-            from TurbineUser thus:
-        </p>
-      <source>
-<![CDATA[
-ExtendedUser user = (ExtendedUser) data.getUser();
-]]>
-      </source>
-        <p>
-            Enjoy.
-        </p>
-    </section>
-
-    <section name="Additional Information">
-        <p>
-            For those of you that are attempting to extend TurbineUser to make use of
-            TURBINE_USER.USER_ID as a foreign key in your application tables here is
-            one small problem.
-        </p>
-        <p>
-            Torque generates some pretty useful code that enables you to add related
-            objects to a common parent object and then save them all to the database
-            in one transaction.  You can do something like this:
-        </p>
-        <source>
-<![CDATA[
-OrderDetail od1 = new OrderDetail(500, "item1");
-OrderDetail od2 = new OrderDetail(100, "item2");
-Order o = new Order(clientId);
-o.addOrderDetail(od1);
-o.addOrderDetail(od2);
-o.save();
-]]>
-        </source>
-        <p>
-            This is very helpful - you don't need to worry about the ids that connect
-            the child rows to the parent rows and you don't need to worry about the
-            transaction necessary to insert these into the database as one atomic
-            operation.  It also provides:
-        </p>
-        <source>
-<![CDATA[
-o.save(dbConn);
-]]>
-        </source>
-            <p>
-                which can be used when you have other data you want to commit in a
-                transaction you are managing yourself.
-            </p>
-            <p>
-                Now here is the problem.  After extending TurbineUser in the manner
-                described above, the methods are generated to add records related the
-                extended user class, but the data itself is ignored when
-                ExtendedUser.save() is invoked.  Here is an example:
-            </p>
-        <source>
-<![CDATA[
-Book book = new Book();
-data.getParameters().setProperties(book);
-ExtendedUser user = (ExtendedUser) data.getUser();
-user.addBook(book);
-user.save(); // !!!! book is not saved !!!!
-]]>
-        </source>
-            <p>
-                Of course replacing the last two lines with:
-            </p>
-        <source>
-<![CDATA[
-book.setReviewedByUserId(user.getUserId());
-book.save();
-]]>
-        </source>
-            <p>
-                will in fact save the Book, this is beside the point - the other method
-                addBook() shouldn't exist if it doesn't work and this is a trivial example.
-            </p>
-            <p>
-                In addition to this, there is no equivalent save(dbConn) method provided
-                to allow this update to be combined with others within a single database
-                transaction.
-            </p>
-            <p>
-                There are a few solutions to this problem.  One would be to fix the torque
-                template responsible for generating the code.  Another would be to implement
-                the methods yourself.  Before exploring either of these options, you need to
-                ask yourself if this problem will even affect you.  If not, don't worry about
-                it.
-            </p>
-            <p>
-                Implementing the methods yourself might be the simpliest route for someone
-                new to Turbine and Torque.  This simply involves overriding the addBook()
-                method in the example above with the two lines shown previously.  Of course,
-                You would have to do this for each and every one that Torque generates
-                for you.
-            </p>
-            <p>
-                The same idea applies to the save(dbConn) method.  Simply override that method
-                in your ExtendedTurbineUser class (or whatever you called your class) to perform
-                the operation correctly.  You can get sample code from one of the other classes
-                that Torque generated for you.
-            </p>
-            <p>
-                If you want Torque to generate to code for you, you will have to modify the
-                Object.vm template that Torque uses.
-            </p>
-            <p>
-                The other solution involves altering a torque template so that the code that
-                generates the aspects of the save() method that handle related tables is
-                allowed to execute for the TurbineUserAlias class.  You need to apply the
-                following patch (most likely to the version of Object.vm copied to the
-                WEB-INF/build/bin/torque/templates/om directory for your application):
-            </p>
-        <source>
-<![CDATA[
-Index: jakarta-turbine-2/conf/torque/templates/om/Object.vm
-===================================================================
-RCS file: /home/cvspublic/jakarta-turbine-2/conf/torque/templates/om/Object.vm,v
-
-retrieving revision 1.3
-diff -u -r1.3 Object.vm
---- jakarta-turbine-2/conf/torque/templates/om/Object.vm        24 Oct 2001 18:1
-2:21 -0000      1.3
-+++ jakarta-turbine-2/conf/torque/templates/om/Object.vm        16 Jan 2002 14:0
-0:43 -0000
-@@ -787,7 +787,7 @@
-#end     ## ends the if(addGetByNameMethod)
-
-
--#if (!$table.isAlias() && $addSaveMethod)
-+#if ((!$table.isAlias() || $table.Alias == "TurbineUser") && $addSaveMethod)
-/**
-* Stores the object in the database.  If the object is new,
-* it inserts it; otherwise an update is performed.
-@@ -880,6 +880,9 @@
-{
-alreadyInSave = true;
-#end
-+    #if ($table.isAlias() && $table.Alias == "TurbineUser")
-+        super.save();
-+    #else
-if (isModified())
-{
-if (isNew())
-@@ -892,6 +895,7 @@
-${table.JavaName}Peer.doUpdate(($table.JavaName)this, dbCon);
-}
-}
-+    #end
-
-#if ($complexObjectModel)
-#foreach ($fk in $table.Referrers)
-]]>
-        </source>
-            <p>
-                You will need to manually remove the line wrapping from the above
-                patch.  This patch is only included here to give you an idea of what
-                would need to be changed in Torque.  The patch can not be applied
-                to the current version of Torque simply because it is so outdated.
-            </p>
-            <p>
-                Notice how although you can go <code>user.save(dbCon);</code> the
-                TurbineUser record will not be part of the transaction.
-            </p>
-            <p>
-                I would suggest that you override the methods that do not
-                get generated correctly in your ExtendedTurbineUser class.  Do so ONLY
-                if this problem will affect you.
-            </p>
-            <p>
-                The real solution to this problem is in modifing Turbine in such a way to
-                allow Torque to generate the TurbineUser object.  This would eliminate the
-                need to extend TurbineUser altogether.  There would still be the need to add
-                additional columns and/or create FK references to the TURBINE_USER table.  It
-                would would only involve modifing the schema files and letting Torque do
-                all of the work instead of creating the adapter classes and modifing the
-                map builder.
-            </p>
-            <p>
-                Note:  The last solution mentioned should be ready for Turbine 2.3.  This
-                should make life easier for everyone!!!
-            </p>
-
-    </section>
-
-  </body>
-</document>
diff --git a/xdocs/howto/hibernate-howto.xml b/xdocs/howto/hibernate-howto.xml
deleted file mode 100644
index 12c00f5..0000000
--- a/xdocs/howto/hibernate-howto.xml
+++ /dev/null
@@ -1,571 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Hibernate Howto</title>
-  </properties>
-
-  <body>
-
-    <section name="Introduction">
-      <p>
-        This is a HOWTO on implementing Hibernate as the database OM layer.  The motivating factors for using Hibernate
-        are:
-        <ol>
-          <li>
-      You just use POJO (Plain Old Java Objects) versus generated objects.
-          </li>
-          <li>
-      You can either start with Java objects and create your database schema from there, or 
-      start with a database schema, and map the Java objects to the schema.
-          </li>
-          <li>
-      Extensive performance optimizations built into the Hibernate engine.
-          </li>          
-          <li>
-      Leverage Avalon component use in Turbine 2.3!
-          </li>                    
-        </ol>
-      </p>
-      <p>
-        Please review the content available from the Hibernate homepage.  This howto assumes
-        you already are confortable with the various Hibernate concepts.
-      </p>
-      <p>
-    In this example, we will take a simple schema with a single table and integrate Hibernate into
-    a Turbine action.  We will talk about best practices for Hibernate and Turbine.
-        <ol>
-          <li>
-        Configure project dependencies.
-          </li>        
-          <li>
-        Directory Structures
-          </li>
-    
-          <li>
-        Setup Avalon component configuration.
-          </li>
-          
-          <li>
-          Setup Hibernate mapping files.
-          </li>
-          <li>
-          Create static ServiceLocator class.
-          </li>          
-          <li>
-            Create filter that manages the Hibernate Session.
-          </li>
-          <li>
-            Setup PersitenceException handling
-          </li>          
-        </ol>
-      </p>
-
-    </section>
-
-    <section name="Directory Structures">
-      <p>
-      While you can organize your directory structure however you like, I tend to have structure like:
-      </p>
-      <source>
-      /src/java/com/my/project/bizobj business objects reside
-      /src/java/com/my/project/om POJO objects mapped to database reside
-      /src/java/com/my/project/om/persist manager objects that faciliate retrieve POJO objects
-      /src/java/com/my/project/om/filter Servlet Filter lives that maintains the Hibernate Session 
-      /src/java/ where hibernate.hbm.xml and hibernate.cfg.xml files live
-      
-    </source>
-
-    </section>
-
-    <section name="Configure project dependencies" >
-      <p>
-        The easiest way to maintain a project is to use Maven.  Here are the sample
-        dependencies for your project.xml.
-      </p>
-      <source>
-<![CDATA[
-    <dependency>
-      <id>hibernate</id>      
-      <version>2.0-beta6</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>  
-    <dependency>
-      <id>hibernate:hibernate-avalon</id>
-      <version>0.1</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>              
-    </dependency>  
-    <dependency>
-      <id>dom4j</id>      
-      <version>1.4</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>       
-    <dependency>
-      <id>cglib</id>      
-      <version>rc2-1.0</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>                          
-    <dependency>
-      <id>jcs</id>      
-      <version>1.0-dev</version>
-      <properties>        
-      <war.bundle.jar>true</war.bundle.jar>
-      </properties>
-    </dependency>                       
-]]>
-      </source>     
-      <p>
-        The key jar file is the hibernate-avalon.jar file, it contains the Avalon wrapper
-        for Hibernate, and can be used with any Avalon container.
-      </p>
-        
-    </section>
-
-    <section name="Setting up Avalon Configuration" >
-
-        <p>
-      We leverage the Avalon based HibernateService that is hosted as part of the
-      HibernateExt project.  You must specify the name of the service, as well as the implementing
-      service in your componentConfiguration.xml file.  Other configuration parameters can be passed
-      in as well.
-        </p>
-      <source>
-<![CDATA[
-
-<my-system>
-  <component
-    role="net.sf.hibernate.avalon.HibernateService"
-    class="net.sf.hibernate.avalon.HibernateServiceImpl">
-  </component>
-</my-system>
-                      
-]]>
-      </source>     
-
-        <p>
-      The componentRoles file also defines how to access the component.  Here is a 
-      very simple componentRoles.xml file:
-        </p>
-      <source>
-<![CDATA[
-
-<role-list>
- <role
-    name="net.sf.hibernate.avalon.HibernateService"
-    shorthand="hibernate"
-    default-class="net.sf.hibernate.avalon.HibernateServiceImpl"/>   
-</role-list>
-                      
-]]>
-      </source>             
-    </section>
-      
-      
-
-    <section name="Setup Hibernate mapping files">
-      <p>
-    This section will not go into depth on how to configure the hibernate.cfg.xml and
-    hibernate.hbm.xml files.  However, if you don't specify in the componentConfiguration.xml
-    file where they are located, then they should be placed in your src/java/ directory.
-      </p>
-      <p>
-        The exact configuration is dependent on the environment Turbine is running in, however
-        I highly recommend that you use the JNDI look up of the datasource, and use DBCP for your
-        connection pooling.  I have found that when using Hibernate in cactus tests, you may need to
-        increase the pool size required in order to not run out of connections, however this doesn't
-        seem to apply to running as a web application.
-      </p>
-    </section>
-
-
-
-    <section name="Create static ServiceLocator class.">
-      <p>
-    Currently this class is not integrated into Turbine, so you will need to provide an implemation yourself.
-    This provides a static method of retrieving your Hibernate Session.
-      </p>
-     
-        <source>
-<![CDATA[
-package com.upstate.cellculture.om.persist;
-
-import net.sf.hibernate.HibernateException;
-import net.sf.hibernate.JDBCException;
-import net.sf.hibernate.Session;
-import net.sf.hibernate.SessionFactory;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * This class is used to get Hibernate Sessions and may
- * also contain methods (in the future) to get DBConnections
- * or Transactions from JNDI.
- */
-public class ServiceLocator
-{
-    //~ Static fields/initializers =============================================
-    public final static String SESSION_FACTORY = "hibernate/sessionFactory";
-    public static final ThreadLocal session = new ThreadLocal();
-    private static SessionFactory sf = null;
-    private static ServiceLocator me;
-    private static Log log = LogFactory.getLog(ServiceLocator.class);
-
-    static {
-        try
-        {
-            me = new ServiceLocator();
-        }
-        catch (Exception e)
-        {
-            log.fatal("Error occurred initializing ServiceLocator");
-            e.printStackTrace();
-        }
-    }
-
-    //~ Constructors ===========================================================
-
-    private ServiceLocator() throws HibernateException, JDBCException
-    {}
-
-    //~ Methods ================================================================
-
-    public static Session currentSession() throws PersistenceException
-    {
-        Session s = (Session) session.get();
-
-        if (s == null)
-        {
-            s = PersistenceManager.openSession();
-            if (log.isDebugEnabled())
-            {
-                log.debug("Opened hibernate session.");
-            }
-
-            session.set(s);
-        }
-
-        return s;
-    }
-
-    public static void closeSession() throws HibernateException, JDBCException
-    {
-        Session s = (Session) session.get();
-        session.set(null);
-
-        if (s != null)
-        {
-            if (s.isOpen())
-            {
-                s.flush();
-                s.close();
-
-                if (log.isDebugEnabled())
-                {
-                    log.debug("Closed hibernate session.");
-                }
-            }
-        }
-        else
-        {
-            log.warn("Hibernate session was inadvertently already closed.");
-
-        }
-    }
-}
-]]>
-      </source>
-    </section>
-
-    <section name="Create Servlet Filter.">
-      <p>
-        The servlet Filter is required if you use lazy loading of objects because you need to open a Hibernate sesion, and keeps it open through the view layer. 
-        This ensures that each user get's their own Hibernate Session.  ?? Should this be done
-        through some sort of SessionValidator?
-
-      </p>
-     
-        <source>
-<![CDATA[        
-package com.upstate.cellculture.filter;
-
-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 javax.servlet.http.HttpSession;
-
-import net.sf.hibernate.Session;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import com.upstate.cellculture.om.persist.PersistenceException;
-import com.upstate.cellculture.om.persist.ServiceLocator;
-
-public class ActionFilter implements Filter
-{
-    //~ Static fields/initializers =============================================
-
-    //~ Instance fields ========================================================
-
-    /**
-     * The <code>Log</code> instance for this class
-     */
-    private Log log = LogFactory.getLog(ActionFilter.class);
-    private FilterConfig filterConfig = null;
-
-    //~ Methods ================================================================
-
-    public void init(FilterConfig filterConfig) throws ServletException
-    {
-        this.filterConfig = filterConfig;
-
-    }
-
-    /**
-     * Destroys the filter.
-     */
-    public void destroy()
-    {
-        filterConfig = null;
-    }
-
-    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException
-    {
-        // cast to the types I want to use
-        HttpServletRequest request = (HttpServletRequest) req;
-        HttpServletResponse response = (HttpServletResponse) resp;
-        HttpSession session = request.getSession(true);
-
-        Session ses = null;
-        boolean sessionCreated = false;
-
-        try
-        {
-            chain.doFilter(request, response);
-        }
-        finally
-        {
-            try
-            {
-                ServiceLocator.closeSession();
-            }
-            catch (Exception exc)
-            {
-                log.error("Error closing hibernate session.", exc);
-                exc.printStackTrace();
-            }
-        }
-    }
-
-    public static Session getSession() throws PersistenceException
-    {
-        try
-        {
-
-            return ServiceLocator.currentSession();
-        }
-        catch (Exception e)
-        {
-            throw new PersistenceException("Could not find current Hibernate session.", e);
-        }
-
-    }
-}
-
-]]>
-      </source>
-    </section>
-
-
-
-
-
-
-    <section name="Implementing Manager classes">
-        <p>
-      To centralize access to the database, we create Manager classes.  Often Manager
-      classes are called DAO (Data Access Classes).  Here is an example:
-        </p>
-        <source>
-<![CDATA[
-/*
- * Created on Apr 28, 2003
- *
- */
-package com.upstate.cellculture.om.persist;
-import java.util.List;
-
-import net.sf.hibernate.Query;
-import net.sf.hibernate.Session;
-
-import com.upstate.cellculture.om.Technician;
-/**
- * @author tmckinney
- *
- * Centralizes all access to the Technicians table
- */
-public class TechnicianManager
-{
-    private static List allTechnicians;
-    public static void save(Technician technician) throws PersistenceException
-    {
-        try
-        {
-
-            ServiceLocator.currentSession().save(technician);
-
-        }
-        catch (Exception e)
-        {
-            throw new PersistenceException("Could not save.", e);
-        }
-    }
-
-    public static Technician retrieveByPK(long technicianId) throws PersistenceException
-       {
-           try
-             {
-                 Technician technician= (Technician) ServiceLocator.currentSession().load(Technician.class, new Long(technicianId));
-                 return technician;
-             }
-             catch (Exception e)
-             {
-                 throw new PersistenceException("Could not retrieve.", e);
-             }
-       }
-
-
-    public static List retrieveAllTechnicians() throws PersistenceException
-    {
-        if (allTechnicians == null)
-        {
-            try
-            {
-                Query q = ServiceLocator.currentSession().createQuery("from technician in class " + Technician.class +" order by upper(technician.name)");
-                allTechnicians = q.list();
-                session.flush();
-            }
-            catch (Exception e)
-            {
-                e.printStackTrace();
-                throw new PersistenceException(e);
-            }
-        }
-        return allTechnicians;
-
-    }
-
-
-}
-
-]]>
-      </source>
-      <p>
-          By using this TechnicianManager class, we could feasibly swap out the Hibernate code
-          for another OM strategy.  Even better would be to have a TechnicianManager interface
-          and a TechicianManagerImpl class.  Possibly loaded via Avalon as a component!
-      </p>
-    </section>
-
-    <section name="Setup PersitenceException handling">
-        <p>
-      By catching a generice Persistence Exception that wraps all the
-      thrown exceptions we can just catch a single exception and then 
-      retrieve what type of exception it is.
-        </p>
-        <source>
-<![CDATA[
-package com.upstate.cellculture.om.persist;
-
-import org.apache.commons.lang.exception.NestableException;
-/**
- * A general PersistenceException that is thrown by all Manager classes.
- *
- */
-public class PersistenceException extends NestableException
-{
-    //~ Constructors ===========================================================
-
-    /**
-     * Constructor for PersistenceException.
-     */
-    public PersistenceException()
-    {
-        super();
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param message
-     */
-    public PersistenceException(String message)
-    {
-        super(message);
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param message
-     * @param cause
-     */
-    public PersistenceException(String message, Throwable cause)
-    {
-        super(message, cause);
-    }
-
-    /**
-     * Constructor for PersistenceException.
-     *
-     * @param cause
-     */
-    public PersistenceException(Throwable cause)
-    {
-        super(cause);
-    }
-
-}
-
-]]>
-      </source>
-
-    </section>
-  </body>
-</document>
-
-
diff --git a/xdocs/howto/ide-vaj-wte-howto.xml b/xdocs/howto/ide-vaj-wte-howto.xml
deleted file mode 100644
index f8ac6d1..0000000
--- a/xdocs/howto/ide-vaj-wte-howto.xml
+++ /dev/null
@@ -1,148 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>VAJava and WebSphere Test Environment</title>
-  </header>
-
-  <body>
-
-    <section name="Forewords and Requirements">
-
-      <p>
-        This tutorial explains how to run Turbine within VisualAge for
-        Java WebSphere Test Environment.
-      </p>
-      <p>
-        This tutorial works with VAJava 3.5.2 and 3.5.3. Please tell us if you 
-        find that it works with other versions.
-      </p>
-
-    </section>
-
-    <section name="Step 1 : Import the correct packages in VAJava">
-
-      <p>
-        Let's assume the following conventions :
-        <strong><code>{Turbine dir}</code></strong> is the directory where you
-        have unzipped the Turbine distribution or sources and
-        <strong><code>{VAJava dir}</code></strong> is the directory where
-        VAJava is installed. Let's also define <strong><code>{WTE dir}</code>
-        </strong> to be the WebSphere Test Environment directories, i.e.
-        <code>{VAJava dir}/ide/project_resources/IBM WebSphere Test
-        Environment</code>.
-      </p>
-
-      <p>
-        You need to create a project : Turbine
-      </p>
-      
-      <p>
-        Import into Turbine project all JARS/SRC associated with the specific 
-        Turbine release
-      </p>      
-
-    </section>
-
-    <section name="Step 2 : Modify WebSphere Test Environment">
-
-      <section name="Edit default.servlet_engine">
-
-        <p>
-          Edit <code>{WTE dir}/properties/default.servlet_engine</code> and
-          add the following under the <code>default_app</code> webgroup :
-        </p>
-
-<source><![CDATA[
-    <websphere-webgroup name="turbine">
-       <description>Turbine Application Framework</description>
-       <document-root>$approot$/web</document-root>
-       <classpath>$approot$/servlets</classpath>
-       <root-uri>/turbine</root-uri>
-       <auto-reload enabled="true" polling-interval="3000"/>
-       <shared-context>false</shared-context>
-    </websphere-webgroup>
-]]></source>
-
-      </section>
-
-      <section name="Create a turbine directory">
-
-        <p>
-          Create a directory called <code>turbine</code> under
-          <code>{WTE dir}/hosts/default_host</code>. Under <code>turbine</code>
-          create another 2 subdirectories : <code>servlets</code> and
-          <code>web</code>.
-        </p>
-        
-        <p>
-	Create the following directories (which is similiar to the TDK distribution)
-	under the web directory.
-	<li> images </li>
-	<li> logs </li>
-	<li> resources</li>
-	<li> stylesheets</li>
-	<li> templates</li>
-	<li> WEB-INF/conf</li>
-        </p>    
-        <p>
-        Copy the TurbineResource.properties file to the "WEB-INF/conf" directory. The templates, 
-        logs etc. directories are quite self explanetory I think.
-        </p>    
-
-      </section>
-
-      <section name="Create a turbine.webapp file">
-
-        <p>
-          Create a <code>turbine.webapp</code> file in
-          <code>{WTE dir}/host/default_app/servlets</code> and put the following
-          content :
-<source><![CDATA[
-<webapp>
-   <name>turbine</name>
-   <description>Turbine Application Framework</description>
-   <error-page>/ErrorReporter</error-page>
-
-   <servlet>
-      <name>turbine</name>
-      <description>Turbine Application Framework</description>
-      <code>org.apache.turbine.Turbine</code>
-      <servlet-path>/ServletRedirector</servlet-path>
-      <autostart>true</autostart>
-   </servlet> 
- </webapp>
-]]></source>          
-        </p>
-
-      </section>
-
-    </section>
-
-    <section name="Step 3 : Edit VAJava workspace classpath">
-
-      <p>
-        In the WebSphere Test Environment under Servlet Engine, add Turbine to the classpath.
-      </p>
-
-    </section>
-  </body>
-</document>
-
diff --git a/xdocs/howto/index.xml b/xdocs/howto/index.xml
deleted file mode 100644
index b5114e1..0000000
--- a/xdocs/howto/index.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Turbine</title>
-  </properties>
-
-  <body>
-
-  <section name="Howtos">
-    <p>
-      <ul>
-        <li><a href="action-event-howto.html">Action Events Howto</a></li>
-        <li><a href="configuration-howto.html">Configuration Howto</a></li>
-        <li><a href="extend-user-howto.html">Extend User Howto</a></li>
-        <li><a href="intake-howto.html">Intake Howto</a></li>
-        <li><a href="jboss-howto.html">JBoss Howto</a></li>
-        <li><a href="jsp-howto.html">JSP Howto</a></li>
-        <li><a href="migrate-from-2_1-howto.html">Migrating from 2.1 to 2.2</a></li>
-        <li><a href="migrate-from-2_2-howto.html">Migrating from 2.2 to 2.3</a></li>
-        <li><a href="pullmodel-howto.html">Pull Model Howto</a></li>
-        <li><a href="python-howto.html">Python Howto</a></li>
-        <li><a href="security-howto.html">Security Howto</a></li>
-        <li><a href="services-howto.html">Services Howto</a></li>
-        <li><a href="url-rewriting-howto.html">URL rewriting Howto</a></li>
-        <li><a href="context-howto.html">Velocity Context Howto</a></li>
-        <li><a href="velocity-site-howto.html">Velocity Site Howto</a></li>
-        <li><a href="velocityonlylayout-howto.html">VelocityOnlyLayout Howto</a></li>
-        <li><a href="hibernate-howto.html">Hibernate OM Howto</a></li>
-        <li><a href="http://nagoya.apache.org/wiki/apachewiki.cgi?search=CategoryJakartaTurbine2HowTo">
-            Additional Howtos from the Apache Wiki</a></li>
-      </ul>
-    </p>
-  </section>
-
-  </body>
-</document>
diff --git a/xdocs/howto/intake-howto.xml b/xdocs/howto/intake-howto.xml
deleted file mode 100644
index b6c1351..0000000
--- a/xdocs/howto/intake-howto.xml
+++ /dev/null
@@ -1,551 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-    <properties>
-        <title>"Simple" Intake How-to for Turbine 2.1</title>
-    </properties>
-
-    <body>
-        <section name="Introduction">
-            <p>
-                First of all I'd like to note that this document is based on my
-                experience in using Intake for Turbine 2.1.  I've tried to make
-                it as correct as possible but I don't guarantee anything.  This
-                has been written as a guide for a new Intake user and assumes
-                some familiarity with Turbine 2.1.
-            </p>
-            <p>
-                To use intake, the following steps are required:
-
-                <ol>
-                    <li>Create your turbine template with a form.</li>
-                    <li>Create the intake.xml file.</li>
-                    <li>Create a business object to represent the intake group
-                        we are working with (this is optional).</li>
-                    <li>Create the Turbine Action to handle the form
-                        submission.</li>
-                </ol>
-            </p>
-            <p>
-                Some additional information concerning removing Intake group
-                information from the request is included at the bottom of this
-                document.
-            </p>
-        </section>
-
-        <section name="Step 1: Create your turbine template with a form">
-            <p>
-                The first thing to do is the create the form in your template
-                (e.g. a velocity template file, a .vm file).  Just create the
-                skeleton structure and don't worry about the field names and
-                values yet.  Note that field names will have to match the names
-                specified in the intake.xml file.  Actually you can do the
-                opposite (name the fields here first and match them in the
-                intake.xml file) if you wish, but this guide will do it the
-                former way.
-            </p>
-            <p>
-                Now add the following lines above the code for your form and
-                modify it to match the group and field names in your intake.xml
-                file (perhaps you can come back to do this step after you've
-                done your intake.xml file).  Here is an example in a Velocity
-                template for a "login form":
-            </p>
-            <source><![CDATA[
-#set($loginGroup = $intake.LoginGroup.Default)
-            ]]></source>
-            <p/>
-            <p>
-                What this does is to set a Velocity variable called $loginGroup
-                to a default group object specified by intake.xml.  The $intake
-                variable is the Turbine Pull Tool instance (IntakeTool).  The
-                "LoginGroup" is the name of the group as specified in the
-                intake.xml file (names must match, and this is not the group's
-                key attribute.).  The "Default" part obtains a generic default
-                intake group object. Or in other words, this resolves to
-                IntakeTool.get(String groupName) with the groupName being
-                "LoginGroup".  Also, you can re-write the statement as
-                $intake.get("LoginGroup").getDefault() in your template.
-            </p>
-            <p>
-                Or if you would like to map the intake group to a business
-                object (for whatever purpose) then you can do this (read on
-                for more info on what is required to do this in intake.xml and
-                the corresponding Turbine Action class):
-            </p>
-            <source><![CDATA[
-#set($loginGroup = $intake.LoginGroup.mapTo($mytool.getInstanceLoginForm()))
-            ]]></source>
-            <p/>
-            <p>
-                What this does is to set a Velocity variable called $loginGroup
-                to an instance of the LoginForm business object (and if the
-                returned object has values in its fields and appropriate
-                "getter" methods then this would prepopulate the intake group
-                with the values.  A good usage example of this is when you
-                would like to prepopulate the form with values from the
-                database and want to use intake to validate the form).  It
-                makes use of a custom tool placed into the Velocity context as
-                "$mytool" (you can make your own tool to instantiate an instance
-                of your business object similar to this example).
-            </p>
-            <p>
-                So, depending on the method you use above, the corresponding
-                Turbine Action code will need to "cooperate" accordingly.
-                We'll discuss this later in step 4.
-            </p>
-            <p>
-                Near the end of the form (before you close the "form" tag)
-                include the following line:
-            </p>
-            <source><![CDATA[
-$intake.declareGroups()
-            ]]></source>
-            <p/>
-            <p>
-                What this does is to fill in hidden form fields into the form
-                for use by intake.
-            </p>
-            <p>
-                In order to use Turbine's Action event system, the submit buttons
-                must adhere to the naming specification defined by
-                <a href="http://jakarta.apache.org/turbine/turbine-2/howto/action-event-howto.html">
-                Turbine's Action event system</a>.
-            </p>
-
-            <subsection name="*** IMPORTANT NOTE ***">
-                <p>
-                    If you use
-                    $link.setAction('SomeAction').setPage('NextTemplate.vm')
-                    in your form's action attribute like this:
-                </p>
-                <source><![CDATA[
-<form name="myForm" method="POST"
-      action="$link.setAction('LoginAction').setPage('NextTemplate.vm')">
-    ...
-</form>
-                ]]></source>
-                <p/>
-                <p>
-                    then the form validation won't appear to work (i.e. the user
-                    will see the NextTemplate.vm file instead of the form they
-                    were trying to fill out which failed validation).  To work
-                    around this problem, you can omit the setPage('...') part
-                    in your form's action attribute and then have your action
-                    route the user to the next template on validation success
-                    OR somehow detect the current form the user is at and if
-                    the validation fails, override the next template to the
-                    current template (which is really just overriding the
-                    setPage() part in the template file specified by the web
-                    designer).
-                </p>
-            </subsection>
-        </section>
-
-        <section name="Step 2: Create the intake.xml file">
-            <p>
-                The intake.xml file specifies the validation rules required to
-                be satisfied in order for the form to be accepted.  The file has
-                a "root" XML element of "input-data" and in that would be
-                "group" elements.
-            </p>
-            <p>
-                Here is an example of the element (with no other sub-elements):
-            </p>
-            <source><![CDATA[
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!DOCTYPE input-data SYSTEM
-           "http://jakarta.apache.org/turbine/dtd/intake_2_3.dtd">
-<input-data basePackage="ca.yorku.devteam.inca.clients.skeleton.">
-    ...group elements goes here...
-</input-data>
-            ]]></source>
-            <p/>
-            <p>
-                Notice the basePackage attribute (optional) points to the
-                skeleton package with an extra period at the end.  This
-                attribute specifies the package that contains the java objects
-                the "group" and "field" elements can optionally map to.
-                The trailing period is REQUIRED.
-            </p>
-
-            <subsection name="&lt;group&gt; elements">
-                <p>
-                    Each group element represents a collection of field information you'd like to
-                    validate in your form.  For example, on a login page you would have a form for
-                    the user to input their username and password, and as well as a login button.
-                    This entire form would be grouped as a group in the intake.xml file.
-                </p>
-                <p>
-                    Here is an example of a group with no other elements (not useful yet):
-                </p>
-                <source><![CDATA[
-<group name="LoginGroup" key="loginGroupKey" mapToObject="LoginForm">
-    ...field elements goes here...
-</group>
-                ]]></source>
-                <p/>
-                <p>
-                    A group element can have the following attributes:
-
-                    <ul>
-                        <li>"name" attribute
-                            <ul>
-                                <li>
-                                    the name of the group, is required, and must
-                                    be unique across the entire intake.xml file.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-
-                    <ul>
-                        <li>"key" attribute
-                            <ul>
-                                <li>
-                                    the key of the group, is required, and must
-                                    be unique across the entire intake.xml file.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-
-                    <ul>
-                        <li>"mapToObject" attribute
-                            <ul>
-                                <li>
-                                    optional, used if you want to map the form
-                                    to a business object. Note that the field
-                                    names specified later by the "field" element
-                                    in the group should match the field names of
-                                    the business object with appropriate get/set
-                                    methods.  See the "field" tag examples to
-                                    find how to override this default behaviour.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-                </p>
-                <p>
-                    For a complete list of valid attributes of the group
-                    element, please see the
-                    <a href="http://jakarta.apache.org/turbine/turbine-2/services/intake-service.html">
-                    intake-service document</a> on the Turbine web site.
-                </p>
-            </subsection>
-
-            <subsection name="&lt;field&gt; elements">
-                <p>
-                    Each group element can contain any number of "field"
-                    elements.  Each field element will correspond to a field in
-                    the form.  The name and key of each field will be used in
-                    the form code in the template so make sure the names and
-                    keys match in both files (intake.xml and the template file).
-                </p>
-                <p>
-                    Here is an example of a field with no other elements (not
-                    too useful yet):
-                </p>
-                <source><![CDATA[
-<field name="Username" key="loginUsernameKey" type="String"
-        mapToProperty="Username">
-    ...rule elements goes here...
-</field>
-                ]]></source>
-                <p/>
-                <p>
-                    A field element can have the following attributes:
-
-                    <ul>
-                        <li>"name" attribute
-                            <ul>
-                                <li>
-                                    the name of the field, is required, and must
-                                    be unique across the entire group element.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-
-                    <ul>
-                        <li>"key" attribute
-                            <ul>
-                                <li>
-                                    the key of the field, is required, and must
-                                    be unique across the entire group element.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-
-                    <ul>
-                        <li>"type" attribute
-                            <ul>
-                                <li>
-                                    required, the type of the field so that
-                                    intake will know what to expect.  Valid
-                                    types I know of are: String, Integer (I
-                                    believe these map to the corresponding Java
-                                    types).  Please see the intake.dtd for the
-                                    allowed values.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-
-                    <ul>
-                        <li>"mapToProperty" attribute
-                            <ul>
-                                <li>
-                                    optional, used if you want to map the form
-                                    to a business object.  Note that the field
-                                    names specified in this "field" element
-                                    should match the field name of the business
-                                    object with appropriate get/set methods.
-                                </li>
-                            </ul>
-                        </li>
-                    </ul>
-                </p>
-                <p>
-                    For a complete list of valid attributes of the field
-                    element, please see the
-                    <a href="http://jakarta.apache.org/turbine/turbine-2/services/intake-service.html">
-                    intake-service document</a> on the Turbine web site.
-                </p>
-            </subsection>
-
-            <subsection name="&lt;rule&gt; elements">
-                <p>
-                    In each field element, you can have rules defined.  The
-                    supported rule elements for Intake in Turbine 2.1 are:
-                </p>
-                <source><![CDATA[
-<rule name="required" value="true">Error message for required failed</rule>
-<rule name="minLength" value="4">Error message for required min length failed</rule>
-<rule name="maxLength" value="9">Error message for required max length failed</rule>
-<rule name="mask" value="^[0-9]+$">Error message for regular expression failed</rule>
-<rule name="notANumberMessage">Error message for Number fields when the entry is not a number</rule>
-
-                ]]></source>
-                <p/>
-                <p>
-                    For more info on the supported rules, please see the
-                    <a href="http://jakarta.apache.org/turbine/turbine-2/services/intake-service.html">
-                    intake-service document</a> on the Turbine web site:
-                </p>
-            </subsection>
-        </section>
-
-        <section name="Step 3: Create a business object to represent the intake group we are working with (this is optional).">
-            <p>
-                The business object is basically a Java class that has get and
-                set methods for each of the object's fields, and these get and
-                set method names should match the field names specified in the
-                intake.xml file (whether we stay with the default behaviour of
-                matching the field names in intake.xml and the business object
-                or we use the mapToProperty attribute in the "field" element).
-                Note it is required to use the mapToObject property in the group
-                element to use this feature.
-            </p>
-            <p>
-                The business object also has to implement the
-                org.apache.turbine.om.Retrievable interface.  The Retrievable
-                was designed to work with a database so the methods
-                get/setQueryKey doesn't make much sense if your business object
-                isn't based on a database model.  For my use, I just force the
-                key to be "_0" which is the default key used by Intake (as of
-                Turbine 2.1).  You could, of course, implement it as a normal
-                data field to allow the template to set the query key and then
-                in the Action to get the query key.  But then you'll have to
-                keep track of the key you use in both the template file and
-                Action class (the benefit would be that you'll be able to use
-                more than 1 business object in the same template if you get/set
-                the different query keys).
-            </p>
-            <p>
-                Here is an example of how to use the setQueryKey() and
-                getQueryKey() methods of the business object that implements
-                the Retrievable interface:
-            </p>
-            <p>
-                In the template file, e.g. myform.vm:
-            </p>
-            <source><![CDATA[
-#set($loginForm = $mytool.getLoginFormInstance())
-$loginForm.setQueryKey("abc")
-#set($loginGroup = $intake.LoginGroup.mapTo($loginForm))
-            ]]></source>
-            <p/>
-            <p>
-                In the Action class:
-            </p>
-            <source><![CDATA[
-// This key has to match the one in the template
-String key = "abc";
-Group group = intake.get("LoginGroup", key);
-            ]]></source>
-            <p/>
-        </section>
-
-        <section name="Step 4: Create the Turbine Action to handle the form submission.">
-            <p>
-                Depending on the method you use, the code in the action will
-                need to obtain the corresponding group object from intake.  The
-                following examples will demonstrate the ideas.
-            </p>
-            <p>
-                Here is an example the code in a Turbine Action, using intake
-                without mapping to a business object (vanilla method):
-            </p>
-            <source><![CDATA[
-/**
- * Performs user login
- */
-public void doLogin(RunData data, Context context)
-        throws Exception {
-    // Get intake group
-    IntakeTool intake =
-            (IntakeTool)context.get("intake");
-
-    // Notice how this gets the group named "LoginGroup" as defined in
-    // the intake.xml file, and gets it using the default key
-    // IntakeTool.DEFAULT_KEY (which is "_0").
-    Group group = intake.get("LoginGroup", IntakeTool.DEFAULT_KEY);
-
-    // Check if group fields are valid and if they are not, then return.
-    // Intake will handle the validation error and display the
-    // corresponding error messages to the user but if you use the setPage()
-    // mechanism to get the "next template" then you must now set the
-    // template to be the same one as the user was filling out.  Otherwise
-    // the user will just see the next template.  See the "important note"
-    // in step 1.
-    if (!group.isAllValid()) {
-        Log.debug("Group elements INVALID");
-        setTemplate(data, "Login.vm");
-        return;
-    } else {
-        // If all is validated then you can set the next template and/or
-        // continue processing...it's up to you.  You can also use
-        // setPage() in the template file to set the next template to show
-        // on successful validation.
-        setTemplate(data, "LoginSuccess.vm");
-    }
-
-    // This gets the value of the "Username" field from the group object
-    String username = (String)group.get("Username").getValue();
-    String password = (String)group.get("Password").getValue();
-
-    // Now you will be able to use the username and password variable in
-    // the rest of the Turbine Action.
-    ...
-}
-            ]]></source>
-            <p/>
-            <p>
-                Here is example code in a Turbine Action, using the intake
-                group's default mapToObject setting (this is the same whether
-                or not you use the field's mapToProperty attribute):
-            </p>
-            <source><![CDATA[
-/**
- * Performs user login
- */
-public void doLogin(RunData data, Context context)
-        throws Exception {
-    // Get intake group
-    IntakeTool intake =
-            (IntakeTool)context.get("intake");
-    Group group = intake.get("LoginGroup", IntakeTool.DEFAULT_KEY);
-
-    // Check if group fields are valid and if they are not, then return.
-    // Intake will handle the validation error and display the
-    // corresponding error messages to the user but if you use the setPage()
-    // mechanism to get the "next template" then you must now set the
-    // template to be the same one as the user was filling out.  Otherwise
-    // the user will just see the next template.  See the "important note"
-    // in step 1.
-    if (!group.isAllValid()) {
-        Log.debug("Group elements INVALID");
-        setTemplate(data, "Login.vm");
-        return;
-    } else {
-        // If all is validated then you can set the next template and/or
-        // continue processing...it's up to you.  You can also use
-        // setPage() in the template file to set the next template to show
-        // on successful validation.
-        setTemplate(data, "LoginSuccess.vm");
-    }
-
-    // Instaniate a business object that represents the form
-    LoginForm loginForm = new LoginForm();
-
-    // Set the properties of the form given the field data in the group
-    // (i.e. populate the business object)
-    group.setProperties(loginForm);
-
-    // Now the business object is populated accordingly.  You can use it
-    // for whatever purpose in the rest of the Turbine Action.
-    ...
-}
-            ]]></source>
-            <p/>
-        </section>
-        <section name="Removing Intake information from the request">
-            <p>
-                Intake data is retained in the request in order to allow for the
-                possibility that it will be re-presented to the user on the next
-                page. Normally this is desirable behaviour - there may have been
-                an error in the data so you want to redisplay it. There is a
-                possibility however that you might want to reuse the same group
-                on either the same or a different page after fully processing
-                the data; in this case it may be undesirable to redisplay the
-                previously entered data. The prime example of this is where a
-                page includes a repeating group of records and provides an
-                opportunity to add a further record using the default group,
-                returning to the same page after each record is added.  In this
-                situation you will find that the default group needs to be
-                removed from the request, otherwise the data entered on the
-                previous page will be redisplayed.
-            </p>
-            <p>
-                Intake allows for this by providing a way of removing the data
-                that is no longer appropriate to display.  Simply:
-            </p>
-            <source><![CDATA[
-intake.remove(group);
-            ]]></source>
-            <p/>
-            <p>
-                ... where "intake" is a reference to your IntakeTool and "group"
-                is a reference to the group you wish to remove from the
-                request.  You would do this after the new record had been
-                validated and added to the database.
-            </p>
-            <p>
-                It will be rare that you actually need to do this - it is
-                required only in situations where the same group is used on
-                subsequent pages after the data has been fully processed (it
-                should be pretty obvious when this is the case).
-            </p>
-        </section>
-    </body>
-</document>
diff --git a/xdocs/howto/jboss-howto.xml b/xdocs/howto/jboss-howto.xml
deleted file mode 100644
index 0953416..0000000
--- a/xdocs/howto/jboss-howto.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-   <title>JBoss Howto</title>
- </properties>
-
- <body>
-
- <section name="3 Steps to get the Catalina included with TDK to work with JBoss2.2.1">
- <p>
- By: <a href="mailto:john NOSPAM murphyfutures.com">John Menke</a><br/>
- </p>
-
- <p>
-    <ol>
-    <li>Edit the startup.sh: 
-    <p>
-    $BASEDIR/catalina.sh run -nonaming "$@"  (-nonaming does not work with start)
-    </p>
-    </li>
-    <li>
-    Move all the files from JBOSS_HOME/client directory to the /WEB-INF/lib
-    directory.
-    </li>
-    <li>
-    Delete the jndi.jar file (and the jndi-1.2.1.jar) from the /WEB-INF/lib
-    directory.
-    </li>
-    </ol>
-  </p>
-  <p>
-  I probably have extra jars in the WEB-INF/lib at the moment, but IT WORKS!
-  </p>
-  
-<source>
-WEB-INF/lib
-	TestBeanClient.jar
-	activation-1.01.jar
-	connector.jar
-	deploy.jar
-	ecs-1.4.1.jar
-	ejb.jar
-	hsql.jar
-	jaas.jar
-	jakarta-regexp-1.3-dev.jar
-	jboss-client.jar
-	jbossmq-client.jar
-	jbosssx-client.jar
-	jdbc-se2.0.jar
-	jdbc2_0-stdext.jar
-	jnp-client.jar
-	jta-spec1_0_1.jar
-	jta1.0.1.jar
-	junit-3.2.jar
-	log4j-1.0.4.jar
-	mail-1.2.jar
-	mm.mysql-2.0.4.jar
-	postgresql.jar
-	stop.jar
-	turbine-2.1-dev-unrealeased.jar
-	velocity-1.0b2-dev.jar
-	village-1.5.1-dev.jar
-	xalan-1.2.1.jar
-	xerces-1.3.0.jar
-	xmlrpc.jar
-</source>
-
-  <p>  
-  THIS EXAMPLE JNDI CODE NOW RUNS: (servlet from within TDK)
-  </p>
-  
-<source><![CDATA[
-try
-{
-    // Set up the naming provider. This may not always be necessary,
-    // depending on how your Java system is configured.
-    System.setProperty("java.naming.factory.initial",
-      "org.jnp.interfaces.NamingContextFactory");
-    System.setProperty("java.naming.provider.url",
-      "localhost:1099");
-    // Get a naming context
-    InitialContext jndiContext = new InitialContext();
-
-    // Get a reference to the Interest Bean
-    Object ref = jndiContext.lookup("interest/Interest");
-
-    // Get a reference from this to the Bean's Home interface
-    InterestHome home = (InterestHome)
-        PortableRemoteObject.narrow (ref, InterestHome.class);
-
-    // Create an Interest object from the Home interface
-    m_interest = home.create();
-}
-catch(Exception e)
-{
-    out.println("<LI>Context failed: " + e);
-}  
-]]></source>
-</section>
-
- </body>
-</document>
diff --git a/xdocs/howto/jsp-howto.xml b/xdocs/howto/jsp-howto.xml
deleted file mode 100644
index 41f1e6c..0000000
--- a/xdocs/howto/jsp-howto.xml
+++ /dev/null
@@ -1,82 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>JSP Howto</title>
- </properties>
-
-<body>
-
-<section name="JSP + Turbine Configuration">
-
-<p>
-It is quite possible to use JSP with Turbine. In order to do so, you
-need to tweak the existing configuration in the
-TurbineResources.properties file as described below. This is an evolving
-document, if there are still errors in this configuration, <a
-href="http://jakarta.apache.org/site/mail.html">please subscribe to the
-Turbine Users list and let us know</a>. Also note that this file is
-checked into Turbine's CVS tree under xdocs/jsp-configuration.xml. We
-appreciate all <a
-href="http://jakarta.apache.org/site/source.html">patches and
-contributions</a> that improve this document.
-</p>
-
-<p>
-In TurbineResources.properties, search for the key values and
-modify/verify the following settings:
-</p>
-
-<source><![CDATA[
-template.homepage=/index.jsp (or whatever jsp you want for the start
-                              page)
-
-template.login=/login.jsp    (or whatever jsp you want for the login 
-                              form)
-
-page.default=JspPage
-
-services.JspService.classname=org.apache.turbine.services.jsp.TurbineJspService
-]]></source>
-
-<p>
-If you want to use "complete" JSP pages (rather than using Turbine's
-model of having separate files for the navigation components, etc.),
-then you must set the JspService.default.layout entry so that
-DefaultLayout is used:
-</p>
-
-<source><![CDATA[
-services.JspService.default.layout = DefaultLayout
-]]></source>
-
-<p>
-Place JSP pages in the &lt;app&gt;/templates/app/screens directory.
-</p>
-
-<p>
-Refer to the JSP pages in URLs as .../template/app/&lt;xxx&gt;.jsp
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/ldap-howto.xml b/xdocs/howto/ldap-howto.xml
deleted file mode 100644
index 31a3078..0000000
--- a/xdocs/howto/ldap-howto.xml
+++ /dev/null
@@ -1,188 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-   <title>LDAP Howto</title>
- </properties>
-
- <body>
-
- <section name="LDAP Details">
-  <p>
-These are the details on how we came up with this schema for
-putting the user-group-permission tables in an LDAP directory. We want to
-start with the fact that for the schema proposed we have taken all new
-objectClasses and Attributes preceded by turbine to indicate that they are
-Turbine specific. We have thought about using the standard and available
-LDAP objectClasses and atributes, but finally decided to start the
-discussion with the turbine stuff.
-</p>
-<p>
-We also had to make some assumptions regarding the present use of the
-user-group-permission tables. This gave us the following schema:
-  </p>
- </section>
- <section name="Schema">
-<source>
--- Attribute types --
-
-( 1000.1.1
-  NAME 'turbineGroupMember'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-)
-
-( 1000.1.2
-  NAME 'turbineObjectData'
-  DESC ''
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.40
-)
-
-( 1000.1.3
-  NAME 'turbinePermission'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-)
-
-( 1000.1.4
-  NAME 'turbineRoleMember'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.12
-)
-
-( 1000.1.5
-  NAME 'turbineUserCreationDate'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE
-)
-
-( 1000.1.6
-  NAME 'turbineUserFirstName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-)
-
-( 1000.1.7
-  NAME 'turbineUserLastLogon'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE
-)
-
-( 1000.1.8
-  NAME 'turbineUserLastModifiedTime'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.53
-  SINGLE-VALUE
-)
-
-( 1000.1.9
-  NAME 'turbineUserLastName'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-)
-
-( 1000.1.10
-  NAME 'turbineUserMailAddress'
-  DESC ''
-  EQUALITY caseIgnoreIA5Match
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.26
-)
-
-( 1000.1.11
-  NAME 'turbineUserPassword'
-  DESC ''
-  EQUALITY caseExactMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-  SINGLE-VALUE
-)
-
-( 1000.1.12
-  NAME 'turbineUserUniqueId'
-  DESC ''
-  EQUALITY caseIgnoreMatch
-  SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
-  SINGLE-VALUE
-)
--- Object classes --
-
-( 1000.2.1
-  NAME 'turbineGroup'
-  DESC 'Turbine group'
-  SUP top
-  AUXILIARY
-  MAY ( turbineGroupMember $ turbineObjectData )
-)
-
-( 1000.2.2
-  NAME 'turbineRole'
-  DESC 'Turbine role'
-  SUP top
-  AUXILIARY
-  MAY ( turbineObjectData $ turbinePermission $ turbineRoleMember )
-)
-
-( 1000.2.3
-  NAME 'turbineUser'
-  DESC 'Turbine user'
-  SUP top
-  AUXILIARY
-  MUST ( turbineUserUniqueId )
-  MAY ( turbineObjectData $ turbineUserCreationDate $ turbineUserFirstName $
-turbineUserLastLogon $ turbineUserLastModifiedTime $ turbineUserLastName $
-turbineUserMailAddress $ turbineUserPassword )
-)
-</source>
- </section>
-<section name="More Details">
-<p>
-We have turbineRole that can have many turbinePermission entries. These
-are DN pointing to the turbinePermission objects. turbineUser will hold
-all user related information. turbineGroup can hold in the
-turbineGroupMember DNs of turbineUser objects. Thus having multiple
-users being member of a group. There is however no relation with role at
-this stage. The releation role - user is stored in the turbineRole
-having multiple DNs in turbineRoleMember. Then we have a user - role
-relation thus giving user permission via roles they can perform. There
-is no relation between role - user - group in one record. This could be
-possible with the DB model, but we could you put this dependancy in the
-hierarchical structure of a directory. With the separate user - role and
-user - group relations we thought we'd have the most desired relations.
-</p>
-<p>
-Please note that the Object Identifiers (OID) in this example are not
-real ones. When we go for the turbine objectClasses and attributes
-Turbine (or Apache) have to register (if they not already have) their
-own OID starting point in the IANA tree. We are fully open for dicussion
-and appreciate your feedback on the mailing list.
-</p>
-</section>
- </body>
-</document>
diff --git a/xdocs/howto/migrate-from-2_1-howto.xml b/xdocs/howto/migrate-from-2_1-howto.xml
deleted file mode 100644
index 1930607..0000000
--- a/xdocs/howto/migrate-from-2_1-howto.xml
+++ /dev/null
@@ -1,372 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Migrating from 2.1 to 2.2</title>
- </properties>
-
-<body>
-
-<section name="Important note">
-<p>
-    The information in this HOWTO pertains to Turbine 2.2.  Please refer 
-    to the <a href="migrate-from-2_2-howto.html">Migrating from 
-    2.2 to 2.3</a> page for information on migating to Turbine 2.3.
-</p>
-</section>
-
-<section name="Introduction">
-<p>
-    This document describes the basic steps needed to migrate an
-    application written for Turbine 2.1 to Turbine 2.2 using the
-    decoupled Torque.
-</p>
-<p>
-    You may find that migrating to 2.2 is not all that difficult.
-    Of course, this depends quite a bit on how much of Turbine your
-    application actually uses.  You may find migrating to 2.2 to be
-    quite a chore, but it is well worth the effort. Most of the
-    pain in figuring out this migration process has been documented 
-    in the mailing list archives, but is summarized here for your 
-    convenience.
-</p>
-</section>
-
-<section name="Cleanup">
-<p>
-    Start off with deleting all of the objects that Torque generated
-    for you. I am talking about om.map.* and om.Base*. You will be
-    able to regenerate them later during the migration process.
-</p>
-</section>
-
-<section name="Build and Properties Files">
-<p>
-    The structure of the build files used by Turbine has changed 
-    quite a bit with the 2.2 release. The easiest way of obtaining 
-    a reference set of property (and build files) is to install 
-    version 2.2 of the TDK and generate the demo application.
-</p>
-<p>
-    From the demo application you should:
-    <ul>
-    <li>Merge <code>tdk-2.2/webapps/newapp/WEB-INF/conf/build.properties</code>
-        with your existing properties file.</li>
-    <li>Copy <code>build-torque.xml</code> from the demo application
-        to your build directory.</li>
-    <li>Copy <code>project-build.xml</code> from the demo application
-        to your build directory.</li>
-    <li>Merge <code>build.xml</code> from the demo application
-        to your existing build file (if you have only ever used the
-        default build file supplied with the tdk then I assume you 
-        can just replace your file with the new one).</li>
-    <li>Copy <code>WEB-INF/conf/TurbineResources.template</code> and 
-        <code>WEB-INF/conf/Torque.template</code>) to your application
-        and apply changes as needed (it is up to you as to how much you
-        hard code into your application template and how much you allow
-        to be processed into the resulting properties files by way of
-        <code>build.properties</code> or the other property files).</li>
-    </ul>
-</p>
-<p>
-    See the Torque 
-  <a href="http://jakarta.apache.org/turbine/torque/properties-reference.html">
-    Properties Reference</a> for full details of the available properties.
-</p>
-</section>
-
-<section name="Libraries">
-<p>
-    Turbine and Torque use updated versions of a number of 
-    libraries (jar files). Take a look at the WEB-INF/lib directory 
-    of the TDK sample application to see which libraries have been 
-    updated and replace the files in the lib directory of your 
-    application as needed.
-</p>
-<p>
-    Note that if you have applied local changes to Turbine itself
-    then you should ensure that your changes have made it into the
-    Turbine 2.2 and Torque 3.0 releases.  If any of your changes 
-    have not made it then you will need to port these changes forward 
-    and build your own versions of the Turbine and Torque jar files
-    (while you are there you may as well create patches and submit 
-    them to the relevant modules in Scarab so that they can be 
-    included in future releases).
-</p>
-<p>
-    By default Torque will utilize a set of  Velocity templates that
-    you need to extract from the Torque jar file (see the 
-    <code>torque.templatePath</code> property). Unless you have a 
-    need to alter these templates you may prefer to use these directly
-    from the jar file.  To do this you need to set the 
-    <code>torque.useClasspath</code> property to <code>true</code> in
-    <code>build.peoperties</code>.  In any case, you should either 
-    replace or delete the old versions of these templates from your
-    existing project.
-</p>
-</section>
-
-<section name="Import Statements">
-<p>
-    Many of your import statements will need to be changed. This is
-    due to the decoupled version of Torque. This will take care of
-    most of the changes due to refactoring. There will still be a
-    few cases (discussed later) where the methods have been changed and/or
-    moved to different classes.
-</p>
-<p>
-    <a href="http://jakarta.apache.org/turbine/torque/changes.html#Torque%203.0-b3">
-    [Here]</a> is list of the most common import changes.
-</p>
-</section>
-
-<section name="Transactions and obtaining database connections">
-<p>
-    org.apache.turbine.util.db.DBConnection is gone. The replacement
-    is java.sql.Connection. This was a wrapper class from the
-    Connection object. It was returned when you asked for a database
-    connection. The new version of Torque will simply return a
-    Connection object.
-</p>
-<p>
-    org.apache.turbine.services.db.TurbineDB is gone. The replacement
-    is org.apache.torque.Torque. This was mainly used to obtain
-    database connections and the name of the default database. All
-    of this functionality is in the new class.
-</p>
-<p>
-    Below is an example of how you might have been obtaining database
-    connections in version 2.1.
-</p>
-
-<source>
-<![CDATA[
-DBConnection dbConn = null;
-try
-{
-    dbConn = TurbineDB.getConnection();
-    // Do something with the connection here...
-}
-catch (Exception e)
-{
-    // Either from obtaining the connection or from your application code.
-}
-finally
-{
-    try
-    {
-        TurbineDB.releaseConnection(dbConn);
-    }
-    catch (Exception e)
-    {
-        // Error releasing database connection back to pool.
-    }
-}
-]]>
-</source>
-<p>
-    Using the new version of Torque this would be rewritten as follows.
-</p>
-<source>
-<![CDATA[
-Connection conn = null;
-try
-{
-    conn = Torque.getConnection();
-    // Do something with the connection here...
-}
-catch (TorqueException ex)
-{
-    // Either from obtaining the connection or from your application code.
-	Log.error(ex);
-}
-finally
-{
-    Torque.closeConnection(conn);
-}
-]]>
-</source>
-<p>
-    Support for transactions has been moved from org.apache.turbine.om.BasePeer
-    into org.apache.torque.util.Transaction. The method names have changed
-    slightly as well. Here is an example of using transactions in 2.1.
-</p>
-<source>
-<![CDATA[
-DBConnection dbConn = null;
-try
-{
-    dbConn = BasePeer.beginTrasaction(TurbineDB.getDefaultDB?());
-    someObject.save(dbConn);
-    someOtherObject.save(dbConn);
-    BasePeer.commitTransaction(dbConn);
-}
-catch (Exception e)
-{
-    // Either from obtaining the connection or from your application code.
-    BasePeer?.rollbackTransaction(dbConn);
-}
-]]>
-</source>
-<p>
-    This would now be written as shown below.
-</p>
-<source>
-<![CDATA[
-Connection conn = null;
-try
-{
-    conn = Transaction.begin(Torque.getDefaultDB());
-    someObject.save(conn);
-    someOtherObject.save(conn);
-    Transaction.commit(conn);
-}
-catch (TorqueException ex) 
-{
-    try
-    {
-        Transaction.rollback(conn);
-    }
-    catch (TorqueException ex2)
-    { 
-        Log.error(ex2);
-    }
-    Log.error(ex);
-}
-]]>
-</source>
-</section>
-
-<section name="Vector becomes List">
-<p>
-    Methods generated by Torque that previously had a return type of
-    <code>Vector</code> now have a return type of <code>List</code>.
-    If you have not already been doing so you should switch to 
-    retrieving the results of these methods into variables declared 
-    as <code>List</code>.  While you are at it you might like to 
-    update any of your own code to use <code>ArrayList</code> in 
-    preference to <code>Vector</code>.
-</p>
-</section>
-
-<section name="Exception becomes TorqueException">
-<p>
-    Methods generated by Torque now throw <code>TorqueException</code>
-    rather than <code>Exception</code>.  You might like to update
-    your code to match.
-</p>
-<p>
-    Note that the exception thrown by <code>save()</code> methods is 
-    determined by the Torque property <code>torque.saveException</code>
-    which defaults to <code>Exception</code>.
-</p>
-</section>
-
-<section name="Extending Turbine User">
-<p>
-    See
-    <a href="http://jakarta.apache.org/turbine/turbine-2/howto/extend-user-howto.html">
-    Extending Turbine User How-To</a> for this information.
-</p>
-</section>
-
-<section name="Changes to the OM classes">
-<p>
-    Read over the Torque Schema Reference to find out what to change
-    in your project-schema.xml file. The main changes are the
-    deprecation of sequence and autoIncrement idMethods and the 
-    addition of the javaType attribute to column elements 
-    (Torque can now work with object types).
-</p>
-<p>
-    If you used inheritance, you will run need to specify
-    abstract="true" for the tables which have abstract base
-    classes. When you do this, you will need to implement the
-    copy() method in your subclasses. An example is provided below.
-</p>
-<source>
-<![CDATA[
-public <base class> copy() throws TorqueException
-{
-    return copyInto(new <sub class>());
-}
-]]>
-</source>
-<p>
-    Atributes defined as primary keys are no longer generated
-    as NumberKey objects. They are now Integer or int (depending
-    on the javaType specified in project-schema.xml).
-</p>
-<p>
-    If you have a turbine-schema.xml file in your WEB-INF/conf
-    directory, the project-om ant task will generate all of the
-    Turbine*, BaseTurbine*, and map.Turbine* objects for you.
-    These will not be used by Turbine. They will only confuse
-    you. The best thing to do for this is to rename your
-    turbine-schema.xml file to something like turbine-schema.nogenerate.
-</p>
-</section>
-
-<section name="XML-RPC service">
-<p>
-    My TurbineResources.properties did not have settings to
-    configure the secure options. This caused initialization
-    of the service to fail. To fix this, I simply obtained all
-    of the configuration settings from the TurbineResources.properties
-    included with the source version.
-</p>
-<p>
-    The service does not listen on the loopback interface by default
-    any longer. There were no other changes that are required to get
-    this service up and running under T2.2.
-</p>
-</section>
-
-<section name="Other services">
-<p>
-    Intake, Security, and Scheduler all work without a problem
-    after migrating to T2.2.
-</p>
-</section>
-
-<section name="Maven">
-<p>
-    You may like to consider using 
-    <a href="http://jakarta.apache.org/turbine/maven/">Maven</a> to
-    build your project.  The  document 
-    <a href="http://nagoya.apache.org/wiki/apachewiki.cgi?JakartaTDK/Starting_Project_With_TDK2.2_And_Maven">
-    Starting your project and database with TDK2.2 and Maven</a> 
-    provides some information that can be adapted for this purpose 
-    (jump down to the "Moving The Sample" heading for the 
-    documentation relevant to an existing project).
-</p>
-</section>
-
-<section name="Updates to this document">
-<p>
-    This document is by no means complete or totally accurate. We welcome 
-    suggestions as to how it might be improved, particularly if you have 
-    just completed migrating an application by following this howto.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/migrate-from-2_2-howto.xml b/xdocs/howto/migrate-from-2_2-howto.xml
deleted file mode 100644
index 05a7298..0000000
--- a/xdocs/howto/migrate-from-2_2-howto.xml
+++ /dev/null
@@ -1,293 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Migrating from 2.2 to 2.3</title>
- </properties>
-
-<body>
-
-<section name="Introduction">
-<p>
-    This document describes the basic steps needed to migrate an
-    application written for Turbine 2.2 to Turbine 2.3.
-</p>
-<p>
-    You may find that migrating to 2.3 is not all that difficult -
-    it should certainly be less trouble than migrating from 2.1 to
-    2.2. Most of the pain in figuring out this migration process 
-    has been documented in the mailing list archives, but is 
-    summarized here for your convenience.
-</p>
-</section>
-
-<section name="Deprecated And Removed Services">
-<p>
-    In 2.3, many services have been deprecated or removed wholly. 
-    Below are the changes I made to get my 2.2 app to work under 2.3.
-</p>
-<p>
-    Remove from tr.props ( and any properties that start with services.XXX):
-</p>
-<source>
-<![CDATA[
- services.PoolBrokerService.classname=org.apache.turbine.services.db.TurbinePoolBrokerService
- services.MapBrokerService.classname=org.apache.turbine.services.db.TurbineMapBrokerService
- services.ResourceService.classname=org.apache.turbine.services.resources.TurbineResourceService
- services.LoggingService.classname=org.apache.turbine.services.logging.TurbineLoggingService 
-]]>
-</source>
-<p>
-    Note: Removing LoggingService removes all logging stuff from 
-    TurbineResources.properties as well! Now you use a Log4j.properties: 
-    WEB-INF\conf\Log4j.properties. You need at least an empty file, 
-    otherwise log4j complains, but something like this will be better:
-</p>
-<source>
-<![CDATA[
-# -------------------------------------------------------------------
-# Log4j.properties
-# -------------------------------------------------------------------
-
-# This first category is required and the category
-# must be named 'default'. This is used for all logging
-# where an explicit category is not specified.
-
-log4j.category.default = INFO, default
-log4j.category.org.apache.turbine.services.pull.util.UIManager = DEBUG, default
-
-log4j.appender.default = org.apache.log4j.RollingFileAppender
-log4j.appender.default.file = logs/turbine.log
-log4j.appender.default.MaxFileSize = 1024KB
-log4j.appender.default.MaxBackupIndex = 5
-log4j.appender.default.append = true
-log4j.appender.default.layout = org.apache.log4j.PatternLayout
-log4j.appender.default.layout.conversionPattern = %d %-5p [%-10t] %c{2} - %m%n
-
-log4j.appender.email = org.apache.log4j.net.SMTPAppender
-log4j.appender.email.BufferSize = 512
-log4j.appender.email.From = @your-from-address@
-log4j.appender.email.SMTPHost = @your-mail-host@
-log4j.appender.email.Subject = Turbine Error Report
-log4j.appender.email.To = @your-to-address@
-log4j.appender.email.layout = org.apache.log4j.PatternLayout
-log4j.appender.email.layout.conversionPattern = %d %-5p [%-10t] %c{2} - %m%n
-
-# This category is used in the BasePeer class. All
-# SQL generated will be logged if the category
-# priority is set to DEBUG
-
-log4j.category.org.apache.torque.util.BasePeer = DEBUG, org.apache.torque.util.BasePeer
-log4j.additivity.org.apache.torque.util.BasePeer = false
-log4j.appender.org.apache.torque.util.BasePeer = org.apache.log4j.RollingFileAppender
-log4j.appender.org.apache.torque.util.BasePeer.file = logs/sql.log
-log4j.appender.org.apache.torque.util.BasePeer.MaxFileSize = 1024KB
-log4j.appender.org.apache.torque.util.BasePeer.MaxBackupIndex = 3
-log4j.appender.org.apache.torque.util.BasePeer.append = true
-log4j.appender.org.apache.torque.util.BasePeer.layout = org.apache.log4j.PatternLayout
-log4j.appender.org.apache.torque.util.BasePeer.layout.conversionPattern = %d %-5p [%-10t] %c{1} - %m%n
-
-log4j.category.@your-package@.modules.scheduledjobs = DEBUG, scheduledjobs, email
-log4j.additivity.@your-package@.modules.scheduledjobs = false
-log4j.appender.scheduledjobs = org.apache.log4j.RollingFileAppender
-log4j.appender.scheduledjobs.file = logs/batch.log
-log4j.appender.scheduledjobs.MaxFileSize = 256KB
-log4j.appender.scheduledjobs.MaxBackupIndex = 5
-log4j.appender.scheduledjobs.append = true
-log4j.appender.scheduledjobs.layout = org.apache.log4j.PatternLayout
-log4j.appender.scheduledjobs.layout.conversionPattern = %d %-5p [%-10t] %c{1} - %m%n
-]]>
-</source>
-
-</section>
-
-<section name="Commons-logging Replaces Built-in Logging">
-<p>
-    In 2.3, the built in logging has been deprecated in favor of using 
-    commons-logging. Therefore, where ever you have this import:
-</p>
-<source>
-<![CDATA[
-import org.apache.turbine.util.Log;
-]]>
-</source>
-<p>
-	you will need to remove it and replace it with:
-</p>
-<source>
-<![CDATA[
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-]]>
-</source>
-<p>
-	Also, instead of calling static methods of the old Log object: 
-	Log.debug("my message") you will need instead to do this:
-</p>
-	<source>
-<![CDATA[
- private static Log log = LogFactory.getLog(Audit.class);
- .
- .
- .
- log.debug("My message");
-]]>
-</source>
-<p>
-	The advantage of this is that now in your logging messages, you will know 
-	what class the message is coming from, versus the old way where all you 
-	got was the message and you would have to embed the name of the action to 
-	know what was emitting the logging message! Also, this makes your 
-	underlying logging architecture pluggable. If you use jdk1.4, you can 
-	plug in the java logging, or use log4j.  See the example Log4j.properties
-	file above to see a few of the possibilities.
-</p>
-</section>
-
-<section name="Use VelocityOnly Layout">
-<p>
-    Change from VelocityECSLayout to VelocityOnly Layout - see: 
-	<a href="velocityonlylayout-howto.html">VelocityOnlyLayout Howto</a>.
-</p>
-</section>
-
-<section name="New Dependencies">
-<p>
-    In order to make the Turbine jar smaller, some things have been moved to 
-    commons. There are in fact a raft of new dependencies that you should 
-    ensure you use as part of your application - see: 
-    <a href="../dependencies.html">Dependencies</a>.
-</p>
-</section>
-
-<section name="earlyInit Parameter For Selected Services">
-<p>
-    In order to get some services to work under 2.3, it is necessary to set 
-    an earlyInit parameter in TurbineResources.propertiess:
-</p>
-<source>
-<![CDATA[
-services.PullService.earlyInit=true
-services.SessionService.earlyInit=true
-]]>
-</source>
-<p>
-	If your service is not being initialized as you would expect then try
-	setting this flag for it.
-</p>
-</section>
-
-<section name="New Optional URI Handling Tools">
-<p>
-	Under 2.3 there are new URI handling tools with a significant refactoring 
-	of how relative and absolute URL's are handled in Turbine. Briefly, the 
-	new tools avoid the confusion that arose previoulsy from mixing tools 
-	with internal classes, providing uniform access to the various URI types 
-	in Turbine. <strong>These new tools are backwards-compatible with your old 
-	$link and $content tools, so you should not have to change any of your 
-	templates if you decide to use the new tools.</strong>
-</p>
-<p>
-	To use the new tools, simply redefine the following pull tools in your 
-	TurbineResources.properties:
-</p>
-	<source>
-<![CDATA[
-tool.request.link    = org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.content = org.apache.turbine.services.pull.tools.ContentTool
-]]>
-</source>
-<p>
-	If you used some of the other tools for creating URL's, then there are 
-	analogous new ones as well:
-</p>
-	<source>
-<![CDATA[
-org.apache.turbine.services.pull.tools.RelativeTemplateLink
-org.apache.turbine.services.pull.tools.TemplateLinkWithSlash
-]]>
-</source>
-</section>
-
-<section name="Ensure you refer to your templates correctly">
-<p>
-    Places where you might previously have got away with using forward slashes 
-    ("/") in your references to template names will need to be corrected (note 
-    that this does not apply to the Velocity #parse() and #include() 
-    statements which operate at a lower level). See: 
-    <a href="../services/template-service.html">Template Service</a>.
-</p>
-</section>
-
-<section name="Update to the latest DTDs for Intake and Torque">
-<p>
-    Updating your Intake configuration xml file and your Torque schema files
-    to use the most recent DTDs will ensure that the DTDResolver can be used
-    when validating these files.  Deprecation warnings may be produced while
-    these files are being processed - as with your application code you should
-    aim to update these files so that no deprecation warnings are produced
-    before the next Turbine release. 
-</p>
-</section>
-
-<section name="Extending Turbine User">
-<p>
-    Refer to <a href="../services/torque-security-service.html">Torque 
-    Security Service</a> for information on extending TurbineUser in Turbine
-    2.3 - this is now much easier than it was in previous releases.  You
-    may also want to refer to 
-    <a href="http://nagoya.apache.org/eyebrowse/ReadMsg?listName=turbine-dev@jakarta.apache.org&amp;msgNo=15077">
-    this message from the mail archive</a> - the quoted text from Henning is 
-    great and Wei points to a couple of additional messages that may also 
-    prove useful.
-</p>
-<p>
-    In the past you may have used a customised MapBuilder 
-    (database.maps.builder in TurbineResources.properties) as part of 
-    extending your user object - this is no longer required if you use the
-    Torque Security Service.  In addidion to this you need to ensure that
-    you replace any references you may have made to the old security related
-    peer classes in any Criteria with the new classes that Torque generates
-    for you as referring to the old ones will result in an inconsistent
-    database map such that your extended user attributes may not consistently
-    be maintained.
-</p>
-</section>
-
-<section name="Building Torque OM Classes">
-<p>
-	You will need to use Maven b9 or above in order to build the Torque 
-	Security Service and even then you should install the latest available 
-	release of the <a href="http://db.apache.org/torque/maven-howto.html">
-	Torque generator</a> plugin.
-</p>
-</section>
-
-<section name="Updates to this document">
-<p>
-    This document is by no means complete or totally accurate. We welcome 
-    suggestions as to how it might be improved, particularly if you have 
-    just completed migrating an application by following this howto.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/pullmodel-howto.xml b/xdocs/howto/pullmodel-howto.xml
deleted file mode 100644
index 91aadf2..0000000
--- a/xdocs/howto/pullmodel-howto.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Pull Model Howto</title>
- </properties>
-
-<body>
-
-<section name="Using the pull model with Turbine 2">
-
-<p>
-Turbine 2 can be used with two different programming models - the push model
-and the pull model.  The difference is in how the Context is built up.  The
-Context is used by the Velocity or WebMacro template files to "fill in the
-blanks" and introduce dynamic data into a static HTML-based template.  This
-programming concept is incredibly powerful - because it allows the web
-designer, who may be experienced with HTML, CSS, and Javascript but not
-Java, to put data fields wherever they want on a page without having to ask
-the Java programmers to change a Java class and recompile.  For more
-information on which to choose for your Turbine application, read Jon
-Stevens' informative commentary <a href="../pullmodel.html">Push vs
-Pull</a>.
-</p>
-
-<p>
-Also see the <a href="../services/pull-service.html">Pull Service</a>
-Documentation
-for another explanation of how the Pull Service works with Tools.
-</p>
-
-<p>
-The push model is found in the Flux/NewApp application that is distributed
-with the TDK 2.1.  It is based on a one-to-one mapping of Java Screen
-classes and Velocity template files.  The Screen class puts key/value pairs
-into the Context.  The <a href="context-howto.html">Context Howto</a>
-explains this approach.
-</p>
-
-<p>
-The pull model allows the web designer even more freedom than the push
-model. Java programmers can create globally accessible Java classes known as
-Tools.   These Tools are going to be useful for getting data out of a
-service and bringing it to the presentation layer, authenticating users, or
-creating links (see the TemplateLink tool that is built into Turbine).
-</p>
-</section>
-
-<section name="Pull Tool Implementation">
-<p>
-Your SimpleSecurityTool should implement ApplicationTool, which is a simple
-interface with two methods, init(Object data) and refresh.  It could be a
-facade class that calls other classes, or it could have its own business
-logic.
-</p>
-</section>
-
-<section name="Entries in TurbineResources.properties">
-<p>
-To make the Tool available to Turbine, you need to define your Tools in the
-TurbineResources.properties file.  The "Pull Service" section of the
-properties file is where the tools are listed.  You can use the following
-syntax (all explained in the TurbineResources.properties):
-</p>
-
-
-<source><![CDATA[
-tool.<Scope>.<Id> = <Classname>
-
-tool.request.formsTool = com.yourcompany.turbine.tools.SimpleFormsTool
-]]></source>
-
-<p>
-Classname is your java classname -
-com.yourcompany.turbine.tools.SimpleFormsTool
-</p>
-
-<p>
-Id is a unique identifier that you will use in your Velocity templates -
-formsTool, for instance.
-</p>
-
-<p>
-Scope defines the life cycle of the Tool.  There are four, global, request,
-session, and persistent.
-</p>
-
-<p>
-Global: The tool is instantiated once and is available to all templates for
-all requests. Must be threadsafe.
-</p>
-
-<p>
-Request: The tool is instantiated once for every request to Turbine.
-Doesn't need to be threadsafe.  The link, page, and flux tools are all
-defined as request scope.
-</p>
-
-<p>
-Session: The tool is instantiated once for each user session. Should be
-threadsafe.  Useful for tools that might hold user profiles, or items in a
-shopping cart.
-</p>
-
-<p>
-Persistent: Tool is instantiated once for each user session, and is stored
-along with the user information.  Must be threadsafe and implement
-Serializable.  An example of how this scope would be used would be great!
-</p>
-
-<p>
-Additional tool-defined properties can be configured in the
-TurbineResources.properties. The syntax is defined under the "Pull Service"
-section.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/python-howto.xml b/xdocs/howto/python-howto.xml
deleted file mode 100644
index 9a1ed80..0000000
--- a/xdocs/howto/python-howto.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Python Howto</title>
- </properties>
-
- <body>
-  <section name="Turbine Python Support">
-  <p>
-    Turbine has support for creating assemblers (see the <a href="fsd.html">
-    specifications</a>) with Python, by making use of
-    <a href="http://www.jpython.org">JPython technology</a>.
-  </p>
-  <p>
-    The first question that comes to mind is why one would want do to something
-    like this.  Here are some of the reasons you might want to do this:
-  </p>
-    <ul>
-        <li>
-            Python is an interpreted language which means that you do not have
-            to recompile and copy a new jar each time you make changes.
-        </li>
-
-        <li>
-            Although Python is interpreted it is compiled to java bytecode.
-            Performance is on par with native java code.
-        </li>
-
-        <li>
-            Python is very easy to learn.  This, together with the fact that
-            you don't need to use a compiler, makes it possible for people with
-            little java experience to create screens.
-        </li>
-
-        <li>
-            You can rapidly build a prototype using python, and later on find
-            that it is not necessary to systematically move to java :-)
-        </li>
-    </ul>
-  </section>
-
-  <section name="Setting Up Python for Turbine">
-    <p>
-        The first thing is to download JPython from www.jpython.org and copy
-        the jpython.jar file into your turibe/lib directory.  Now you need to
-        prepare and compile the jpython files like this:
-<source>
-build prepare-python
-build jar
-</source>
-        This will create a new turbine library that contains the Python code.
-        You need to copy this new .jar file to your application's lib
-        directory.
-    </p>
-    <p>
-        Now we need to edit the TurbineResources.properties.  Add the following
-        keys to your application's properties:
-    </p>
-<source><![CDATA[
-services.AssemblerBrokerService.assembler.screen=
-org.apache.turbine.util.assemblerbroker.python.PythonScreenFactory
-services.AssemblerBrokerService.assembler.action=
-org.apache.turbine.util.assemblerbroker.python.PythonActionFactory
-
-services.AssemblerBrokerService.python.path=/path/to/python
-]]></source>
-    <p>
-        The first two registers the Python Assembler Factories with the
-        AssemblerBrokerService.  The last line tells the Python interpreter
-        where to find all the .py files for your application.
-    </p>
-    <p>
-        In the root of your services.AssemblerBrokerService.python.path
-        you need to add a file named config.py that looks like this:
-    </p>
-
-<source><![CDATA[
-import java
-
-from java.io import *
-from java.util import *
-
-sys.add_package("org.apache.turbine.modules.screens")
-sys.add_package("org.apache.turbine.modules")
-sys.add_package("org.apache.turbine.util.db")
-sys.add_package("org.apache.turbine.util")
-sys.add_package("org.apache.turbine.services.security.TurbineSecurity")
-sys.add_package("org.webmacro.servlet")
-
-
-from org.apache.turbine.modules.screens  import WebMacroSiteScreen
-from org.apache.turbine.modules          import Action
-from org.apache.turbine.util.db          import Criteria
-from org.apache.turbine.util             import RunData
-from org.webmacro.servlet                import WebContext
-from org.apache.turbine.services.security   import TurbineSecurity
-]]></source>
-        
-      <p>
-        JPython sometimes gets a bit confused with the Servlet Engine
-        classloader, which forces us to call sys.add_package for each java
-        package that we wish to use in our Python code.  You also need to
-        import all the classes that you wish to use explicitly.  You needn't
-        add the classes here, but it avoid some duplicate declarations at the
-        top of each screen/action.
-    </p>
-    </section>
-
-    <section name="Using Python with Turbine">
-    <p>
-        To create python screens we use exactly the same methodology than for
-        normal java screens.  First you need a /screens subdirectory in your
-        services.AssemblerBrokerService.python.path.  This is where your
-        screen code will live.  Layouts goes in /layouts, actions in /actions
-        and so forth (just remember to register the appropriate assembler
-        factories).
-    </p>
-    <p>
-        I'm going to create a sample WebMacro screen.  First we need a .py file
-        where this screen can live.  The .py file should have the same name as
-        your .wm file and it must be all lower case.  Inside this file we
-        create a new class with the same name as the file, but in this the
-        first letter is uppercase (the rest is always lower case).  To override
-        a method is fairly simple (just create a new method with the same
-        name).
-    </p>
-    <p>
-        There is one problem however - Python does not support method
-        overloading based on type signatures, so usually the simplest for is
-        used, which is doBuildTemplate( RunData data ) for WebMacroSiteScreen
-        in stead of doBuildTemplate( RunData data, WebContext context ).  You
-        have two options to overcome this problem. (1) Create a new superclass
-        that exposes a method under a different name or (2) just call
-        getContext in your python code.  I usually just go for the second
-        option because it is fairly straight forward anyway.
-    </p>
-    <p>
-        Now for the code.  Let's create a screen called Test.  First create a
-        test.wm file (I assumer everybody knows how to do this).  Now create a
-        test.py and place it in the python-path/screens directory.  It should
-        look something like this:
-    </p>
-    
-<source><![CDATA[
-class Subjectslist(WebMacroSiteScreen):
-   def doBuildTemplate (self,data):
-        context = self.getContext(data)
-        context.put ("me","Leon")
-        context.put ("text","Python is cool");
-]]></source>
-
-    <p>
-        For more information about the self parameter see the Python docs.  You
-        can call any java code that you would normally be able to use (just
-        remember to add it to conf.py) including database, services, etc. You
-        can also freely use any of the Python built-in types and any Python
-        module that was built on 100% pure Python.
-    </p>
-  </section>
-
- </body>
-</document>
diff --git a/xdocs/howto/security-howto.xml b/xdocs/howto/security-howto.xml
deleted file mode 100644
index 7e549fe..0000000
--- a/xdocs/howto/security-howto.xml
+++ /dev/null
@@ -1,248 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Security Howto</title>
- </properties>
-
-<body>
-
-<section name="Turbine Security">
-
-<p>
-The Turbine Security includes a <a href="../services/security-service.html">Security Service</a> 
-as well as Actions and Screens that can be extended in the Templating Services.
-</p>
-
-</section>
-
-
-<!-- Start -->
-
-
-<section name="Users, Groups, Roles and Permissions">
-
-<p>
-The default Relational Database schema that Turbine uses for the database security 
-service, and which the TDK is generated with upon initialisation, includes the 
-data structure for the managing of permissions. 
-The default or core schema can be viewed at;
-</p>
-
-<p>
-<ul><a href="../turbine-schema.html">Turbine Core Schema</a></ul>
-</p> 
-
-<p>
-The main tables are TURBINE_GROUP, TURBINE_USER, TURBINE_ROLE and TURBINE_PERMISSION. 
-The Permissions are the individual actions a user is allowed to take in the system. 
-The Role is a container for the Permissions, in other words a Role can be made of 
-many Permissions. User is an account that is interaction with the System and the Group 
-is a something that a User would want to do something in. In the Turbine mailing lists 
-it has often been described in the same way as a project. In a project you have fulfill 
-a role, however a User doesnt "belong" to a project they merely have a role in that 
-project ( or group ). In this manner too a User can have many Roles within the one 
-Group. For instance a User may have the Role Developer in the Group, but may also have 
-the Role of Administrator as well. While initially confusing at first, as there 
-are no group-user or role-user containers, it is a flexible system and strong system.
-</p>
-
-</section>
-
-
-<section name="Access Control Lists">
-
-<p>
-A User's interaction through the system is controlled by the Permissions they are 
-able to partake in. The AccessControlLists manage this information and present it via 
-RunData and User Interfaces to the application. The RunData interface through the 
-getACL() method presents the AccessControlList Object.
-</p>
-
-<source>
-//get the AccessControlList Object 
-//from RunData
-AccessControlList acl = data.getACL();
-
-//check if the User ( from the http request )
-//has permission to view the invoices
-if( acl.hasPermission("viewinvoice") )
-{
-    data.setMessage("You have permission to view the invoices.");
-    setTemplate(data, "Invoice.vm");
-}
-else
-{
-    data.setMessage("You do not have Permission to view the Invoices");
-    setTemplate(data, "UnauthorizedRequest.vm");
-}
-</source>
-
-<p>
-This will check if the User has permission to view this in the Global Group which 
-is useful for managing Anonymous Users as well as logged in Users across your 
-application. If however you need stronger security, such as only allowing users that 
-have logged in, and have a Role in a specific Group, the Permission will need to be 
-matched to the Group and User. As an example, assume one of your groups is "Accounting" 
-and the Invoice information is only to be viewed by Usersthat have a Role in Accounting 
-as well as the Permission "viewinvoice", the above method would be re-written; 
-</p>
-
-<source><![CDATA[
-//get the User from RunData
-User user = data.getUser();
-
-//get the AccessControlList Object 
-//from RunData
-AccessControlList acl = data.getACL();
-
-//check if the User has logged in,
-//has a role in the group and
-//has permission to view the invoices
-if( user.hasLoggedIn() &&
-    acl.hasPermission("viewinvoice", "Accounting") )
-{
-   data.setMessage("You have permission to view the invoices.");
-   setTemplate(data, "Invoice.vm");
-}
-else
-{
-   data.setMessage("You do not have Permission to view the Invoices");
-   setTemplate(data, "UnauthorizedRequest.vm");
-}
-]]></source>
-
-<p>
-If instead the Permission could be across any of the Roles the User has, the 
-method acl.hasPermission(String permission, GroupSet groups), can be used. As 
-always check the Javadocs for more detail.
-</p>
-
-</section>
-
-<section name="Templates and Logging In">
-
-<p>
-Managing Anonymous Users and Logged In Users poses problems in applications for managing 
-the Secure/Strong parts of the application and the Unsecure/Weak parts of the 
-application. In Turbine, the Action and Screen components make managing this process 
-quite simple. Assume the only Velocity Template allowed to be viewed without being 
-logged in is the actual Login.vm template. As this is the only Screen that 
-needs to be Unsecure/Weak we can manage this via the parent of Login Screen.
-</p>
-
-
-<source>
-package com.mycompany.modules.screens;
-
-//parent which allows Users to view the screen
-public class WeakScreen extends VelocityScreen
-{
-
-    //nothing to check that the User 
-    //can view this screen   
-    protected void doBuildTemplate( RunData data, Context context ) 
-        throws Exception
-    {
-        //call to Super
-        super.doBuildTemplate(data, context);
-    }
-}
-
-package com.mycompany.modules.screens;
-
-//the java component of the Login Velocity Template
-public class Login extends WeakScreen
-{
-
-    //nothing to check that the User 
-    //can view this screen   
-    protected void doBuildTemplate( RunData data, Context context ) 
-        throws Exception
-    {
-        context.put("date",new Date());
-
-        //call to Super
-        super.doBuildTemplate(data, context);
-    }
-}
-</source>
-
-<p>
-Note that there is nothing in that method which checks that the User has logged in. 
-On the other hand, for the Secure or Strong Actions and Screens we would want a 
-check to ensure that the User has logged in.
-</p>
-
-<source>
-package com.mycompany.modules.screens;
-
-//Strong screen which checks for login
-public class StrongScreen extends VelocityScreen
-{
-    //check that User has Logged in before bothering
-    //to add anything to the context.   
-    protected void doBuildTemplate( RunData data ) 
-        throws Exception
-    {
-        if (data.getUser().hasLoggedIn())   
-        {   
-            doBuildTemplate( data, TurbineVelocity.getContext( data ) );
-        }
-        else
-        {
-            //send the User to the Login Template
-            data.setMessage("Please Login first!");
-            setTemplate(data,"Login.vm");
-        }
-    }
-}
-
-package com.mycompany.modules.screens;
-
-//as an example use the Invoices again
-public class Invoice extends StrongScreen
-{
-    //can view this screen   
-    protected void doBuildTemplate( RunData data, Context context ) 
-        throws Exception
-    {
-        context.put("invoice",new Invoice());
-
-        //call to Super
-        super.doBuildTemplate(data, context);
-    }
-}
-</source>
-
-<p>
-In the latter example, before the Screen populates the Context it will check for the 
-User being logged in by the doBuildTemplate(data) method in the parent. If the test 
-fails, the context isnt created for the Invoice screen. Another way to manage this 
-is to seperate the screens into two packages, com.mycompany.modules.screens.unsecure 
-and com.mycompany.modules.screens.secure and have a Default.java Screen in each 
-of the packages mimicing the above approaches.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/services-howto.xml b/xdocs/howto/services-howto.xml
deleted file mode 100644
index c0bae53..0000000
--- a/xdocs/howto/services-howto.xml
+++ /dev/null
@@ -1,211 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Services Howto</title>
- </properties>
-
- <body>
-  <section name="Turbine Services Creation">
-    <p>
-      Adding your own services to Turbine is an easy task. Simply make your 
-      class extend <b>org.apache.turbine.services.TurbineBaseService</b>. 
-      This is necessary so that the Turbine Service Broker can start up 
-      your service.
-    </p>
-
-    <p>
-      To make it known to the Turbine itself, you must configure it in 
-      the TurbineResources.properties like this:
-
-<source>
-services.MyServiceName.classname = full.class.name.of.your.service
-</source>
-    </p>
-
-    <p>
-      and you're set, Turbine will now initialize the service if it is 
-      requested by an application. Please be aware that your service is 
-      <b>not</b> initialized right at Startup. This is called lazy init. 
-      If you need your Service to start up right away, you must add another 
-      property to the TurbineResources.properties:
-
-<source>
-services.MyServiceName.earlyInit = true
-</source>
-    </p>
-
-    <p>
-      If you look at the examples of the simple services like
-      servlet/TurbineServletService you'll get on speed pretty fast.
-    </p>
-</section>
-
-<section name="In a Nutshell">
-    <p>
-      <ul>
-        <li>
-          You must not try to provide a constructor with parameters, best is
-          not to provide any constructor at all, because nothing should be 
-          done at construction time (You'll get the default constructor which
-          is fine for us).
-         </li>
-         <li>
-           Your Service will be instantiated exactly once. So it must be 
-           threadsafe and must not use class global variables for 
-           session-dependend information.
-         </li>
-         <li>
-           You should provide an init() method which is called when your 
-           service is requested for the first time (or at startup if you 
-           set earlyInit = true) and should initialize your service 
-           dependent code. There is lots of confusion of how this init() 
-           method should look like because Turbine used different methods 
-           of Service initialization. Beginning with Turbine 2.2, you should 
-           only use the parameterless variant:
-         </li>
-      </ul>
-    </p>
-<source>
-public void init() throws InitializationException
-{
-}
-</source>
-    <p>
-      <ul>
-        <li>
-          You <b>must</b> call setInit(true) if your service initializes 
-          correctly. Otherwise no user of your service can request it. 
-          Right after this, your service might be queried and used by other 
-          sessions, so you should not call setInit() prematurely.
-        </li>
-        <li>
-          You might provide a shutdown() method which is called when 
-          Turbine shuts down. You can clean up your internal data in this 
-          method. You should call setInit(false) as the last thing in 
-          shutdown().
-        </li>
-      </ul>
-    </p>
-</section>
-
-<section name="Style">
-    <p>
-      It is good style, that if you build the FooService, to provide 
-      <b>your.package.FooService.java</b> with an Interface definition of 
-      your service which extends <b>org.apache.turbine.services.Service</b>
-      It should contain a constant SERVICE_NAME with the Turbine visible 
-      name of your service like this:
-<source>
-package your.package;
-
-import org.apache.turbine.services.Service;   
-
-public interface FooService extends Service
-{
-    /**
-     * The service identifier
-     */
-    public String SERVICE_NAME = "FooService";
-    
-    [...]
-
-}
-</source>
-    </p>
-	
-    <p>
-      <b>your.package.TurbineFooService.java</b> which extends the 
-      <b>org.apache.turbine.services.TurbineBaseService</b> class and 
-      implements <b>your.package.FooService</b> and provides the actual code:
-    </p>
-    
-<source>
-package your.package;
-
-import org.apache.turbine.services.TurbineBaseService;
-
-public class TurbineFooService 
-    extends TurbineBaseService
-    implements FooService
-{
-    /**
-     * Service logic here
-     */
-    [...]
-
-}
-</source>
-
-    <p>
-      <b>your.package.TurbineFoo.java</b> which contains static facade 
-      methods for your service along the following lines:
-
-<source>
-import org.apache.turbine.services.TurbineServices;
-
-public class TurbineFoo
-{
-    protected static FooService getService()
-    {
-        return (FooService) TurbineServices
-            .getInstance().getService(FooService.SERVICE_NAME);
-    }
-
-    [...]
-
-    public static void fooMethod1()
-    {
-        getService().fooMethod1();
-    }
-
-    public static int fooMethod2(int bar)
-    {
-        return getService().fooMethod2(bar);
-    }
-
-    [...]
-    
-}
-</source>
-    </p>
-
-    <p>
-      to give users of your service the ability to simply write:
-
-<source>
-TurbineFoo.fooMethod1();
-</source>
-    </p>
-    
-    <p>
-      in their code and not to care about which actual Implementation of 
-      FooService is running.
-    </p>
-
-    <p>
-      init() and shutdown() applies to Turbine 2.1/2.2 This might change 
-      with the lifecycle interfaces in a later release.
-    </p>
-</section>
-
- </body>
-</document>
diff --git a/xdocs/howto/url-rewriting-howto.xml b/xdocs/howto/url-rewriting-howto.xml
deleted file mode 100644
index c0dace9..0000000
--- a/xdocs/howto/url-rewriting-howto.xml
+++ /dev/null
@@ -1,187 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>URL Rewriting Howto</title>
- </properties>
-
-<body>
-
-<section name="Scenario and Overview">
-
-<p>
-Unaltered Turbine URLs look like this:
-<code>http://www.foo.com:8080/CONTEXT/servlet/MAPPING/template/Foo.vm</code>.<br/>
-But you want shorter URLs, or you don't like exposing the use of
-servlets in the URL.  Maybe this url would suit you better:
-<code>http://www.foo.com:8080/po/s/la/template/Foo.vm</code>
-</p>
-
-<p>
-The bulk of the url is defined by the servlet api and is outside of the
-control of Turbine:
-<pre>
-http://www.foo.com/CONTEXT/servlet/MAPPING/template/Foo.vm
-                   [ servlet api defined ][ turbine       ]</pre>
-
-This HOWTO describes how you can control the servlet part of the url
-in Tomcat.  For other servlet environments you'll have to consult
-their documentation.
-</p>
-
-<p>
-Three parts of the url will be addresed:
-<ol>
-<li>the web application context (CONTEXT in the example above),</li>
-<li>the servlet prefix (servlet),</li>
-<li>and the servlet mapping (MAPPING).</li>
-</ol>
-</p>
-
-</section>
-
-<section name="The Context">
-
-<p>
-You need to register the context with Tomcat. If you have given your
-application a short name like 'po' and placed it correctly in the
-webapps directory, then you won't need to do anything special. Tomcat
-will find the directory, and add a context. If you have a long
-application name like 'mywonderfulapp', add the following lines to
-Tomcat's server.xml file (in the TDK you'll find this here:
-<code>tdk/conf/server.xml</code>):
-</p>
-
-<source><![CDATA[
-<Context
-    path="/po"
-    docBase="webapps/mywonderfulapp"
-    reloadable="true"
-    debug="0"
-    trusted="false" >
-</Context>
-]]></source>
-
-<p>
-Everthing after the docBase= line is obviously up to you. This tells
-Tomcat to add a context named 'po' with the docbase of your
-application.
-</p>
-
-</section>
-
-<section name="The Servlet Prefix">
-
-<p>
-Modifying the servlet prefix also requires editing Tomcat's server.xml
-file.  Tomcat will use this prefix to determine if a given request is
-for a servlet.  Edit the following lines:
-</p>
-
-<source><![CDATA[
-<RequestInterceptor
-    className="org.apache.tomcat.request.InvokerInterceptor"
-    debug="0" prefix="/s/" />
-]]></source>
-
-<p>
-With this modification, Tomcat recognize requests containing /s/ in
-the url as a servlet request and will look for the servlet in the
-web.xml descriptor.
-</p>
-
-</section>
-
-<section name="The Servlet Name">
-<p>
-This is defined in web.xml (which you will find here:
-<code>webapps/WEB-INF/web.xml</code>).  This is automatically given
-the name of your application in Turbine.  To change it, simply edit the
-web.xml file as follows:
-</p>
-
-<source><![CDATA[
-<servlet-name>
-    la
-</servlet-name>
-]]></source>
-
-<p>
-<strong>If you are using Tomcat standalone, then you are done and your url is
-now <code>http://servername:port:/po/s/la</code></strong>
-</p>
-
-</section>
-
-<section name="If you are running Apache and mod_jk">
-
-<p>
-... you will need to change your mod_jk.conf file to include the following:
-</p>
-
-<source><![CDATA[
-#########################################################
-# Auto configuration for the /po context starts.
-#########################################################
-
-#
-# Make Apache aware of the location of the context
-#
-Alias /po "serverroot/webapps/mywonderfulapp"
-<Directory "serverroot/webapps/mywonderfulapp">
-     Options Indexes FollowSymLinks
-</Directory>
-
-#
-# Mount all JSP files and the /servlet/ uri to Tomcat
-#
-JkMount /po/s/* ajp12
-JkMount /po/*.jsp ajp12
-
-#
-# Prohibit users from directly accessing WEB-INF
-#
-<Location "/mywonderfulapp/WEB-INF/">
-     AllowOverride None
-     deny from all
-</Location>
-
-#
-# Prohibit users from directly accessing META-INF
-#
-<Location "/mywonderfulapp/META-INF/">
-     AllowOverride None
-     deny from all
-</Location>
-
-#######################################################
-# Auto configuration for the /po context ends.
-#######################################################
-]]></source>
-
-<p>
-document created August 14, 2001
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/howto/velocity-site-howto.xml b/xdocs/howto/velocity-site-howto.xml
deleted file mode 100644
index decb01e..0000000
--- a/xdocs/howto/velocity-site-howto.xml
+++ /dev/null
@@ -1,545 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Velocity Site Howto</title>
- </properties>
-
-<body>
-
-<section name="Velocity Site">
-
-<p>
-In Turbine, we have excellent integration with the template tool
-<a href="http://jakarta.apache.org/velocity/">Velocity</a>,
-we call this VelocitySite building. The reason why we want to wrap Turbine
-around Velocity instead of using it on its own is to provide a completely
-MVC model for building web applications where the framework has control
-over the authentication, security, connection pool, etc and Velocity is
-simply used as the View portion of the MVC model. Turbine is responsible
-for helping you manage all the different templates as well so that you
-can easily construct a site that both designers and engineers can work
-together on (<strong>that is our primary goal!</strong>). The reason why this is
-good is that it will help you design and build web applications that have
-more functionality and less duplication of code since Turbine is fully
-re-usable.
-</p>
-
-<p>
-Knowledge of how Velocity works and what a Velocity Context object is
-are required for understanding this documentation. This documentation also
-assumes that you are using a Servlet API 2.2 and higher serlvet engine
-such as <a href="http://jakarta.apache.org/tomcat/">Tomcat</a> because
-we are now targeting towards using WAR archives. Although, this should
-work with older servlet engines as well...it just may be slightly harder
-for you to setup. You should also be familiar with the rest of the Turbine
-documentation that is referenced on the <a href="index.html">index page</a>.
-</p>
-
-<p>
-Here is a brief description of the way that the system works: all requests
-are passed through the Turbine Servlet. The servlet is then responsible
-for brokering the request, building up the Context object and then calling
-Velocity's template engine to process your template document and return
-the results. Pretty simple. Now, lets move on to some more detailed instructions...:-)
-</p>
-
-</section>
-
-<section name="Screens">
-
-<p>
-Lets start off with a simple Velocity Screen to get things rolling
-so you can see how powerful things are. You should compile this class into
-your <em>WEB-INF/classes</em> directory.
-</p>
-
-<p>
-Note: In the examples below, you should replace <code>com.yourcompany.app</code>
-with the correct value for your application.
-</p>
-
-<source>
-package com.yourcompany.app.modules.screens;
-
-// Velocity Stuff
-import org.apache.velocity.context.Context;
-
-// Turbine Stuff
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.modules.screens.VelocityScreen;
-
-public class HelloWorld extends VelocityScreen
-{
-    public void doBuildTemplate( RunData data, Context context )
-        throws Exception
-    {
-        // the context object has already been setup for you!
-        context.put ("hello", "this is a test...");
-    }
-}
-</source>
-
-<p>
-Ok, as you can see, you do not even need to return a value from your method!
-You simply stuff objects into the Velocity Context and that is it! Next,
-you will want to create a .vm template of the same name as your class:
-HelloWorld.vm...within that template you will put the BODY portion of your
-page. In other words, there is no reason to put the header/footer into
-this file since that will be built seperately (more documentation on that
-futher down...). You should save this document in your <em>templates/screens/</em>
-directory.
-</p>
-
-<p>
-You will also need to modify your TurbineResources.properties file to tell 
-Turbine where to look for your new screen class.
-</p>
-
-<source>
-module.packages=org.apache.turbine.modules, com.yourcompany.app.modules
-</source>
-
-<source><![CDATA[
-<p>
-    <font color="red">
-        $hello of the emergency broadcast station.
-    </font>
-</p>
-]]></source>
-
-<p>
-When you request a URL like this:
-</p>
-
-<p>
-http://www.server.com/servlet/Turbine/template/HelloWorld.vm
-</p>
-
-<p>
-What that will do is cause the system to first execute the HelloWold.java
-class (if it exists) and then it will call Velocity's template engine directly
-and execute the HelloWorld.vm template and then return the results back
-to you.
-</p>
-
-<p>
-<em>NOTE:</em> Turbine capitalizes the first letter in the class file name
-before looking for the matching class in the classpath.  This allows you to
-follow (somewhat) normal class naming guidelines. For example:
-</p>
-
-<p>
-index.vm and Index.vm both map to Index.class
-
-roleeditor.vm maps to Roleeditor.class
-
-role_editor.vm maps to Role_editor.class
-</p>
-
-<p>
-The result will be a fully formed HTML document with the <em>$hello</em>
-replaced with the value: "this is a test...". If you want to make the URI
-above shorter or easier to read, you could simply re-write things using
-<a href="http://www.apache.org/docs/mod/mod_rewrite.html">mod_rewrite</a>.
-For example, by removing the "<em>/servlet/Turbine/template</em>" portion
-of the URI.
-</p>
-
-<p>
-As you can see, this is much easier than doing servlet after servlet
-because it removes a lot of the setup and other things that could potentially
-go wrong. It also makes the individual template files easier to manage
-and more re-usable because there isn't any surrounding page layout mixed
-in with the page.
-</p>
-
-<p>
-If you want to do something that is more complicated than this that
-is reflected across all of your Screens, then you should write a class
-that is a subclass of VelocityScreen and then put your specific code
-in there. For example, if you wanted a security method to be called automaticially
-without having to normally call super() to get it from an overridden method
-in the superclass, you could have something like this (semi-pseudo untested
-code):
-</p>
-
-<source>
-package com.yourcompany.app.modules.screens;
-
-// Velocity Stuff
-import org.apache.velocity.context.Context;
-
-// Turbine Stuff
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.modules.screens.VelocityScreen;
-
-public abstract class SecureScreen extends VelocityScreen
-{
-    protected boolean doCheckSecurity(RunData data)
-        throws Exception
-    {
-        if (data.isSecure())
-            return true;
-        else
-            return false;
-    }
-
-    /*
-     * override the doBuild() method of the
-     * TemplateScreen to always check security first
-     */
-    public void doBuild(RunData data, Context context) throws Exception
-    {
-        if ( !this.doCheckSecurity(data))
-        {
-            // set the template and screen to be different or do
-            // some other short circuit code here
-        }
-        doBuildTemplate(data, context);
-        return super.buildTemplate(data, context);
-    }
-}
-</source>
-
-<p>
-What this would do is override the doBuild() method in TemplateScreen (which
-is the base class that VelocityScreen subclasses from) and have it
-always do a security check before displaying the content. The benefit of
-this is that all you need to do to add security to your screen is to simply
-subclass this class instead of VelocityScreen. There is also no need
-to remember to call super() since the doBuild() method will be called for
-you automaticially by Turbine. You can start to see how Turbine is simply
-an extension of the servlet framework itself. For example, the Servlet
-Engine will call HttpServlet's service() method for you, just like Turbine
-will call your doBuild() method for you. Tight integration with tools like
-Velocity just make things even cleaner. :-)
-</p>
-
-<p>
-One other feature in this system is that if you are not building up
-a Context object that is specific for your screen, then you do not need
-to create a Java class to match the template file. You simply create the
-.vm template and put it in a directory and call it with the same URI described
-above. This is really useful when you have a static site of content that
-you are converting to be dynamic and you only want to do small portions
-of it at any one time. You can also do the opposite of this which is to
-only create a Java class file and no template file. You can do this by
-simply overriding the doBuild() method in TemplateScreen and returning
-your results directly instead of attempting to build a template. Later,
-when you want to add a template and remove the HTML code, you can change
-the doBuild() into a doBuildTemplate(), build the Context object up and
-you are done. Cool!
-</p>
-
-<p>
-Here is an example of having templates in subdirectories and making
-links to each of them.
-</p>
-
-<p>
-Create a directory structure like this:
-</p>
-
-<p>
-WEB-INF/templates/screens/admin/
-Put <em>index.vm</em> into the <em>screens/</em> directory.
-Put <em>UserAdmin.vm</em> into the <em>screens/admin/</em> directory.
-</p>
-
-<p>
-In index.vm, if you want to link to UserAdmin.vm, you would add something
-like this to the HTML:
-</p>
-
-<source><![CDATA[
-<a href="$link.setPage("admin,UserAdmin.vm")">User Admin Screen</a>
-]]></source>
-
-<p>
-As you can see above, I used a "," instead of a "/". You can use either
-one here. The above will create a fully formed URI with the session information
-encoded into the link if the clients brower has cookies turned off.
-</p>
-
-</section>
-
-<section name="Layout and Navigations">
-
-<p>
-Now that you know how to create simple Screens, you are probably wondering
-where the layout and navigation portions of the page come from and how
-you control that. If you were not wondering that, then shame on you. :-)
-Essentially, it is the same exact procedure as before except you subclass
-VelocitySiteLayout and VelocitySiteNavigation instead. Again, it is possible
-to not have Java class files always match up with the template and in most
-cases, you probably won't need to have a user defined Context in the Layout.
-</p>
-
-<p>
-Below is an example Layout. It will be searched for in the templates/layouts
-directory structure and also takes advantage of the same template path
-lookup code as described below:
-</p>
-
-<source><![CDATA[
-#if ( $data.getMessage() )
-{
-    $data.getMessage()
-}
-
-<table width="100%">
-
-<tr>
-    <td>$navigation.setTemplate("/default_top.vm")</td>
-</tr>
-<tr>
-    <td>$screen_placeholder</td>
-</tr>
-<tr>
-    <td>$navigation.setTemplate("/default_bottom.vm")</td>
-</tr>
-
-</table>
-]]></source>
-
-<p>
-The variable <em>$screen_placeholder</em> is important here because that
-is where the output from your Screen will be placed. VelocitySiteLayout
-is responsible for taking care of this. The other variables are for including
-your Navigations into the system. The benefit of all of this is that it
-enforces the View portion of the MVC model because the "body" and "navigation"
-portions of your page simply becomes a variable that you can plug into
-any number of Layouts and in any location. If you want to write code so
-that the Layout is determined by a variable in the database or in the HTTP
-request or whever, all you need to do is write your own VelocitySiteLayout
-and override some of the methods in there to determine the layout based
-on your own conditions instead of the system default conditions.
-</p>
-
-
-</section>
-
-<section name="How the templates are found">
-
-<p>
-Since everything is keyed off the template variable, if
-<em>data.getParameters().getString("template")</em>
-returns <em>/about_us/directions/driving.vm</em>, the search for the Screen
-class is as follows (in order):
-</p>
-
-<ol>
-<li>about_us.directions.Driving</li>
-
-<li>about_us.directions.Default</li>
-
-<li>about_us.Default</li>
-
-<li>Default</li>
-
-<li>VelocityScreen</li>
-</ol>
-
-<p>
-If the template variable does not exist, then <em>VelocityScreen</em>
-will be executed and <em>templates/screens/index.vm</em> will be executed.
-If <em>index.vm</em> is not found or if the template is invalid or Velocity
-execution throws an exception of any reason, then <em>templates/screens/error.vm</em>
-will be executed.
-</p>
-
-<p>
-For the Layouts and Navigations, the following paths will be searched
-in the layouts and navigations template subdirectories (in order):
-</p>
-
-<ol>
-<li>/about_us/directions/driving.vm</li>
-
-<li>/about_us/directions/default.vm</li>
-
-<li>/about_us/default.vm</li>
-
-<li>/default.vm</li>
-</ol>
-
-</section>
-
-<section name="Actions">
-
-<p>
-Actions happen when you have an <em>action</em> parameter defined in the
-URI. For example:
-</p>
-
-<p>
-<ul><u>http://www.server.com/servlet/Turbine/template/HelloWorld.vm/action/UpdateWorld</u></ul>
-</p>
-
-<p>In this case, what happens is that the class UpdateWorld class (located in your
-<em>WEB-INF/classes/com/yourcompany/app/modules/actions/</em> directory) 
-is executed first before
-anything. Then your HelloWorld class (located in your 
-WEB-INF/classes/com/yourcompany/app/modules/screens/
-directory) is executed. Then your template (for screen/navigation/layout)
-HelloWorld.vm is executed. The point of an action is that it should perform
-some sort of "action" on your system. Usually, this means storing some
-information from a POST request into a database or sending email or something
-of that nature. Actions themselves do not return results, but may set a
-message with data.setMessage(). They can also short circuit the system
-by changing the Template and Screen to be executed. You might want to do
-that if there is an error with the form data and you want to re-display
-the same page again. Unlike most of the rest of the modules (ie: Screens,
-Navigations, Layouts), there is no corresponding Velocity template file
-for an Action.
-</p>
-
-<source>
-package com.yourcompany.app.modules.actions;
-
-// Velocity Stuff
-import org.apache.velocity.context.Context;
-
-// Turbine Stuff
-import org.apache.turbine.util.RunData;
-import org.apache.turbine.modules.actions.VelocityAction;
-
-public class AddUser extends VelocityAction
-{
-    public void doPerform( RunData data, Context context ) throws Exception
-    {
-        if ( data.getParameters().getString("username",null) == null)
-        {
-            data.setMessage("Username does not exist");
-            setTemplate ( data, "AddUser.vm" );
-            return;
-        }
-
-        // store user info into database
-        data.setMessage("Information stored!");
-        setTemplate( data, "MainMenu.vm");
-
-        // stuff something into the Velocity Context
-        context.put ("variable", "foo");
-    }
-}
-</source>
-
-<p>
-In the very basic example Action above, a check is performed to make sure
-that
-the form data contained a "username" variable. If there is no data, the
-template is changed back to the "AddUser" template and the processing is
-stopped with an error message that can be easily displayed in the template.
-If the processing finishes, then the MainMenu.vm template will be shown
-and the message can be displayed.
-</p>
-
-</section>
-
-<section name="Action Event">
-
-<p>
-There is also a new feature of Turbine that the VelocitySiteAction takes
-advantage of, it is called <a href="action-event-howto.html">Action Event</a>.
-Please click the link and read more documentation about it. This is an
-excellent way to write your actions because now they are entirely event
-driven based on which button was clicked in the HTML form.
-</p>
-
-</section>
-
-<section name="Velocity Frames">
-
-<p>
-Frames are easily achieved with Velocity, the frameset tag being implemented at
-the screen level. The default setting for the layout.default directive in the
-TurbineResources.properties is the VelocityECSLayout class.
-The VelocityECSLayout wraps the Screen in Body tags. For frames this needs to be
-removed. The layout.default needs to be changed to;
-</p>
-
-<source>
-layout.default=VelocityOnlyLayout
-</source>
-
-<p>
-The layout Velocity template needs to point to the screen_placeholder. As an
-example modify the Default.vm in the /WEB-INF/templates/layouts/;
-</p>
-
-<source>
-$screen_placeholder
-</source>
-
-<p>
-The screen_placeholder marker will load and process the template marked as the
-template.homepage in the TurbineResources.properties. To create frames this is
-the template which will need to contain the frameset tag. Edit
-/WEB-INF/templates/screens/Index.vm;
-</p>
-
-<source><![CDATA[
-$page.setTitle("Frames example");
-
-<frameset>
-  <frame src="$link.getPage("FrameTop.vm")" />
-  <frame src="http://www.something.com/" />
-</frameset>
-]]></source>
-
-<p>
-Create a FrameTop.vm template in the /WEB-INF/templates/screens directory. The
-top frame will load this template. The reference to something.com requires an
-internet connection and is shown as an example, anything can be linked to the
-lower frame, another Velocity Screen for instance.
-</p>
-
-<source><![CDATA[
-## Example FrameTop.vm
-<p><b>The FrameTop Velocity Template</b>
-]]></source>
-
-</section>
-
-<section name="Multiple Velocity Paths">
-
-<p>
-The VelocityService can support many paths for the Velocity Templates to
-be loaded and read from. This is specified in the
-TurbineResources.properties file;
-</p>
-
-<source>
-services.VelocityService.file.resource.loader.path = /templates,/my-templates,/more-tempates
-</source>
-
-<p>
-The multiple paths are comma delimited and are specified from the
-Servlet Engines context.
-</p>
-
-</section>
-
-</body>
-</document>
-
diff --git a/xdocs/howto/velocityonlylayout-howto.xml b/xdocs/howto/velocityonlylayout-howto.xml
deleted file mode 100644
index 8a6895e..0000000
--- a/xdocs/howto/velocityonlylayout-howto.xml
+++ /dev/null
@@ -1,230 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>VelocityOnlyLayout</title>
- </properties>
-
-<body>
-
-<section name="Introduction">
-<p>
-    The VelocityECSLayout has been deprecated in Turbine 2.3. This document 
-    is intended to help you convert your application to use the 
-    VelocityOnlyLayout.
-</p>
-<p>
-    The VelocityOnlyLayout does not use ECS to generate the HTML page for 
-    you. This also means that the current $page pull tool will not work with 
-    the VelocityOnlyLayout. You will be responsible for constructing the HTML, 
-    HEAD, BODY, etc. tags using Velocity.
-</p>
-<p>
-    Although this seems like a lot of trouble, it really isn't. All that you 
-    really need to do is modify your layout templates. You will still use the 
-    $page pull tool just like before. Your layout templates will also use the 
-    $page pull tool to extract the data needed to build the HEAD and BODY 
-    tags. 
-</p>
-</section>
-
-<section name="Changes to make in TR.props">
-<p>
-    Changes the definition of the $page pull tool:
-</p>
-<source>
-<![CDATA[
-tool.request.page = org.apache.turbine.util.template.HtmlPageAttributes
-]]>
-</source>
-<p>
-	Change the default layout
-</p>
-<source>
-<![CDATA[
-services.VelocityService.default.layout = VelocityOnlyLayout
-]]>
-</source>
-
-</section>
-
-<section name="Changes to your code">
-<p>
-  <ul>
-  	<li>$page.addAttribute(attribute,value) has been replaced with 
-  	    $page.addBodyAttribute(attribute,value)</li>
-  	<li>$page.setScript(url) has been replaced with 
-  	    $page.addScript(url)</li>
-  	<li>$page.setStyleSheet(url) has been replaced with 
-  	    $page.addStyleSheet(url)</li>
-  	<li>$page.setStyle(styleText) has been replaced with 
-  	    $page.addStyle(styleText)</li>
-  	<li>$page.setStyleSheet(url,media) has been replaced with 
-  	    $page.addStyleSheet(url,media,title,type)</li>
-  </ul>
-</p>
-<p>
-    <em>Use of any of the deprecated methods will generate a log message 
-    at the info level.</em>
-</p>
-<p>
-    Add the line
-</p>
-<source>
-<![CDATA[
-$page.DefaultDoctype
-]]>
-</source>
-<p>
-    to your layout templates to pick up the default doctype definition from
-    TurbineResources.properties thus:
-</p>
-<source>
-<![CDATA[
-# Set the components of the default Doctype for use in html documents.
-#
-# Defaults: There are no defaults - if default.html.doctype.root.element is not
-#           set then no default doctype will be available.
-
-default.html.doctype.root.element=HTML
-default.html.doctype.identifier=-//W3C//DTD HTML 4.01 Transitional//EN
-default.html.doctype.url=http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd
-]]>
-</source>
-<p>
-    Add the line
-</p>
-<source>
-<![CDATA[
-services.VelocityService.velocimacro.library = macros/TurbineMacros.vm
-]]>
-</source>
-<p>
-    to your TurbineResources.properties and it will pick up the 
-    TurbineMacros.vm in your Turbine jar. An example of how to use 
-    these macros follows.
-</p>
-<p>
-    Here is a sample layout template that you can use:
-</p>
-<source>
-<![CDATA[
-    ## Set defaults for all pages using this layout.  Anything set here can
-    ## be overridden in the screen template.
-    $page.setTitle("My default page title");
-    $page.setHttpEquiv("Content-Style-Type","text/css")
-    $page.addStyleSheet($content.getURI("myStyleSheet.css"))
-    $page.addScript($content.getURI("globalJavascriptCode.js"))
-    ## build the HTML, HEAD, and BODY tags dynamically
-
-    $page.DefaultDoctype
-    <html>
-      #TurbineHtmlHead()
-      <body #TurbineHtmlBodyAttributes() >
-      $navigation.setTemplate("default_header.vm")
-      $screen_placeholder
-      $navigation.setTemplate("default_footer.vm")
-
-      </body>
-    </html>
-]]>
-</source>
-<p>
-    This produces the same code as the following sample layout 
-    template that you can use:
-</p>
-	<source>
-<![CDATA[
-    ## Set defaults for all pages using this layout.  Anything set here can
-    ## be overridden in the screen template.
-    $page.setTitle("My default page title");
-    $page.setHttpEquiv("Content-Style-Type","text/css")
-    $page.addStyleSheet($content.getURI("myStyleSheet.css"))
-    $page.addScript($content.getURI("globalJavascriptCode.js"))
-    ## build the HTML, HEAD, and BODY tags dynamically
-
-    $page.DefaultDoctype
-    <html>
-      <head>
-        #if($page.Title != "")
-        <title>$page.Title</title>
-        #end
-        #foreach($metaTag in $page.MetaTags.keySet())
-        <meta name="$metaTag" content="$page.MetaTags.get($metaTag)">
-        #end
-        #foreach($httpEquiv in $page.HttpEquivs.keySet())
-        <meta http-equiv="$httpEquiv" content="$page.HttpEquivs.get($httpEquiv)">
-        #end
-        #foreach($styleSheet in $page.StyleSheets)
-          <link rel="stylesheet" href="$styleSheet.Url"
-            #if($styleSheet.Type != "" ) type="$styleSheet.Type" #end
-            #if($styleSheet.Media != "") media="$styleSheet.Media" #end
-            #if($styleSheet.Title != "") title="$styleSheet.Title" #end
-          >
-        #end
-        #if ($page.Styles.size() > 0)
-          <style type="text/css">
-          #foreach( $style in $page.Styles )
-            $!style
-          #end
-          </style>
-        #end
-        #foreach($script in $page.Scripts)
-          <script type="text/javascript" src="$script" language="JavaScript"></script>
-        #end
-      </head>
-
-      ## Construct the body tag.  Iterate through the body attributes to build the opening tag
-      <body
-        #foreach($attributeName in $page.BodyAttributes.keySet())
-          $attributeName = "$page.BodyAttributes.get($attributeName)"
-        #end
-      >
-
-      $navigation.setTemplate("default_header.vm")
-      $screen_placeholder
-      $navigation.setTemplate("default_footer.vm")
-
-      </body>
-    </html>
-]]>
-</source>
-</section>
-
-<section name="Writing Directly To ServletOutputStream">
-<p>
-    See
-	<a href="http://nagoya.apache.org/wiki/apachewiki.cgi?JakartaTurbine2/VelocityOnlyLayout">
-	VelocityOnlyLayout</a> on the Apache wiki for some information concerning 
-	writing directly to ServletOutputStream.
-</p>
-</section>
-
-<section name="Updates to this document">
-<p>
-    This document is by no means complete or totally accurate. We welcome 
-    suggestions as to how it might be improved, particularly if you have 
-    just completed updating an application by following this howto.
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/images/Flow.ai b/xdocs/images/Flow.ai
deleted file mode 100644
index 64271ac..0000000
--- a/xdocs/images/Flow.ai
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/Loaders.ai b/xdocs/images/Loaders.ai
deleted file mode 100644
index 564bc8b..0000000
--- a/xdocs/images/Loaders.ai
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/Loaders.gif b/xdocs/images/Loaders.gif
deleted file mode 100644
index a5047ab..0000000
--- a/xdocs/images/Loaders.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/ModuleObjectLayout.ai b/xdocs/images/ModuleObjectLayout.ai
deleted file mode 100644
index 9a80833..0000000
--- a/xdocs/images/ModuleObjectLayout.ai
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/ModuleObjectLayout.gif b/xdocs/images/ModuleObjectLayout.gif
deleted file mode 100644
index bdda2d4..0000000
--- a/xdocs/images/ModuleObjectLayout.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/Modules.ai b/xdocs/images/Modules.ai
deleted file mode 100644
index bfb2a82..0000000
--- a/xdocs/images/Modules.ai
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/Modules.gif b/xdocs/images/Modules.gif
deleted file mode 100644
index 94f2000..0000000
--- a/xdocs/images/Modules.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/blue-logo.gif b/xdocs/images/blue-logo.gif
deleted file mode 100644
index 938c08a..0000000
--- a/xdocs/images/blue-logo.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/jakarta-logo-blue.gif b/xdocs/images/jakarta-logo-blue.gif
deleted file mode 100644
index d82cfe9..0000000
--- a/xdocs/images/jakarta-logo-blue.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/jakarta.png b/xdocs/images/jakarta.png
deleted file mode 100644
index ab945d3..0000000
--- a/xdocs/images/jakarta.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/logo.gif b/xdocs/images/logo.gif
deleted file mode 100644
index 76ea56c..0000000
--- a/xdocs/images/logo.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/logo.psd b/xdocs/images/logo.psd
deleted file mode 100644
index 5551bc3..0000000
--- a/xdocs/images/logo.psd
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/logo.txt b/xdocs/images/logo.txt
deleted file mode 100644
index 6aa46ba..0000000
--- a/xdocs/images/logo.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Logo Created By: David Watanabe <davew@exosci.com>
-
-The font is Arial Black (faux italic) at 80 pts.  The tracking is -60 except
-on the tight spots you noted ("tu","rb","ne") where it is -40.
-
-The glyph is a ~ (tilde) of the same font and style rotated 60 degrees
-thrice.
diff --git a/xdocs/images/module-hierarchy-UML.png b/xdocs/images/module-hierarchy-UML.png
deleted file mode 100644
index 09fa3ee..0000000
--- a/xdocs/images/module-hierarchy-UML.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/powered-by-logo.gif b/xdocs/images/powered-by-logo.gif
deleted file mode 100644
index 94c6554..0000000
--- a/xdocs/images/powered-by-logo.gif
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/powered-by-logo.psd b/xdocs/images/powered-by-logo.psd
deleted file mode 100644
index 8a80652..0000000
--- a/xdocs/images/powered-by-logo.psd
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/request-processing-UML.png b/xdocs/images/request-processing-UML.png
deleted file mode 100644
index fe15f61..0000000
--- a/xdocs/images/request-processing-UML.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/service-hierarchy-UML.png b/xdocs/images/service-hierarchy-UML.png
deleted file mode 100644
index cfdf1ce..0000000
--- a/xdocs/images/service-hierarchy-UML.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/service-initialization-UML.png b/xdocs/images/service-initialization-UML.png
deleted file mode 100644
index e6f464d..0000000
--- a/xdocs/images/service-initialization-UML.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/turbine-external-initialization-UML.dia b/xdocs/images/turbine-external-initialization-UML.dia
deleted file mode 100644
index 7d4157d..0000000
--- a/xdocs/images/turbine-external-initialization-UML.dia
+++ /dev/null
Binary files differ
diff --git a/xdocs/images/turbine-external-initialization-UML.png b/xdocs/images/turbine-external-initialization-UML.png
deleted file mode 100644
index 212a110..0000000
--- a/xdocs/images/turbine-external-initialization-UML.png
+++ /dev/null
Binary files differ
diff --git a/xdocs/index.xml b/xdocs/index.xml
deleted file mode 100644
index d7c8135..0000000
--- a/xdocs/index.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine</title>
- </properties>
-
- <body>
-
- <section name="What is Turbine?">
-
- <p>
-    Turbine is a servlet based framework that allows experienced Java
-    developers to quickly build secure web applications. Parts of
-    Turbine can also be used independently of the web portion of Turbine
-    as well. In other words, we strive to make portions of Turbine
-    easily available for use in other applications.
- </p>
-
- <p>
-    <strong>A web based application is an application where users use
-    their favorite web browser in order to access secure business
-    logic.</strong>
- </p>
-
- <p>
-    A couple example web applications that can benefit from using this
-    framework include <a
-    href="http://www.restorationhardware.com/">e-commerce shopping cart
-    systems</a>, Yahoo style link conservatories and <a
-    href="http://scarab.tigris.org/">project / bug / issue</a> tracking systems as
-    well as cool XML integration applications like <a
-    href="http://jakarta.apache.org/jetspeed/">Jetspeed</a>.
- </p>
-
- <p>
-    <strong>A platform for building applications, not just running
-    them.</strong>
- </p>
-
- <p>
-    Many commercial (and non-commercial!) software companies will
-    attempt to sell you an "Application Server", but what few people
-    realize is that it is only half of the battle to creating a web
-    application. There is often quite a lot of code that your engineers
-    end up re-inventing the wheel with or grabbing various packages from
-    all over the net with various licenses that you may or may not agree
-    to.
- </p>
-
- <p>
-    The point of Turbine is to collect that code into one location and
-    make it easy to create re-usable components (such as
-    ParameterParsing, Database Connection Pools, Job Scheduling,
-    GlobalCaches, integration with other tools such as Torque, Velocity,
-    etc...) all under a <a href="../common/license.html">license</a>
-    (Apache) that allows you to create useful websites for your
-    customers without worrying about viral code. Turbine is not the end
-    all answer, but it sure is a nice way to make your development life
-    easier.
- </p>
-
- <p>
-    This framework has an intended audience that is directed at web
-    engineers, not necessarily the web designers. By using this
-    framework, it is possible for the web engineers to build intuitive
-    high level systems for the web designers to use, but the low level
-    framework is strictly for web engineers. Turbine is not a web
-    application server. It is a tool for building web applications. Your
-    <a href="http://jakarta.apache.org/tomcat/">servlet engine</a> is your
-    application server and the application that you develop using this
-    framework is your web application.
- </p>
-
- <p>
-    <strong>Integration with Velocity is well
-    defined and makes doing applications using these tools painless for
-    both the developers and the web designers!</strong>
- </p>
-
- <p>
-    Turbine can be integrated with existing <a
-    href="http://jakarta.apache.org/velocity/">Velocity</a>, <a
-    href="http://java.sun.com/products/jsp/">Java Server Pages (JSP)</a>
-    and <a href="http://cocoon.apache.org/">Cocoon</a> technologies by
-    specially creating Screens that use Services to parse templates.
-    Screens can also be created to read files from other websites as
-    well as off disk. This makes it easy to have designers simply put
-    the body of a page on disk and Turbine can serve these files when
-    requested. All of this is described in more detail in the
-    documentation section below.
- </p>
-
- <p>
-    The reason why Turbine works so well is because it applies object oriented
-    principles to the entire process of building a complex secure web application.
-    We try to follow the
-    <a href="http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html">Model
-    2 methodology</a> yet expand on it to encompass "View" techologies other
-    than just JSP as well as more mature methodologies such as
-    <a href="./howto/action-event-howto.html">Action
-    Event</a> handling. Turbine is consided as Model 2 <strong>+ 1</strong>. :-) Please
-    see the <a href="model2+1.html">discussion</a> of Model 2+1 for more information.
- </p>
-
- <p>
-    This all sounds like a bunch of marketing talk, but in reality,
-    Turbine has been developed by developers for developers. We are not
-    trying to sell you something that does not really work, instead we
-    are trying to solve (or do something about) the problems that our
-    fellow developers keep having over and over again. Come be a part of
-    the revolution!
- </p>
-
- </section>
-
-<section name="Where do I get releases?">
-
-  <p>
-    The Turbine Development Kit (TDK) is a package that bundles a copy
-    of Turbine, Tomcat, jar files, documentation and other utilities in
-    order to help you get started with Turbine as quickly as possible.
-    Everything is pre-configured and ready to go. To get started, simply
-    follow the instructions in the TDK download.
-  </p>
-
-  <p>
-    You can find released versions of
-    Turbine,
-    the <a href="../tdk/index.html">TDK</a>,
-    and <a href="http://db.apache.org/torque/">Torque</a> from
-    <a href="http://db.apache.org/torque/status.html">here</a>.
-  </p>
-
-</section>
-
-<section name="How do I contribute, give feedback, fix bugs and so on?">
-
-<p>
-We really need and appreciate any contributions you can give. This
-includes documentation help, source code and feedback. Discussion
-about changes should come in the form of source code and/or very
-detailed and well thought out constructive feedback. The <a
-href="how-to-help.html">How To Help</a> document has details and hints
-how to get engaged with Turbine Development. We also have a <a
-href="todo.html">To Do</a> document that describes work to do with
-the current Turbine code.
-</p>
-
-<ul>
-    <li>
-        We have a <a href="http://jakarta.apache.org/site/mail.html">Turbine mailing
-        lists</a> for discussion.</li>
-    <li>
-        You can also access the <a href="cvs-usage.html">Turbine CVS 
-        repository</a></li>
-</ul>
-
-</section>
-
- </body>
- </document>
diff --git a/xdocs/j2ee-integration.xml b/xdocs/j2ee-integration.xml
deleted file mode 100644
index a169044..0000000
--- a/xdocs/j2ee-integration.xml
+++ /dev/null
@@ -1,204 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>J2EE Integration</title>
- </properties>
-
-<body>
-
-<section name="J2EE Integration">
-
-<p>
-This document serves to answer a few common questions about integration
-of Turbine with J2EE technologies including Servlets, EJB, Swing, JMS,
-Transactions, JNDI, XML, JDBC, JSP, and Security. The short answer is
-that it is all Java code and you can choose to use Turbine's solutions
-to some things or you can choose to use J2EE solutions to some things.
-Turbine is increasingly flexible about what parts you choose to use and
-what parts you don't. The reason is because there has been quite a lot
-of de coupling of the various Turbine components as a result of years of
-development and use by people all over the world in various different
-ways. Wow, isn't that cool?
-</p>
-
-<subsection name="How does Turbine work with ... ?">
-<table>
-  <tr>
-    <td>Servlets</td>
-    <td>
-<p>
-It is a servlet. It is also a set of re-usable components assembled into
-a framework. You can choose to work with just the Servlet, you can
-choose to work with just the components or you can choose to work with
-both. In a lot of normal development cases, people start off with a
-simple servlet and tack on various components (like Connection Pooling,
-Cron Schedulers, User Management, Services, etc.). That is what we have
-done as well, however we have done it in such a way that it is very
-pluggable. Mix and match and use what you want to use. Ignore the rest.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>EJB</td>
-    <td>
-<p>
-Turbine provides a framework for developing web applications -
-specifically the front end. EJB provides a framework for developing
-n-tier applications - specifically the back ends - thus Turbine and EJB
-complement each other well at that level.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>Swing</td>
-    <td>
-<p>
-Turbine is the for the web - Swing is not - not applicable.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>JMS</td>
-    <td>
-<p>
-Turbine provides facilities for plugging in other Services - and thus
-JMS could be plugged in as a service to that. Even if it isn't plugged
-in through Turbine's Services facilities, you can still put your JMS
-related methods into your code. Turbine doesn't prevent you from calling
-other Java code.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>Transactions</td>
-    <td>
-<p>
-There is nothing in Turbine explicitly using the JTS/JTA - but can use
-EJB and hence these technologies. That belongs in EJB's anyways. :-)
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>JNDI</td>
-    <td>
-<p>
-Turbine provides access to JNDI via a Service facility. You can always
-choose to implement your own facility as well (ie: if you have an
-existing code base that you would like to use, Turbine does not stop you
-from using it).
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>XML</td>
-    <td>
-<p>
-Turbine provides support for using and working with XML. Again, nothing
-preventing you from using XML within Turbine or even sending XML out
-of Turbine.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>JDBC</td>
-    <td>
-<p>
-Turbine provides good support for working with JDBC through the <a
-href="http://share.whichever.com/village/">Village API</a>, the <a
-href="http://jakarta.apache.org/turbine/torque/user-guide.html">
-Torque Object Relational Tool</a> and its connection
-pooling facilities. The connection pool is not yet fully J2EE
-"compatible" in that it does not support DataSources. However, at some
-point we may choose to implement that. Note, again, Turbine does not
-prevent you from using your own Connection pooling mechanism, we simply
-created one because at the time, we needed one and ours works just fine.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>JSP</td>
-    <td>
-<p>
-Turbine provides excellent support for using JSP in its model of working
-- which is based on the Model 2 style with enhancements, such as solving
-the Action portion of the Model. However, we <a
-href="http://jakarta.apache.org/velocity/ymtd/ymtd.html">strongly
-suggest</a> that you do not use JSP and seek out other alternatives.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>Security</td>
-    <td>
-<p>
-Turbine was created long before J2EE was created. Therefore, we needed
-to implement our own Security Model. This model is based on Users,
-Roles, Permissions and Object Groups. It is an Access Control List (ACL)
-based security scheme and can grow to support nearly any level of access
-control people can come up with. It follows our extensible design
-pattern and you can use Turbine's code as the basis for any additional
-security your application requires.
-</p>
-    </td>
-  </tr>
-  <tr>
-    <td>Container Managed Security</td>
-    <td>
-<p>
-You can use container managed security if you wish, and Turbine provides you with
-mechanism for application manged security, in case you need them.
-</p>
-<p>
-The main problem with container managed security is that it cannot be managed
-from the inside of the application. Whenever you want to add/remove users to
-your application (or suite of them) or want to modify user's roles, you need
-to use whatever tool your application server provides for that.
-</p>
-<p>
-Now, this could work just fine for closed-public applications and intranets,
-but would be really unacceptable on open-public sites, where the users need
-the ability to register and receive 'accounts' without human interaction.
-</p>
-<p>
-Currently Turbine supports the latter model - application managed security.
-This is because if it didn't have it, many people would have to write code
-to provide it. That's why we created SecurityService in a cooperative effort.
-</p>
-<p>
-On the other hand, you don't need to write any code to use declarative
-container managed security. You can restrict access to the Turbine
-servlet with the usual web.xml magic. If you wish to use programmatic
-container managed security code, there is relatively very little code to write.
-You need to create your own SecureScreens (probably extending VelocityScreen)
-and SecureActions that contained code that calls the <code>HttpServletRequest
-getUserPrincipal</code> and <code>isUserInRole</code> methods.
-above.
-</p>
-    </td>
-  </tr>
-</table>
-</subsection>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/model2+1.xml b/xdocs/model2+1.xml
deleted file mode 100644
index 653b79a..0000000
--- a/xdocs/model2+1.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Model 2+1</title>
- </properties>
-
-<body>
-
-<section name="What is model 2+1?">
-
-<source test=""><![CDATA[
-   To: turbine@list.working-dogs.com
-   Subject: Re: Is Turbine MVC or HMVC?
-   Date: Wed, 11 Oct 2000 14:04:52 +0200
-   From: Christoph Reck Christoph.Reck@dlr.de
-]]></source>
-
-<p>
-Turbine follows the MVC desing pattern.
-</p>
-<p>
-<ul>
-<li>  Model      - the underlying data sources (via peers or beans)</li>
-<li>  View       - one of the templating engines</li>
-<li>  Controller - Turbine servlet plus your action+screen classes</li>
-</ul>
-</p>
-
-<p>
-Since the view and the controller are tightly coupled in Turbine,
-it is stated to follow the Model2 design pattern, with a + 1
-addition due to way actions are used (hence Model 2 + 1).
-</p>
-
-<p>
-Turbine does not directly support the Hierachical MVC pattern, but
-it cout be used this way by defining multiple module and template
-paths (would impact performance). Note that in the HMVC each MVC
-instance is self-contained and separable from the rest.
-</p>
-
-<p>
-Note that many components within a MVC system follow themselves
-the MVC pattern, therefore most MVC systems are also HMVC systems
-(this also applies to Turbine as a whole, but your application with
-Turbine is normally not HMVC).
-</p>
-
-<p>
-Also note that you could use Turbine in a non MVC manner, but
-normally it leads you to use it as MVC (which JSP does not).
-</p>
-
-<p>
-I hope this clarifies your question,
-Christoph
-</p>
-
-</section>
-
-<section name="Jon's Comments">
-<p>
-That is a GREAT explanation and I'm going to use that for now on...except it
-isn't entirely true. :-)
-</p>
-
-<p>
-The +1 was a joke on my part to see what people would do with it. I figured
-that people were believing this Model 2 hype with JSP and such and I wanted
-to improve on it. I love playing with marketing games. I read that Model 2
-paper and then figured that Turbine was better than what they declared as
-Model 2.
-</p>
-
-<p>
-Calling it Model 3 would have been like saying that Turbine was just a third
-generation of Model 2. So, instead I figured that making it +1 just made it
-appear to be an improved Model 2 model since that is what Turbine really is.
-:-)
-</p>
-
-<p>
-Oh yea...one more reason for the +1...
-</p>
-
-<p>
-It is the Apache <a href="http://jakarta.apache.org/guidelines/decisions.html">voting style</a>. :-)
-</p>
-
-<p>
-Turbine is Model 2 .......... +1 ! :-)
-</p>
-
-<p>-jon stevens</p>
-</section>
-
-<section name="Resources">
-<p>
-<a href="http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html">
-Understanding JavaServer Pages Model 2 architecture</a>
-</p>
-
-</section>
-</body>
-</document>
diff --git a/xdocs/navigation.xml b/xdocs/navigation.xml
deleted file mode 100644
index 7ec0734..0000000
--- a/xdocs/navigation.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- -->
-
-<project name="Turbine"
-        href="http://jakarta.apache.org/turbine/">
-
-  <title>Turbine</title>
-
-  <body>
-    <links>
-      <item name="Turbine Home"		       href="http://jakarta.apache.org/turbine/"/>
-      <item name="Fulcrum"                 href="http://jakarta.apache.org/turbine/fulcrum/"/>
-    </links>
-
-    <menu name="General Information">
-      <item name="Overview"              href="/index.html"/>
-      <item name="Features"              href="/features.html"/>
-      <item name="Specification"         href="/fsd.html"/>
-      <item name="Getting Started"       href="/getting-started.html"/>
-      <item name="Howto Build Turbine"   href="/how-to-build.html"/>
-      <item name="Changes"               href="/changes-report.html"/>
-    </menu>
-    <menu name="Extensions">
-      <item name="Maven Plugin"            href="/maven-turbine-plugin/index.html"/>
-      <item name="Torque Impl of Services" href="/turbine-torque-impl/index.html"/>  
-      <item name="Related Projects" href="/related-projects.html"/>    
-    </menu>
-    <menu name="Documentation">
-      <item name="Changes"               href="/changes-report.html"/>
-      <item name="Core DB Schema"        href="/turbine-schema.html"/>
-      <item name="Services"              href="/services/index.html" collapse="true">
-        <item name="Assembler Broker Service" href="/services/assemblerbroker-service.html"/>
-        <item name="Avalon Component Service" href="/services/avalon-component-service.html"/>
-        <item name="Crypto Service"      href="/services/crypto-service.html"/>
-        <item name="Cache Service"       href="/services/cache-service.html"/>
-        <item name="Component Service"   href="/services/component-service.html"/>
-        <item name="Factory Service"     href="/services/factory-service.html"/>
-        <item name="Intake Service"      href="/services/intake-service.html"/>
-        <item name="JSP Service"         href="/services/jsp-service.html"/>
-        <item name="Localization Service" href="/services/localization-service.html"/>
-        <item name="Logging Service"     href="/services/logging-service.html"/>
-        <item name="MimeType Service"    href="/services/mimetype-service.html"/>
-        <item name="Naming Service"      href="/services/naming-service.html"/>
-        <item name="Pool Service"        href="/services/pool-service.html"/>
-        <item name="Pull Service"        href="/services/pull-service.html"/>
-        <item name="Resources Service"   href="/services/resources-service.html"/>
-        <item name="RunData Service"     href="/services/rundata-service.html"/>
-        <item name="Scheduler Service"   href="/services/scheduler-service.html"/>
-        <item name="Security Service"    href="/services/security-service.html"/>
-        <item name="Servlet Service"     href="/services/servlet-service.html"/>
-        <item name="Session Service"     href="/services/session-service.html"/>
-        <item name="Template Service"    href="/services/template-service.html"/>
-        <item name="Torque Security Service" href="/services/torque-security-service.html"/>
-        <item name="Torque Security Service Schema" href="/services/torque-security-schema.html"/>
-        <item name="Unique ID Service"   href="/services/uniqueid-service.html"/>
-        <item name="Upload Service"      href="/services/upload-service.html"/>
-        <item name="Velocity Service"    href="/services/velocity-service.html"/>
-        <item name="XML-RPC Service"     href="/services/xmlrpc-service.html"/>
-        <item name="XSLT Service"        href="/services/xslt-service.html"/>
-      </item>
-      <item name="Howtos"                href="/howto/index.html" collapse="true">
-        <item name="Action Events Howto" href="/howto/action-event-howto.html"/>
-        <item name="Configuration Howto"   href="/howto/configuration-howto.html"/>
-        <item name="Extend User Howto"   href="/howto/extend-user-howto.html"/>
-        <item name="Hibernate OM Howto"  href="/howto/hibernate-howto.html"/>
-        <item name="Intake Howto"        href="/howto/intake-howto.html"/>
-        <item name="JBoss Howto"         href="/howto/jboss-howto.html"/>
-        <item name="JSP Howto"           href="/howto/jsp-howto.html"/>
-        <item name="Migrating 2.1 to 2.2" href="/howto/migrate-from-2_1-howto.html"/>
-        <item name="Migrating 2.2 to 2.3" href="/howto/migrate-from-2_2-howto.html"/>
-        <item name="Pull Model Howto"    href="/howto/pullmodel-howto.html"/>
-        <item name="Python Howto"        href="/howto/python-howto.html"/>
-        <item name="Security Howto"      href="/howto/security-howto.html"/>
-        <item name="Services Howto"      href="/howto/services-howto.html"/>
-        <item name="URL rewriting Howto" href="/howto/url-rewriting-howto.html"/>
-        <item name="Velocity Context Howto" href="/howto/context-howto.html"/>
-        <item name="Velocity Site Howto" href="/howto/velocity-site-howto.html"/>
-        <item name="VelocityOnlyLayout Howto" href="/howto/velocityonlylayout-howto.html"/>
-        <item name="Wiki Howtos" href="http://nagoya.apache.org/wiki/apachewiki.cgi?search=CategoryJakartaTurbine2HowTo"/>
-      </item>
-      <item name="JavaDocs"		 href="/apidocs/index.html"/>
-    </menu>
-
-    <menu name="Development">
-      <item name="Proposals"             href="/proposals.html"/>
-      <item name="How To Help"           href="/how-to-help.html"/>
-      <item name="Todo"                  href="/todo.html"/>
-    </menu>
-
-  </body>
-</project>
diff --git a/xdocs/project-map.xml b/xdocs/project-map.xml
deleted file mode 100644
index f1c8016..0000000
--- a/xdocs/project-map.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-    <properties>
-        <title>Project Map</title>
-    </properties>
-
-    <body>
-    
-    <section name="Project Map">
-    
-    <p> On this page, you can find a functional breakdown of Turbine codebase.
-    This should help you in getting familiar with the tools that Turbine offers
-    to you. Also, it will help you locate people that are experts in the field  
-    of a specific functional block, so you can contac them if you encouter 
-    a problem, or better yet have made a patch that fixes it. </p>
-
-    <p><a href="project-map/core.html"><b>Turbine Core</b></a></p>
-
-    <p> In the Core part of Turbine you will find the Turbine Servlet, the
-    single entry point to your application, and the classes that form the
-    framework of HTTP-interfaced application following MVC desing pattern.
-    Here you will find the base classes you will have to extend to fill
-    in the framework with your application's logic. See the 
-    <a href="fsd.html">specification</a> for more details. </p>
-
-    <p><a href="project-map/essential.html"><b>Essential Services</b></a></p>
-
-    <p> This block contains the <a href="services.html">Service Framework</a>
-    that forms the basis of  Turbine infrastructure. It allows defining 
-    utility classes with pluggable implementation (that means that you 
-    can customize and  override the utility classes provided by Turbine 
-    easily) that can take part in the startup and shutdown sequence of the 
-    application. </p>
-
-    <p><a href="project-map/content-generation.html"><b>Content generation services</b></a></p>
-
-    <p> This block groups together various services that aid you in the process
-    of creating the user interface of your application. Most important,
-    you will find here services that provide <i>templating</i> functionality,
-    that allows you to create the HTML/XML/WML presentation layer of your
-    application independently form your Java sources. The services provided
-    are actually wrappers around templating packages developed independently
-    from Turbine, such as <a href="http://jakarta.apache.org/velocity">Velocity</a>.
-    Also, there is a service that allows you to use Sun's JSP technology for
-    creating templates. Other services that fall into this block are 
-    the Pull service, allowing you to create tool boxes (read more about 
-    <a href="pullmodel.html">Pull model</a>), Localization service, that allows
-    you to crate bundles of messages that your application displays translated
-    into different languages, that can be easily manipulated, and the 
-    Upload service, that handles uploading files from HTML forms. </p>
-
-    <p><a href="project-map/database.html"><b>Database access</b></a></p>
-
-    <p> Database tools in Turbine include connection pooling service, which
-    can transparently delegate to J2EE application server's pooling facilities,
-    of provide connection pooling in lightweight, servlet container only 
-    environment. An important element you will find in this block is 
-    <a href="peers.html">Peers</a> framework, that is one of the corner stones 
-    of Turbine framework along with Services and Modules. Peers allow you to 
-    create relationship between tables in a relational database and classes in 
-    your application. It also allows to create queries in an Object-oriented way. </p>
-
-    <p><a href="project-map/object-services.html"><b>Object services</b></a></p>
-
-    <p> One of the greatest advantages of working in Java Servlets environment,
-    is the statefullness of your application. You can create object and hold
-    them in memory, to avoid repeated loading information form external
-    sources, like disk files or the database. Turbine provides a few
-    Services that will help you with management of these objects. One of them
-    is Pool service that allows you to create pools of reusable object that
-    may be acquired from the pool by a thread processing a request, and
-    recycled when no longer needed. Cache service will help you with
-    managing objects that contain information that can be reused multiple
-    times. </p>
-
-    <p><a href="project-map/auxilary-services.html"><b>Auxilary Services</b></a></p>
-
-    <p> In this section you will find other services that might be useful
-    in the building your application. For example 
-    <a href="http://www.xmlrpc.com">XMLRPC</a> service that allows 
-    communication between applications within a heterogenous environment
-    using XML-based protocol over HTTP. There are also services allowing 
-    manipulation of XML content using XSLT, and a service that manages 
-    creating contexts for performing JNDI operations. </p>
-
-    <p><a href="project-map/email.html"><b>E-mail messages</b></a></p>
-
-    <p> Turbine can help you with creating and sending e-mail. Also
-    with the help of templates, just as those you use for displaying
-    HTML pages. </p>
-
-    <p><a href="project-map/utility.html"><b>Utility classes</b></a></p>
-
-    <p> This block encompasses the various utility classes contained in
-    Turbine. You should check those classes, as they solve some common
-    problems encountered in web application making. </p>
-
-    <p><a href="project-map/tools.html"><b>Turbine tools</b></a></p>
-
-    <p> In this block, you will find tools that ship together with Turbine.
-    These tools are runnable from the command line, and are used for the
-    development purposes, not during the normal operation of an application.
-    
-    The tools include <a href="howto/torque-howto.html">Torque</a>, the tool for
-    generating Peer Framework classes for your application, 
-    <a href="services/intake-service.html">Intake</a> that generates classes for automation
-    of processing of complex HTML forms. <!--, and the <a href="migrator.html">
-    Migrator</a>, the tool that helps you with bringing your application
-    up to date with newer releases of Turbine, by performing batches
-    of search-and-replace operations on your sources. When used properly,
-    it can save you a plenty of typing.--> </p>
-    
-    </section>
-
-    <section name="Updating project map">
-    
-    <p> This section is meant for Turbine developers. </p>
-    
-    <p> Whenever you want to work on bringing the project map up to date, you 
-    should run the <code>update-classlist.sh</code> script contained in the 
-    <code>xdocs/project-map</code> directory. It will bring the <code>classlist</code> 
-    file, also in  that directory in sync with the Turbine source files. 
-    It will also create a  cvs diff of the <code>classlist</code> file and save the 
-    result into <code>changes</code> file. Open it and see the changes in the 
-    codebase between the last time the project map was updated, and the present. 
-    When you commit the modified xdocs, don't  forget to commit <code>classlist</code> 
-    file as well! </p>
-
-    </section>
-
-    </body>
-
-</document>
diff --git a/xdocs/proposals.xml b/xdocs/proposals.xml
deleted file mode 100644
index 774238f..0000000
--- a/xdocs/proposals.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services</title>
- </properties>
-
-<body>
-
-<section name="Proposals">
-
-<p>
-These are the proposals that are up on the table:
-</p>
-
-<ul>
-<li><a href="proposals/application-service.html">Application Service</a></li>
-<li><a href="proposals/browser-bound-app-context.html">Browser Bound Application Context</a></li>
-<li><a href="proposals/i18n.html">i18n</a></li>
-<li><a href="proposals/naming-service.html">Naming Service</a></li>
-<li><a href="proposals/pp.html">PP and Related Classes</a></li>
-<li><a href="proposals/reusable-components.html">Reusable Components</a></li>
-<li><a href="proposals/security-service.html">Security Service</a></li>
-<li><a href="proposals/services-repository.html">Services Repository</a></li>
-<li><a href="proposals/xslt-service.html">XSLT Service</a></li>
-<li><a href="proposals/unified-templating.html">Unified Templating Service</a></li>
-</ul>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/application-service.xml b/xdocs/proposals/application-service.xml
deleted file mode 100644
index 0293607..0000000
--- a/xdocs/proposals/application-service.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Description">
-  <p>
-    The application services would allow fully functional Turbine applications
-    to be packaged up in the form of JAR files and deployed during Turbine
-    startup.
-  </p>
-</section>
-
-<section name="Rationale">
-<p>
-</p>
-</section>
-
-<section name="Requirements">
-<ul>
-  <li>
-    Turbine would probably process a directory of JAR files
-    that contain sub-applications. The manifest would contain
-    a set of instructions to be used by the application service
-    so that the sub-application would be processed correctly
-    and usable by Turbine. This may be the module.packages
-    to add, or template paths to add, or whatever else is
-    needed to bootstrap the sub-application.
-  </li>
-
-  <li>
-    Module packages have to be dynamically configurable.
-    The assembler broker must accept additional packages
-    to look in for modules after the system has started.
-  </li>
-  
-  <li>
-    Must be able to load templates from JAR files. Velocity
-    can do this, and it can probably be done for the other
-    template services as well.
-  </li>
-
-  <li>
-    Configuration information must be able to enter a
-    running Turbine application. A sub application might
-    have many forms of configuration info. It might be properties
-    that have to be accessible via TurbineResources. Or
-    it might configuration information to be used by one
-    of the services, say for example an intake XML descriptor
-    for the input forms used in the sub-application.
-    <p/>
-    The services in general might need some work to allow
-    dynamic configuration so that sub-applications can
-    really work properly.
-  </li>
-  
-  <li>
-    Sub-applications may require certain operations to be
-    executed in order to run. This might be a forum application
-    that has an SQL schema that needs to be inserted in order
-    to function. These stops could either be performed by Ant,
-    or scripts that could be executed by the proposed BSF
-    (Bean Scripting Framework) service.
-  </li>
-
-  <li>
-    Sub-applications will require a unique id to to keep things
-    like templates in their own namespace. Eventually there
-    may also be other entities that need to be kept separate.
-    We could probably start a catalog of sub-applications to
-    make sure that people don't use a unique id already being
-    used by another sub-application in existence.
-  </li>
-
-  <li>
-    Extension do DynamicURI and derivates to support new parameter
-    (sub-application selector)
-  </li>
-</ul>
-</section>
-
-
-<section name="Scope">
-<p>
-</p>
-</section>
-
-<section name="Initial Source">
-<p>
-</p>
-</section>
-
-<section name="Initial Committers">
-<p>
-</p>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/browser-bound-app-context.xml b/xdocs/proposals/browser-bound-app-context.xml
deleted file mode 100644
index 6981cad..0000000
--- a/xdocs/proposals/browser-bound-app-context.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Browser window bound application context">
-
-<p><b>The problem: multiple windows</b></p>
-<p>
-Suppose that you write an application that will have the ability to open 
-multiple windows at once. These windows will contain views for different 
-application modules. Sometimes, different windows will show the same module, 
-but the data or it's presentation form will be different. It is obvious that 
-each of the windows has an amount of state information associated with it. The 
-HTTP protocol is by design stateless. Because statefullness is necessary for a 
-multitude of applications, cookies mechanism was introduced. Usually, the 
-cookies passed between the server and browser carry only an identifier of the 
-session. The actual data is kept in the servers memory (or other storage device) 
-Unfortunately cookies are not appropriate for managing state information 
-associated with a single window. The primary way of overcoming this limitation 
-is encoding information about the subset of data to be displayed and the 
-presentation details (like sorting order) into the request URLs. This technique 
-allows the user to maintain multiple simultaneous sessions with the same screen 
-of the application in different browser windows, viewing different data sets or 
-using different presentation settings. This technique might be unacceptable in 
-two situations:
-</p>
-<ul>
-<li>the presentation settings should not be visible in the URL so that the user 
-can not tamper with them. </li>
-<li> the amount of state information is large and/or the generated page contains 
-large number of links. This would lead to generating large amounts of markup, 
-decreasing application responsiveness and consuming resources.</li>
-</ul>
-
-<p><b>The solution: server side window context</b></p>
-<p>
-A technique similar to that applied to global session data. Window specific 
-information can be stored on the server, and an token allowing to uniquely 
-identify this information can be added to all URLs generated on the page. 
-This way on the next request originating from a given browser window, the 
-application has access to the state information associated with this window.
-</p>
-
-<p><b>The problem: "Open in new window"</b></p>
-<p>
-If opening of windows in a multi-windowed application is utterly under control 
-of the application (the window is created using JavaScript, with context 
-identifier token removed from the URL, to inform the application that it needs 
-to create a new context) window contexts will work fine. In reality users will 
-often create new windows using "open in new window" command, or by dragging 
-URLs between windows. In each of the situations mentioned above, multiple 
-windows displaying the same URL (and thus, by definition the same collection 
-of cookies will appear. These windows are indistinguishable to the application, 
-but it is undesirable that these windows share the window context. That would 
-mean that changes to the state information performed in one window would affect 
-all future requests to the other windows in the group.
-</p>
-
-<p><b>The solution: session context tree</b></p>
-<p>
-To effectively detect opening of windows, the token identifying a session 
-context must be different for every request. Please recall the example of a few
-windows opened "open in new window" command. All of them share the URL, and the 
-context identifying token contained in it. This means that they can access the 
-state information that was valid during the previous request. The data subset 
-displayed and the presentation settings used in all of the windows is the same. 
-But because there are multiple windows now, the session context must split. New 
-contexts must be created, inheriting the contents of the parent (previous) 
-context, an tokens identifying these newly generated context must be included 
-in all URLs generated on the associated pages.
-</p>
-
-
-<p><b>The problem: the "back" button</b></p>
-<p>
-While reading the previous paragraph, you may have an impression that it is 
-possible to perform educated guesses about context branching points and store 
-only as many contexts as there are windows simultaneously open. But when you 
-consider the situation when user uses "back" and "forward" buttons to navigate 
-the application, you'll find out that ALL of the contexts must be remembered 
-by the server. The state information associated with each request may be used 
-multiple times in the future. An LRU garbage collection scheme could be 
-performed on the context objects (only a fixed number of most recently accessed
-context would be remembered) to conserve server's memory. Unfortunately, this 
-could easily lead to undesirable application operation. Imagine an application 
-with two windows open.  An user performs an operation in the window A, then 
-switches to window B an performs so many operations in it that the context of 
-the window A is discarded. Then, performing an operation in the window A may 
-yield unexpected results because the state information was lost.
-</p>
-
-<p><b>Explicit vs Implicit cloning.</b></p>
-
-<p>
-All of the the session contexts have to be replicated per every hit to the
-application. Memory consumption seems like an important factor to consider
-here. I had an idea of reducing it a bit, by requiring the programmer to 
-explicitly copy the data from the previous context to the current context
-that are important. This is makes using session contexts tedious, but 
-avoids cloning unused data over and over, when the user moves from one
-screen to another (which will obviously need different state information).
-This has the following downside - when the user uses a link to go back
-to a screen that he visited earlier, the state information will be lost,
-because the other screen didn't clone it (because it had no idea about them). 
-The presentation details will be reset to normal. On the other hand, if 
-the user pressed the "back" button multiple times to go back to that screen, 
-the presentation details would be remembered (the URLs contain valid
-context identifier tokens). The conclusion is, that cloning all of the 
-stuff contained in the context gives a better user experience. Memory is
-cheap these days, right? Oh, don't worry that those context have to stay
-in memory forever. They should be bound to a global (cookie style) session
-and discarded when the global session times out.
-</p>
-
-<p><b>A sketch of implementation</b></p>
-
-<p>
-<ul>
-    <li>
-        SessionContext interface similar to that of ServletSession
-    </li>
-    <li>
-        getGlobalContext() and getLocalContext() methods in RunData
-    </li> 
-    <li>
-        a wrapper object containing a global context and multiple
-        local context keyed by id, to be stored in the HTTP session 
-    </li>
-    <li>
-        context id tokens automatically picked up (after ParameterParser 
-        runs) and the context extracted/cloned/created as needed using
-        the wrapper object from the session, and appropriate contexts
-        made available through RunData
-    </li>
-    <li>
-        context id added to the url by the DynamicURI et al
-    </li>
-</ul>
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/i18n.xml b/xdocs/proposals/i18n.xml
deleted file mode 100644
index 91e1291..0000000
--- a/xdocs/proposals/i18n.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="i18n">
-<ul>
-  <li>
-    Messages that turbine outputs should live in a resource bundles, not
-    in in TR.props
-  </li>
-  <li>
-    Template lookups depending on locale (Is Ilkka working on that?) 
-  </li>
-</ul>
-
-</section>
-
-
-</body>
-</document>
diff --git a/xdocs/proposals/naming-service.xml b/xdocs/proposals/naming-service.xml
deleted file mode 100644
index 0024c83..0000000
--- a/xdocs/proposals/naming-service.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Naming service">
-<ul>
-  <li>
-    this service is rater outdated, it needs some cleanup, and adding
-    suppport for DirContexts (low priority, might be useful in  
-    creating LDAP User Manager / Security Service implementations)
-  </li>
-</ul>
-
-</section>
-
-
-</body>
-</document>
diff --git a/xdocs/proposals/pp.xml b/xdocs/proposals/pp.xml
deleted file mode 100644
index ff4420a..0000000
--- a/xdocs/proposals/pp.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Parameter parser and its ilk">
-
-<ul>
-  <li>
-    clean up and orthogonalize APIs (add vs append vs set)
-  </li>
-
-  <li>
-    what the heck is uploadData? I think UploadService/FileItems do the
-    trick just fine
-  </li>
-
-  <li>
-    BaseValueParser should not extend RecyclableSupport. If I understand
-    the pattern correctly, it should include an instance of
-    RecyclableSupport and delegate Recyclable interface method to it. 
-    The same goes for TurbineDefaultRunData. To prevent people from doing 
-    that RecyclableSupport should not implement Recyclable itself. AFAIK, this 
-    kind of apprach is used to emulate multiple inheritance in Java. 
-    I'd appreciate a comment on this issue from Ilkka.
-  </li>
-</ul>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/resources-service.xml b/xdocs/proposals/resources-service.xml
deleted file mode 100644
index 8ca6d18..0000000
--- a/xdocs/proposals/resources-service.xml
+++ /dev/null
@@ -1,54 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Resource Service">
-
-<p>
-  <li>
-    clean up property names so that dot is used as namespace separator,
-    not as a space character replacement examples:
-    <br/>
-    services.GlobalCacheService.cache.check.frequecy should be:
-    <br/>
-    services.GlobalCacheService.cachCheckFrequency
-    <br/>
-    services.PullService.tools.per.request.refresh should be:
-    <br/>
-    services.PullService.toolsPerRequestRefresh
-    <p/>
-
-    if we do the above, it would be easy to map the dot separated property
-    names onto a DOM tree or a JNDI namespace. These two alternative
-    ResourceService implementation would be a nice addition to Turbine.
-  </li>
-</p>
-
-</section>
-
-
-</body>
-</document>
diff --git a/xdocs/proposals/reusable-components.xml b/xdocs/proposals/reusable-components.xml
deleted file mode 100644
index 75d97ce..0000000
--- a/xdocs/proposals/reusable-components.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Reusable Components">
-
-<ul>
-  <li>
-    facilities for presenation of tabular data, with the ability
-    to do paging, filtering and sorting
-  </li>
-
-  <li>
-    date selection component (skinnable calendar with year/month/week 
-    views in a popup window, includes some JS)
-  </li>
-</ul>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/security-service.xml b/xdocs/proposals/security-service.xml
deleted file mode 100644
index 8321676..0000000
--- a/xdocs/proposals/security-service.xml
+++ /dev/null
@@ -1,167 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Security Service">
-
-<ul>
-  <li>
-    UserManager should become a service in it's own right.
-  </li>
-
-  <li>
-    ACL mechanism should become pluggable. A new interface ACLBuilder must
-    be defined, the interface would have single method of 'Object
-    buildACL(User)' signature. UserManagerService would have a property that 
-    would contain *service name* that implements ACLBuilder. buildACL will be an
-    instance not class method, so a concrete instance of the service must be
-    consulted.
-  </li>
-
-  <li>
-    User object will have method of 'Object getACL()' signature that will
-    delegate to UserManagerService, which in turn delegates to the
-    configured ACLBuilder. It's OK to cache the returned object, since 
-    the ACLBuilder will keep references ACL objects internally, to reflect 
-    the changes of sercurity information at runtime. (rafal)
-  </li>
-
-  <li>
-    TurbineSecurityService will be the default ACLBuilder shipped with the
-    system.
-  </li>
-
-  <li>
-    TurbineSecurityService should have it's OM/Peer classes Torque
-    generated.
-  </li>
-
-  <li>
-    Group should be could be renamed to 'Realm' or 'Domain'. This should 
-    decrease the confusion about it's meaning.
-  </li>
-
-  <li>
-    Attributes of Roles/Groups/Permissions will be dropped. I don't think
-    the idea catched on.
-  </li>
-
-  <li>
-    User attributes should be moved into a separate table, or even two
-    tables if we want to store meta information for user attributes.
-    This will require a customized Peer class for User objects, but 
-    this will be easy with recent Torque's two-level class generation
-  </li>
-
-  <li>
-    On session unbind event, only acces counters/timestamps should be
-    updated not the whole data. This should fix the overriding of
-    admin's changes by the unbound session problems. The information 
-    which attributes should be updated could be placed in user attribute
-    meta-information table.
-  </li>
-
-  <li>
-    All references to peers have to be removed from the interfaces.
-    Anything peer specific must be pushed down into DBSecurityService.
-  </li>
-  
-  <li>
-    Allow multiple security service implementations to be run in
-    tandem. This would allow a portion of a site to be controlled
-    by an LDAP security service and another portion to be controlled
-    by DB security services. More info about this is explained in
-    the Policy Service proposal.
-  </li>
-  
-  <li>
-    All the security code has to be grouped together. Right now it's
-    all over the place and rather confusing. The util code should be
-    moved into the security services package, and the om/peer code
-    for the DBSecurityService should be move into the package with
-    the rest of the DBSecurityService code. Here's what I would
-    propose for the new layout. This would require the deprecation
-    of the location of a lot of the classes but I think it would
-    help a lot with the ease of understanding.
-  </li>
-</ul>
-
-<source test=""><![CDATA[
-.
-|-- BaseSecurityService.java
-|-- SecurityService.java
-|-- TurbineSecurity.java
-|-- UserManager.java
-|-- entity
-|   |-- Group.java
-|   |-- Permission.java
-|   |-- Role.java
-|   |-- SecurityEntity.java
-|   `-- User.java
-|-- impl
-|   |-- db
-|   |   |-- DBSecurityService.java
-|   |   |-- DBUserManager.java
-|   |   `-- entity
-|   |       |-- GroupPeer.java
-|   |       |-- PermissionPeer.java
-|   |       |-- RolePeer.java
-|   |       |-- RolePermissionPeer.java
-|   |       |-- SecurityObject.java
-|   |       |-- TurbineGroup.java
-|   |       |-- TurbinePermission.java
-|   |       |-- TurbineRole.java
-|   |       |-- TurbineUser.java
-|   |       |-- TurbineUserPeer.java
-|   |       |-- UserGroupRolePeer.java
-|   |       `-- UserPeer.java
-|   |-- ldap
-|   |   |-- LDAPSecurityConstants.java
-|   |   |-- LDAPSecurityService.java
-|   |   |-- LDAPUser.java
-|   |   |-- LDAPUserManager.java
-|   |   `-- util
-|   |       `-- ParseExceptionMessage.java
-|   `-- passive
-|       `-- PassiveUserManager.java
-`-- util
-    |-- AccessControlException.java
-    |-- AccessControlList.java
-    |-- DataBackendException.java
-    |-- EntityExistsException.java
-    |-- GroupSet.java
-    |-- PasswordMismatchException.java
-    |-- PermissionSet.java
-    |-- RoleSet.java
-    |-- TurbineSecurityException.java
-    `-- UnknownEntityException.java
-
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/services-framework.xml b/xdocs/proposals/services-framework.xml
deleted file mode 100644
index a1d0702..0000000
--- a/xdocs/proposals/services-framework.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Service framework">
-
-<p>
-  <li>
-    Simplify initialization sequence - no more init(Object), just start(),
-    init(), shutdown()
-  </li>
-
-  <li>
-    system property repository in the broker, for the services that
-    *really* need to use ServletConfig or RunData
-  </li>
-
-  <li>
-    getRealPath/getResourceAsStream for the use in the services in the
-    broker
-  </li>
-
-  <li>
-    initialization of the broker needs to be refactored - logic for that
-    should moved from TurbineServices into BaseServiceBroker
-  </li>
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/services-repository.xml b/xdocs/proposals/services-repository.xml
deleted file mode 100644
index 441f8fd..0000000
--- a/xdocs/proposals/services-repository.xml
+++ /dev/null
@@ -1,126 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Services Repository Proposal</title>
-  </properties>
-
-<body>
-
-<section name="Description">
-
-  <p>
-    The services repository would be a place to store non-core/third party
-    Turbine services that could be utilized by anyone developing with the 
-    Turbine services framework. There are services that are stored in
-    the main Turbine CVS that would be good candidates for the services
-    repository: castor, xmlrpc, xslt, webmacro, freemarker, naming.
-    These are services that Turbine can function without. Many Turbine
-    developers have probably created services but have never offered them
-    to the group because they are somewhat specialized: these services would
-    be ideal in the repository because they would have a description and
-    might be a great starting place for another developer. Or even better,
-    a contributed service might be exactly what another developer needs.
-  </p>
-  
-  <p>
-    There are also services in other OSS Turbine-based applications that
-    would be good candidates for the services repository. Tambora has
-    a rule service and processing service that could be useful for other
-    Turbine-based B2B solutions, and the URL management and disk caching
-    services in Jetspeed are also general purpose services that would be
-    very useful to a wide audience of developers.
-  </p>
-
-</section>
-
-<section name="Rationale">
-
-  <p>
-    It would be nice to try and slim down the primary Turbine CVS.
-    There are many services currently in that are not core services. These
-    non-core services could easily be stored somewhere else and make the
-    primary Turbine CVS easier to navigate and become familiar with.
-  </p>
-
-  <p>
-    It would be highly desirable to build up an extensive library
-    of services. All of these services can't be kept in the primary
-    Turbine CVS and so I imagine there are quite a few services out there
-    that have not been contributed due to there specialized nature.
-    Specialized services are ideal for the repository, if the services
-    are kept in a central location and cataloged all parties involved
-    will benefit.
-  </p>
-
-</section>
-
-<section name="Requirements">
-  <p>
-    Services would have to be functional from JAR files. For this to work
-    the following changes would have to be made:
-  </p>
-  <ul>
-    <li>
-      The Services framework would have to be altered to load services
-      packaged in the form of JAR files.
-    </li>
-
-    <li>
-      Dependent services would have to be listed in the manifest so that the 
-      the initialization of a service could be deferred until all
-      prerequisites of the service have been initialized.
-    </li>
-
-    <li>
-      The service package in a JAR should state all of its configuration
-      options as it may be necessary to have this configuration information
-      extracted from the JAR and added to TR.props or whatever future
-      configuration mechanisms we devise. It might be nice to have an
-      option in Turbine where there is no TR.props to begin with but
-      starting Turbine with a certain option would produce a configuration
-      that reflected the use of a set of services. Or Turbine would start,
-      but would require some configuration from via a little web application
-      before Turbine would accept connections from the outside world.
-    </li>
-  </ul>
-</section>
-
-<section name="Scope">
-
-  <p>
-    This would primarily affect the services framework, but the tools
-    required to pull information from JARS and load the JARS could probably
-    be used for loading/configuration sub-applications. We can probably
-    borrow a lot of this code from Avalon as I think this is pretty
-    much worked out in its service framework.
-  </p>
-
-</section>
-
-<section name="Initial Source">
-</section>
-
-<section name="Initial Committers">
-</section>
-
-</body>
-</document>
diff --git a/xdocs/proposals/unified-templating.xml b/xdocs/proposals/unified-templating.xml
deleted file mode 100644
index db3998f..0000000
--- a/xdocs/proposals/unified-templating.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-    <properties>
-        <title>Unified Templating Service Proposal</title>
-    </properties>
-
-    <body>
-
-<section name="Unified Templating Service">
-
-<p>
-There are multiple templating services that provide similar functionality, but 
-have different API. This is due to different types of  "Context" objects. All 
-these types main"Map" semantics (question: is there any other important 
-functionality in the Contexts?). We could define a single service interface 
-that all of the templating services (WebMacro, Velocity, FreeMarker and JSP at 
-the moment) would implement. Its methods would use Map type to represent a 
-Context or another interface extending or similar to map. The service would 
-include the following methods:
-</p>
-
-<pre>
-public interface TemplatingService 
-    extends Service
-{
-    public boolean templateExists( String name );
-    public Map createContext( RunData data );
-    public Map createContext( );
-    public Strinq merqeTemplate( String name, Map context );
-}
-</pre>
-
-<p>
-Definition of this common interface would allow creation of new base Modules 
-(Screen, Navigation, Layout and Page) that would take advantage of the 
-templating abstraction provided by the Service. This would make the modules 
-(esp. Screens) contained in the application independent of the particular 
-templating mechanism. 
-</p>
-
-<p>
-I don't know enough about FreeMarker to tell if it can fit into this model. 
-If not, I would even suggest dropping the support for it, as it's user base 
-seems nonexistent.
-</p>
-
-<p>
-There is one important special case to consider. JSP service is unable to return
-the results of template merging as a String - they are written to the Response 
-stream directly. To encompass this case in our framework, we could declare that 
-the return value of merge template in this case is a null. The Modules would be 
-subject to the same semantics: a null returned from build() method would mean that 
-data was written to the response directly, and the caller should act accordingly. 
-(an example of such case is the interaction of the Layout and the RawScreen).
-</p>
-
-<p>
-The special semantics of JSP templating lead in turn to a special Page and Layout 
-module behavior. While the "normal" Layout module executes the Screen module 
-and merges its template before merging it's own template ("prefix" rendering), 
-the JSP Layout needs to wrap Screen rendering in a context tool so that it is 
-executed in the appropriate place in the Layout's markup. ("infix" rendering). 
-The same patterns apply to Page-Layout interaction. We have the option to define
-JSPPage and JSPLayout Modules, or define InfixPage, InfixLayout and the 
-LayoutRenderer and ScreenRenderer context tools, that will be used with those 
-templating services that write the merging results directly to the Response 
-stream. Note that during the normal Layout processing, the Navigations are 
-subject to "infix" rendering, and the current TemplateNavigation class is a 
-prototype of *Renderer.
-</p>
-
-<p>
-The unified interface and the Infix* Modules will make adding support for other
-templating engines easy. This will also make porting applications easier - 
-templates in one templating language can be created, then supporting Turbine 
-modules are created. Later the templates can be converted to another language, 
-and the only change to support that on the code side of things is switching a 
-property in TR.props
-</p>
-
-<p>
-The template lookup functionality that is currently contained in 
-TemplateService, probably should be contained in the service I'm describing here,
-probably in an abstract base class.
-</p>
-
-<p>
-Another class that would be affected by the changes mentioned here is the 
-TempateInfo class. Right now it uses a HashTable to store it's data.
-Now, thanks to defining the common Context type (or using the Map type 
-in its place), it's possible to turn the runtime typed HashTable entries into
-compile time typed instance variables.
-</p>
-
-<p>
-The amount of work needed to port an existing application should not be very large. 
-The applications following the Pull MVC design model would not be affected at all. 
-The traditional Push applications would require changes in the Screen and Navigation 
-classes regarding the names of the Context type and the parent type of the 
-Screen/Navigation in question. These changes can be effectively introduced using an 
-automated tool.
-</p>
-
-<p>
-The Page and Layout classes would require more in-depth modifications, but a typical 
-application would contain single customized Page and Layout classes, if any.
-</p>
-
-</section>
-</body>
-
-</document>
diff --git a/xdocs/proposals/xslt-service.xml b/xdocs/proposals/xslt-service.xml
deleted file mode 100644
index 2b424ad..0000000
--- a/xdocs/proposals/xslt-service.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Application Service Proposal</title>
-  </properties>
-
-<body>
-
-<section name="XSLT Service">
-
-<ul>
-  <li>
-    support for processing of DOM trees present in memory could be 
-    useful (right now both data and stylesheet are read from disk
-    files)
-  </li>
-</ul>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/pullmodel.xml b/xdocs/pullmodel.xml
deleted file mode 100644
index 9ab9469..0000000
--- a/xdocs/pullmodel.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Pull vs. Push</title>
- </properties>
-
- <body>
-
-<section name="Pull vs. Push">
-
-<p>By: <a href="mailto:jon@latchkey.com">Jon S. Stevens</a>
-<br/>
-$Date$
-</p>
-
-<p>
-This document is to explain a different type of philosophy for working with
-Context based MVC tools like WebMacro (WM) and <a
-href="http://jakarta.apache.org/velocity/">Velocity</a> (V) than I think that
-the Turbine community is used to. The requirement for this philosophy has come
-up recently during <a href="http://scarab.tigris.org/">Scarab</a>
-development and I would like to share and document it with you all. Many thanks
-to Brian B for being patient with me and trying to explain exactly what he wants
-to see. So, let me start off by giving a little bit of history and then moving
-on from there...
-</p>
-
-<p>
-The current encouragement that Turbine gives to developers is to do a mapping
-between one Screen (Java) and one Template (WM or V). The way it works is that
-you build up a Context object that is essentially a Hashtable that contains all
-of the data that is required to render a particular template. Within the
-template, you refer to that data in order to format it for display. I will refer
-to this as the "Push MVC Model." This IMHO is a perfectly acceptable, easy to
-understand and implement approach.
-</p>
-
-<p>
-We have solved the problem of being able to display the data on a template
-without requiring the engineer to make modifications to the Java code. In other
-words, you can modify the look and feel of the overall website without the
-requirement of having a Java engineer present to make the changes. This is
-a very good step forward.
-</p>
-
-<p>
-However, it has a shortcoming in that it makes it more difficult to allow the
-template designer (ie: a non programmer) the ability to move information on a
-template from one template to another template because it would require the
-logic in the Java code to be modified as well. For example, say you have a set
-of "wizard" type screens and you want to change the order of execution of those
-screens or even the order of the fields on those screens. In order to do so, you
-can't simply change the Next/Back links you need to also change the Java code.
-</p>
-
-<p>
-Another example of this is if you have a form on a page and you want to be
-able to split that form across several steps across several pages. In the
-current model, you would have to potentially write/modify several Java classes.
-In reality, this should be something that is easily modifiable by just a single
-template engineer who doesn't necessarily even know Java.
-</p>
-
-<p>
-There are several considerations that one must take into consideration regarding
-the design of a system to provide this level of abstraction. For example, when
-someone submits the form and there is an error. Proper UI would suggest that you
-should re-display the page with the previous form data filled in as well as an
-error message that details the problems. You also need to consider the ability
-to display the same form that may be pre-populated with information from the
-database instead of as an error from the user.
-</p>
-
-<p>
-So, beginning with Scarab, we are going to try another model which I will
-describe as the "Pull MVC Model". What this entails is the ability to create an
-object that is able to "pull" the required information out at execution time
-within the template. Thus, it becomes the job of the template designer to
-understand the API of objects available to him/her to take advantage of.
-</p>
-
-<p>
-Instead of the developer telling the designer what Context names to use for each
-and every screen, there is instead a set of a few objects available for the
-template designer to pick and choose from. These objects will provide methods to
-access the underlying information either from the database or from the
-previously submitted form information.
-</p>
-
-<p>
-Gone are the days where one would have a Java class that would be responsible
-for building the context up for the template. Instead, there would be a single
-base class that places the few objects into the context for every request and
-there is a documented API that the template designer can refer to in order to
-access the information that he/she needs to get at. Of course this information
-is only retrieved when requested and can also be managed in a cache for reuse.
-</p>
-
-<p>
-By moving to a "Pull" model, it becomes possible to more easily achieve complete
-independence from the Java engineers in order to not only change the look and
-feel (UI) of the site but also the information architecture (IA) layout and flow
-of the site.
-</p>
-
-<p>
-While this puts more requirements on the Java engineer to make sure that the
-template designer has a well defined API, it will save the Java engineer many
-hours further down the road when the client requests IA changes because now the
-responsibility is on the template designer to make the changes. Therefore the
-increased initial developer time is justified in order to realize the long term
-goals of the project.
-</p>
-
-<p>
-I hope that this makes sense to everyone. I'm sure that some of you are probably
-saying "well, duh!." However, this is really not the model that has been
-encouraged so far within Turbine nor within other products such as XMLC (which
-actually operates *only* on the Push model), so I believe that it is somewhat
-uncharted territory for some people. The only products that I can think of right
-now that encourage this is JSP taglibs and Tea, however, I still feel as though
-they have missed the boat on this in one way or another.
-</p>
-
-<p>
-Comments are appreciated. Please post them to the Turbine
-<a href="http://jakarta.apache.org/site/mail.html">mailing list</a>.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/related-projects.xml b/xdocs/related-projects.xml
deleted file mode 100644
index a994a8b..0000000
--- a/xdocs/related-projects.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Related Projects to Turbine</title>
- </properties>
-
-<body>
-
-<section name="Related Projects">
-
-<p>
-  There are a couple projects related to Turbine.  These projects have code that is either meant
-  to work with Turbine, or can be integrated via the Avalon container service with Turbine.
-</p>
-
-<p>
-  <ul>
-  	<li><a href="http://jakarta.apache.org/turbine/fulcrum">Fulcrum</a>  A collection of Avalon components.</li>
-  	<li><a href="http://xingu.sf.net">Xingu</a>  Another repository of both Turbine pull tools and Avalon components.</li>  	
-  </ul>
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/assemblerbroker-service.xml b/xdocs/services/assemblerbroker-service.xml
deleted file mode 100644
index 1e2e07c..0000000
--- a/xdocs/services/assemblerbroker-service.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Assembler Broker Service</title>
- </properties>
-
-<body>
-
-<section name="Assembler Broker Service">
-
-<p>
-In Turbine <strong>assemblers</strong> are the basis for all the
-module types: pages, layouts, screens, navigations, and scheduled
-jobs. The way that these module types fits together is defined in
-the Turbine <a href="../fsd.html">specification</a> document.
-</p>
-
-<p>
-The Assembler Broker Service allows these module types to
-be loaded by one or more AssemblerFactory implementations.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.AssemblerBrokerService.classname=org.apache.turbine.services.assemblerbroker.TurbineAssemblerBrokerService
-.
-.
-.
-
-# -------------------------------------------------------------------
-# 
-#  A S S E M B L E R  B R O K E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-# A list of AssemblerFactory classes that will be registered 
-# with TurbineAssemblerBrokerService
-# -------------------------------------------------------------------
-
-services.AssemblerBrokerService.screen=org.apache.turbine.util.assemblerbroker.java.JavaScreenFactory
-services.AssemblerBrokerService.screen=org.apache.turbine.util.assemblerbroker.python.PythonScreenFactory
-services.AssemblerBrokerService.action=org.apache.turbine.util.assemblerbroker.java.JavaActionFactory
-services.AssemblerBrokerService.layout=org.apache.turbine.util.assemblerbroker.java.JavaLayoutFactory
-services.AssemblerBrokerService.page=org.apache.turbine.util.assemblerbroker.java.JavaPageFactory
-services.AssemblerBrokerService.navigation=org.apache.turbine.util.assemblerbroker.java.JavaNavigationFactory
-services.AssemblerBrokerService.scheduledjob=org.apache.turbine.util.assemblerbroker.java.JavaScheduledJobFactory
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-This service is used internally within Turbine. Therefore, we do not
-document its usage here. It is best to simply look at the source code,
-read the Javadocs and follow the logic.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/avalon-component-service.xml b/xdocs/services/avalon-component-service.xml
deleted file mode 100644
index 6392c25..0000000
--- a/xdocs/services/avalon-component-service.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Avalon Component Service</title>
- </properties>
-
-<body>
-
-<section name="Avalon Component Service">
-<p>
-The Avalon Component service loads external modules which implement the
-<a href="http://avalon.apache.org/">Avalon</a> lifecycle interfaces.
-</p>
-<p>
-The only supported component at this point in time is 
-<a href="http://db.apache.org/torque/">Torque</a>, though the
-<a href="http://jakarta.apache.org/turbine/fulcrum/">Fulcrum</a>
-components are likely to be migrated to become Avalon components 
-in the future.
-</p>
-
-</section>
-
-<section name="Dependencies">
-
-<p>
-Don't forget to update the dependencies of your project to match
-those defined for Turbine and the components you are loading:
-<ul>
-<li><a href="../dependencies.html">Turbine Dependencies</a></li>
-<li><a href="http://db.apache.org/torque/dependencies.html">Torque Dependencies</a></li>
-</ul>
-</p>
-
-</section>
-
-<section name="Configuration">
-
-	<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.AvalonComponentService.classname = org.apache.turbine.services.avaloncomponent.TurbineAvalonComponentService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  A V A L O N   C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the avalon lifecycle interfaces can be 
-# loaded, configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-services.AvalonComponentService.componentConfiguration = /WEB-INF/conf/componentConfiguration.xml
-services.AvalonComponentService.componentRoles = /WEB-INF/conf/roleConfiguration.xml
-services.AvalonComponentService.lookup = org.apache.torque.avalon.Torque
-]]></source>
-<p>
-In /WEB-INF/conf you should provide componentConfiguration.xml:
-</p>
-<source><![CDATA[
-<componentConfig>
-    <torque>
-       <configfile>/WEB-INF/conf/torque.properties</configfile>
-    </torque>
-</componentConfig>
-]]></source>
-<p>
-and roleConfiguration.xml:
-</p>
-<source><![CDATA[
-<role-list>
-    <role name="org.apache.torque.avalon.Torque"
-          shorthand="torque"
-          default-class="org.apache.torque.avalon.TorqueComponent" />
-</role-list>
-]]></source>
-<p>
-No changes to torque.properties are required.
-</p>
-<p>
-If all goes well you should see the following in your log file when 
-Turbine starts up:
-</p>
-<source><![CDATA[
-...INFO...services.BaseServiceBroker - Added Mapping for Service: AvalonComponentService
-...INFO...services.BaseServiceBroker - Start Initializing service (early): AvalonComponentService
-...INFO...services.avaloncomponent.TurbineAvalonComponentService - Lookup for Component org.apache.torque.avalon.Torque successful
-...INFO...services.BaseServiceBroker - Finish Initializing service (early): AvalonComponentService
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-If you plan to use the decoupled Torque in your application, you should
-leave the Avalon Component Service configured at all times. It is started at
-early startup time. Once it has initialized all the components, there
-are no application specific methods or services available.
-</p>
-</section>
-
-</body>
-
-</document>
diff --git a/xdocs/services/cache-service.xml b/xdocs/services/cache-service.xml
deleted file mode 100644
index c79ac81..0000000
--- a/xdocs/services/cache-service.xml
+++ /dev/null
@@ -1,123 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Global Cache Service</title>
- </properties>
-
-<body>
-
-<section name="Global Cache Service">
-
-<p>
-The Global Cache Service provides an object cache that you can call
-from anywhere in your application to temporarily store objects. An example
-of its use may be to store the names of Countries that you use throughout
-your application to populate a look up list. If you normally store the
-information about Countries in a database, you can increase the performance
-of your application by using the Cache and decreasing the number of hits
-against the database.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.GlobalCacheService.classname=org.apache.turbine.services.cache.TurbineGlobalCacheService
-.
-.
-.
-
-# -------------------------------------------------------------------
-#
-#  C A C H E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Interval at which the cache will be checked. The default is
-# 5000ms or 5 seconds.
-
-services.GlobalCacheService.cache.check.frequency = 5000
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<source><![CDATA[
-
-GlobalCacheService gs = null;
-try
-{
-    /*
-     * Look for the item in the cache.
-     * If it doesn't exist or the item is stale,
-     * the cache will throw an exception.
-     */
-    gs = (GlobalCacheService)TurbineServices.getInstance()
-        .getService(GlobalCacheService.SERVICE_NAME);
-
-    CachedObject obj = gs.getObject("cached_object");
-
-    data.setMessage( data.getScreen() + " Got " +
-        obj.getContents().toString() + " from global cache!" );
-}
-catch(ObjectExpiredException gone)
-{
-    /*
-     * Add the item to the cache.
-     */
-    gs.addObject("cached_object",
-        new CachedObject("in_the_cache",5000));
-
-    data.setMessage( data.getScreen() +
-        " Refreshed/or added new item to" +
-        " the cache! Expires in 5 seconds" );
-}
-
-]]></source>
-
-<p>
-You can also place an expiration time on your objects so the Service will
-automatically remove them when they expire. If you don't specify an expiration
-time, the Service uses the default time set by the property
-<em>cache.check.frequency</em> in the TurbineResources.properties
-file. To see an example, look at the file <strong>TestGlobalCache.java</strong>
-located in the actions folder.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/component-service.xml b/xdocs/services/component-service.xml
deleted file mode 100644
index 93d97e2..0000000
--- a/xdocs/services/component-service.xml
+++ /dev/null
@@ -1,138 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Component Service</title>
- </properties>
-
-<body>
-
-<section name="Component Service">
-<p>
-The Component service loads external modules which implement the
-org.apache.stratum.lifecycle Interfaces for use with Turbine 2.
-</p>
-<p>
-Main usage for this are the <a href="http://db.apache.org/torque/">
-Torque</a> and <a href="http://jakarta.apache.org/turbine/fulcrum/">
-Fulcrum</a> components of the <a 
-hef="http://jakarta.apache.org/turbine/">Turbine</a> project.
-</p>
-
-<p>
-As Turbine-2 now uses the decoupled Torque, you must initialize Torque
-at startup. Fulcrum is currently not integrated in Turbine-2.2 but you
-can use some services from it.
-</p>
-
-<p>
-As of version 2.3 Turbine now provides an 
-<a href="avalon-component-service.html">Avalon Component Service</a> 
-that can be used to configure Torque.  In future releases additional 
-components will be migrated to Avalon components, most likely as part
-of Fulcrum.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.ComponentService.classname=org.apache.turbine.services.component.TurbineComponentService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  C O M P O N E N T   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Components implementing the lifecycle interfaces can be loaded,
-# configured and initialized by Turbine
-# -------------------------------------------------------------------
-
-#
-# Here you define the names of the various components to load. These
-# names are used as identifiers later so you can choose them freely. It
-# is, however, sensible to use the same names as the component projects
-# that you want to load.
-#
-services.ComponentService.name = torque
-
-#
-# This is the class of the component to be loaded. 
-#
-# It must implement the org.apache.stratum.lifecycle.Initializable and
-# org.apache.stratum.lifecycle.Configurable interface to be loaded.
-#
-# It may implement the org.apache.stratum.lifecycle.Disposable interface.
-# If it does, the Component is disposed at shutdown (Servlet destroy()) time.
-#
-services.ComponentService.torque.classname = org.apache.torque.Torque
-
-#
-# This is the path to the Config file of the Component. It is relative
-# to the Root of the Application (either the Webroot given by the Servlet
-# Container or the Root given to TurbineConfig at startup time)
-#
-services.ComponentService.torque.config = /conf/Torque.properties
-
-#
-# Properties can be given directly to Components. This sets the "foo"
-# property for torque to "bar".
-#
-services.ComponentService.torque.property.foo = bar
-
-# This is an example of how to load Fulcrum as a component
-#
-#
-services.ComponentService.name = fulcrum			  
-services.ComponentService.fulcrum.classname = org.apache.fulcrum.Fulcrum
-services.ComponentService.fulcrum.config = /conf/Fulcrum.properties
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-If you plan to use the decoupled Torque in your application, you should
-leave the Component Service configured at all times. It is started at
-early startup time. Once it has initialized all the components, there
-are no application specific methods or services available.
-</p>
-</section>
-
-</body>
-
-</document>
diff --git a/xdocs/services/crypto-service.xml b/xdocs/services/crypto-service.xml
deleted file mode 100644
index 5a96196..0000000
--- a/xdocs/services/crypto-service.xml
+++ /dev/null
@@ -1,177 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-  <properties>
-    <title>Crypto Service</title>
-  </properties>
-
-<body>
-
-<section name="Crypto Service">
-
-<p>
-The Crypto Service allows an application to request various encryption
-algorithms provided by the normal Java crypto providers and 3rd party
-providers such as <a href="http://www.cryptix.org/">Cryptix</a>.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.CryptoService.classname=org.apache.turbine.services.crypto.TurbineCryptoService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  C R Y P T O   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Standard Unix crypt(3) password encryption.
-# 
-services.CryptoService.algorithm.unix  = org.apache.turbine.services.crypto.provider.UnixCrypt
-#
-# This providers allows access to the Java Message Digest encryption algorithms
-#
-services.CryptoService.algorithm.java  = org.apache.turbine.services.crypto.provider.JavaCrypt
-#
-# This is a simple, cleartext "encryption" provider.
-#
-services.CryptoService.algorithm.cleartext  = org.apache.turbine.services.crypto.provider.ClearCrypt
-#
-# Use this provider if you upgrade from Turbine 2.1 to current. It provides bug-to-bug
-# compatibility for passwords created with the old Security Service. See the javadocs for
-# OldJavaCrypt
-#
-services.CryptoService.algorithm.oldjava  = org.apache.turbine.services.crypto.provider.OldJavaCrypt
-#
-# This is the default crypto provider. It implements the normal Java MessageDigest ciphers
-# You need not to have this, it is the default if no algorithms are given. The default
-# provider gives you all the Java MessageDigest Ciphers
-#
-services.CryptoService.algorithm.default  = org.apache.turbine.services.crypto.provider.JavaCrypt
-
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-If you want to encrypt a clear text with a MessageDigest Cipher, you can
-do it like this:
-</p>
-
-<source><![CDATA[
-import org.apache.turbine.services.crypto.CryptoAlgorithm;
-import org.apache.turbine.services.crypto.TurbineCrypto;
-
-public class CryptoExample
-{
-    public String doMD5Encryption(String input)
-    {
-        CryptoAlgorithm ca = TurbineCrypto.getCryptoAlgorithm("default");
-
-        ca.setCipher("MD5");
-
-        return ca.encrypt(input);
-    }
-}
-]]></source>
-
-</section>
-
-<section name="Default Provider">
-
-<p>
-In the source code and the example above, there is talk about a
-"default" provider which is used if no encryption algorithm is
-specifically requested. The reason for this comes from the first user
-of the crypto service, the <a href="security-service.html">Security
-Service</a>. It gives you the ability to select an encryption
-algorithm like MD5 or SHA1 which is in turn used with the normal java
-crypto providers. As we just wanted to "add" new algorithms and still
-be able to use the old java.security names like MD5 and SHA1, we
-decided to add a "catchall" algorithm to the crypto service.
-</p>
-<p>
-If you don't set the default provider explicitly, the
-org.apache.turbine.services.crypto.provider.JavaCrypt class is used. If you
-don't set the Cipher of this class explicitly, then SHA is used.
-</p>
-
-</section>
-
-<section name="Included Providers">
-
-<p>The following algorithm providers are included in the Cryptoservice:</p>
-
-<p>
-<ol>
-<li>
-<b>ClearCrypt</b> (org.apache.turbine.services.crypto.provider.ClearCrypt). This is
-the simplest algorithm which does nothing. It is still useful because
-you can use the Crypto Service all the time even if you don't want to
-actually encrypt something. Just request the "cleartext" algorithm.
-</li>
-<li>
-<b>UnixCrypt</b> (org.apache.turbine.services.crypto.provider.UnixCrypt). This is an
-implementation of the Unix crypt(3) algorithm. Its main use is when
-you need to access legacy information or databases which already
-contain crypted passwords. UnixCrypt needs the cryptix32.jar from <a
-href="http://www.cryptix.org/">Cryptix</a>.
-</li>
-<li>
-<b>JavaCrypt</b> (org.apache.turbine.services.crypto.provider.JavaCrypt). This is a
-wrapper around the java.security Message Digest functions which give
-you MD5, SHA1 and more algorithms.
-</li>
-<li>
-<b>OldJavaCrypt</b> (org.apache.turbine.services.crypto.provider.OldJavaCrypt). Accessing
-the MessageDigest functions from java.security was buggy in Turbine 2.1, because
-the Security Service didn't pad the base64 values correctly but simply cut them
-off after 20 bytes. If you're stuck with an old database full of passwords and can't
-upgrade, please use this provider to keep going. DO NOT USE THIS PROVIDER FOR NEW
-APPLICATIONS!.
-</li>
-</ol>
-</p>
-</section>
-</body>
-</document>
-
-  
diff --git a/xdocs/services/factory-service.xml b/xdocs/services/factory-service.xml
deleted file mode 100644
index a266be0..0000000
--- a/xdocs/services/factory-service.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Factory Service</title>
- </properties>
-
-<body>
-
-<section name="Factory Service">
-
-<p>
-The Factory Service instantiates objects from the given class name
-using either the given class loader or an applicable one found from the class
-loader repository. If neither one is specified, the default class loader
-will be used.
-</p>
-
-<p>
-The service provides the following benefits compared to Class.forName():
-</p>
-<ul>
-<li>support for parameters in constructors,</li>
-<li>internal class loader repository, which can be specified in resources,</li>
-<li>optional class specific factories, which can be used for customized instantiation, and</li>
-<li>integration with the Pool Service supporting recycling of instances created by the service.</li>
-</ul>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.FactoryService.classname=org.apache.turbine.services.factory.TurbineFactoryService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  F A C T O R Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# A comma separated list of classloaders (very optional)
-#
-# Example: org.foo.bar.MyClassLoader, org.ack.joe.YourClassLoader
-#
-#services.FactoryService.class.loaders=
-
-# Customized factories to be used instead of the default factory.
-# E.g. to instantiate XML parsers, SSL sockets, etc., which require
-# specific instantiation not supported by the default factory.
-# The property name is prefixed with "factory" followed by the
-# name of the production class. The value is the class name of
-# the factory implementing the Factory interface. The factory
-# will be instantiated by using the service itself.
-#
-# Examples:
-#
-#services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-#services.FactoryService.factory.javax.xml.parsers.SAXParser=org.foo.xml.SaxParserFactory
-#services.FactoryService.factory.java.net.ServerSocket=org.foo.net.SslServerSocketFactory
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-In Turbine, the Factory Service is currently only used internally by the Pool Service.
-Applications can also use the service instead of Class.forName() and for unifying
-initialization, configuration and access to vendor specific object factories. 
-The following is a simplified example of a customized DOM parser factory:
-</p>
-
-<source><![CDATA[
-package org.foo.xml;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.turbine.util.TurbineException;
-import org.apache.turbine.services.factory.Factory;
-
-/**
- * A factory for instantiating DOM parsers. 
- */
-public class DomBuilderFactory implements Factory
-{
-    /**
-     * The implementation of the factory.
-     */
-    private DocumentBuilderFactory factory;
-
-    /**
-     * Initializes the factory.
-     */
-    public void init(String className)
-        throws TurbineException
-    {
-        factory = DocumentBuilderFactory.newInstance();
-    }
-
-    /**
-     * Gets a DocumentBuilder instance.
-     */
-    public Object getInstance()
-        throws TurbineException
-    {
-        try
-        {
-            return factory.newDocumentBuilder();
-        }
-        catch (ParserConfigurationException x)
-        {
-            throw new TurbineException(x);
-        }
-    }
-
-    /**
-     * Gets a DocumentBuilder instance.
-     * The given loader is ignored.
-     */
-    public Object getInstance(ClassLoader loader)
-        throws TurbineException
-    {
-        return getInstance();
-    }
-
-    /**
-     * Gets a DocumentBuilder instance.
-     * Constructor parameters are ignored.
-     */
-    public Object getInstance(Object[] params,
-                              String[] signature)
-        throws TurbineException
-    {
-        return getInstance();
-    }
-
-    /**
-     * Gets a DocumentBuilder instance.
-     * The given loader and constructor parameters are ignored.
-     */
-    public Object getInstance(ClassLoader loader,
-                              Object[] params,
-                              String[] signature)
-        throws TurbineException
-    {
-        return getInstance();
-    }
-
-    /**
-     * Returns false as given class loaders are not supported.
-     */
-    public boolean isLoaderSupported()
-    {
-        return false;
-    }
-}
-]]></source>
-
-<p>
-The customized DOM parser factory must be specified in Turbine Resources before it can be used:
-</p>
-
-<source><![CDATA[
-services.FactoryService.factory.javax.xml.parsers.DocumentBuilder=org.foo.xml.DomBuilderFactory
-]]></source>
-
-<p>
-A DOM parser can now be instantiated with the following code fragment:
-</p>
-
-<source><![CDATA[
-// Access the service singleton.
-FactoryService service = (FactoryService) 
-    TurbineServices.getInstance().getService(FactoryService.SERVICE_NAME);
-    
-// Create a new DOM parser. 
-DocumentBuilder parser = 
-    service.getInstance("javax.xml.parsers.DocumentBuilder");
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/index.xml b/xdocs/services/index.xml
deleted file mode 100644
index b382e41..0000000
--- a/xdocs/services/index.xml
+++ /dev/null
@@ -1,262 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services</title>
- </properties>
-
-<body>
-
-
-<section name="Turbine Services">
-<p>
-Services are singletons within the Turbine Framework which have
-pluggable implementation, and are capable of participating in the
-Turbine startup and shutdown. As Services are Singletons, there is
-only one instance of each service in the system. Memory or connections
-are allocated once only and the internal state is common to all
-requesting clients. Services can access ServletConfig at system
-startup time to process relative paths and similar functionality, they
-can also access RunData on the first Turbine doGet execution to get
-the environment Turbine is operating under and with. Services can also
-initialize themselves before they are requested by the client for the
-first time. A Service that is never used will not allocate resources to
-itself. A Service can also execute actions upon the system being
-shutdown, such as closing open connections. The Singleton pattern also
-allows for the Services to be accessed from anywhere within your code.
-</p>
-
-<p>
-The Life Cycle of a Service begins with the Services constructor. A Service
-does not do much in it's contructor. Especially it should not allocate any
-costly resources like large memory structure, DB or Network connections, etc.
-The Service may be in the properties file, but unless a client using the
-application needs the Service in question, there is no point starting the
-Service.
-</p>
-
-
-<p>
-The services available with Turbine can be found in the
-org.apache.turbine.services package. <strong>Please note that the
-[TODO]'s below simply mean that these services need more complete
-documentation, it does not mean that they are still waiting to be
-implemented.</strong>
-</p>
-
-<ul>
-<li>
-<a href="assemblerbroker-service.html">Assembler Broker Service</a>
-<br/>
-Is the Service which allows assemblers such as Screens, Actions, Layout and
-Scheduled Jobs to be loaded.
-</li>
-
-<li>
-<a href="avalon-component-service.html">Avalon Component Service</a>
-<br/>
-Initializes external components which implement the Avalon lifecycle 
-interface, e.g. Torque.
-</li>
-
-<li>
-<a href="crypto-service.html">Crypto Service</a>
-<br/>
-Provides encryption algorithms like MD5 and SHA message digests as well as old-fashioned Unix crypt.
-</li>
-
-<li>
-<a href="cache-service.html">Cache Service</a>
-<br/>
-Provides a persistant Object Storage mechanism within your application.
-</li>
-
-<li>
-<a href="component-service.html">Component Service</a>
-<br/>
-Initializes external components which implement the Stratum lifecycle 
-interface, e.g. Torque and Fulcrum.  Any new components will use the 
-Avalon lifecycle and thus the Avalon Component Service.
-</li>
-
-<li>
-<a href="factory-service.html">Factory Service</a>
-<br/>
-A Service for the instantiation of objects with either the specified loaders or
-default class loaders.
-</li>
-
-<li>
-<a href="intake-service.html">Intake Service</a>
-<br/>
-A service that provides input validation along with a standard
-parameter naming framework.
-</li>
-
-<li>
-<a href="jsp-service.html">JSP Service</a>
-<br/>
-The JSP Service is the set of classes that process JSP files inside the
-Turbine Layout/Navigations and Screen structure.
-</li>
-
-<li>
-<a href="localization-service.html">Localization Service</a>
-<br/>
-The single point of access to all localization resources.
-</li>
-
-<li>
-<a href="logging-service.html">Logging Service</a>
-<br/>
-The Logging Service has been removed and replaced with a commons-logging
-and log4j combination. Here you find some information how to use this
-in Turbine.
-</li>
-
-<li>
-<a href="mimetype-service.html">MimeType Service</a>
-<br/>
-The service maintains the mappings between MIME types and corresponding file
-name extensions as well as between locales and character encoding.
-</li>
-
-<li>
-<a href="naming-service.html">Naming Service</a>
-<br/>
-Provides JNDI naming contexts.
-</li>
-
-<li>
-<a href="pool-service.html">Pool Service</a>
-<br/>
-A service for the pooling of instantiated Objects, allowing for the recycling
-and disposal of Objects in the pool.
-</li>
-
-<li>
-<a href="pull-service.html">Pull Service</a>
-<br/>
-Manages the creation of application tools that are available to all templates
-in a Turbine application. The tools can have global scope, request scope, session
-scope or persistant scope within your application.
-</li>
-
-<li>
-<a href="resources-service.html">Resources Service</a>
-<br/>
-The Resources Service has been removed and replaced with commons-configuration. You
-find some explanation how to use commons-configuration here.
-</li>
-
-<li>
-<a href="rundata-service.html">RunData Service</a>
-<br/>
-Is the Service which manages the higher level operations surrounding
-requests and responses.
-</li>
-
-<li>
-<a href="scheduler-service.html">Scheduler Service</a>
-<br/>
-This service manages the schedule queue giving Cron like functionality.
-The ScheduledJob can be stored in a database or a properties file.
-</li>
-
-<li>
-<a href="security-service.html">Security Service</a>
-<br/>
-A service for the management of Users, Groups, Roles and Permissions
-in the system, allowing for those Objects to interact with either
-Database or LDAP backends. The service also allows for the security to be managed
-without a backend.
-</li>
-
-<li>
-<a href="servlet-service.html">Servlet Service</a>
-<br/>
-Encapsulates the information provided by the ServletContext API,
-and makes it available from anywhere in the code.
-</li>
-
-<li>
-<a href="session-service.html">Session Service</a>
-<br/>
-Provides access to Session information for the current web context.
-</li>
-
-<li>
-<a href="template-service.html">Template Service</a>
-<br/>
-The Service for the mapping of templates to their screens and actions.
-</li>
-
-<li>
-<a href="torque-security-service.html">Torque Security Service</a>
-<br/>
-This is an implementation of a Security Service which uses Torque 
-generated peers to access the required security information.
-</li>
-
-<li>
-<a href="uniqueid-service.html">Unique ID Service</a>
-<br/>
-Allows for the creation of Context unique and pseudo random identifiers.
-</li>
-
-<li>
-<a href="upload-service.html">Upload Service</a>
-<br/>
-This service manages multipart/form-data POST requests, storing them
-temporarily in memory or locally. The resultant Objects can be manipulated through
-a FileItem Object.
-</li>
-
-<li>
-<a href="velocity-service.html">Velocity Service</a>
-<br/>
-<b>[TO DO]</b> The service for the processing of Velocity Templates from within
-the Turbine Layout/Navigations and Screen structure.
-</li>
-
-<li>
-<a href="xmlrpc-service.html">XML-RPC Service</a>
-<br/>
-This service manages xml-rpc calls to a remote Server.
-</li>
-
-<li>
-<a href="xslt-service.html">XSLT Service</a>
-<br/>
-The service which  is used to transform XML with an XSLT stylesheet.
-</li>
-
-</ul>
-
-<p>
-For more information on the Services Package, view the package.html Package
-Documentation in the Javadocs or in Turbine CVS.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/intake-service.xml b/xdocs/services/intake-service.xml
deleted file mode 100644
index dea5fa0..0000000
--- a/xdocs/services/intake-service.xml
+++ /dev/null
@@ -1,929 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Intake Service</title>
- </properties>
-
- <body>
-
-<section name="Intake Service">
-
-<p>
-Intake uses an xml specification to perform web form input validation
-and mapping input data to a bean's properties.  In other words, Intake
-will allow a web application to take web form input, validate it and
-then map the data to an object. Tools like the <a
-href="http://db.apache.org/torque/">Torque</a> help provide mapping of 
-Objects to the database and Intake helps map web form data to Objects.
-</p>
-
-<p>
-The visual picture of where Intake fits into a Turbine web application
-looks something like this:
-</p>
-
-<source><![CDATA[
-------------------
-    HTML Form
-------------------
-     Intake
-------------------
- Business Objects  <- Torque Generated
-------------------
-      Peers        <- Torque Generated
-------------------
-      RDBMS
-------------------
-]]></source>
-
-<p>
-There are several advantages to using Intake. First off, it provides for
-a centralized management system for dealing with form data. All of the
-configuration of Intake is done through a single XML file. Next, Intake
-is good for validating the form data. Intake provides the ability to do
-regular expression matching in order to make sure that form fields
-contain the data that they should contain. For example, if someone
-should only enter a number into a form field, it can be validated with a
-regular expression. Lastly, Intake can provides a centralized source for
-error messages. If the validation fails, the error message defined in
-the XML file can be shown to the user.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.IntakeService.classname= \
-org.apache.turbine.services.intake.TurbineIntakeService
-
-# -------------------------------------------------------------------
-# 
-#  I N T A K E   S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of the xml file specifying valid inputs
-services.IntakeService.xml.path=WEB-INF/conf/intake.xml
-
-tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-]]></source>
-
-</section>
-
-<section name="Usage">
-<p>
-Intake is implemented as a Turbine Service and a Pull Tool.  An XML
-specification is parsed during the service initialization and used by
-the pull tool while processing request data and generating the response.
-</p>
-
-<p>
-Intake is made available in the Velocity context with the default value
-of $intake. The name of the variable that is used is what is configured 
-for the tool. For example, the current configuration is "tool.request.intake". 
-To change the name of the variable to "foo", it would be "tool.request.foo".
-</p>
-
-<p>
-Intake is made available in Java code by adding the following imports to
-the top of a .java file:
-</p>
-
-<source><![CDATA[
-import org.apache.turbine.services.intake.IntakeTool;
-import org.apache.turbine.services.intake.model.*;
-]]></source>
-
-</section>
-
-<section name="Xml File">
-
-<p>
-The following example come from <a
-href="http://scarab.tigris.org/">Scarab</a>. These are a couple of
-groups from Scarab's intake.xml:
-</p>
-
-<source><![CDATA[
-<input-data basePackage="org.tigris.scarab.">
-
-<group name="AttributeValue" key="attv" 
-            mapToObject="om.AttributeValue">
-    <field name="Value" key="val" type="String">
-        <rule name="maxLength" value="255">Value length cannot be &gt; 255</rule>
-        <required-message>This module requires data for this 
-                          attribute.
-        </required-message>
-    </field>
-    <field name="Url" key="url" type="String" mapToProperty="Value">
-        <rule name="maxLength" value="255">Url length cannot be &gt; 255</rule>
-        <rule name="mask" value="^$|http.+">Please enter an url starting with "http"</rule>
-        <required-message>This module requires a valid url.</required-message>
-    </field>
-    <field name="OptionId" key="optionid" type="NumberKey">
-        <rule name="mask" value="^$|[0-9]+">Please select a valid choice</rule>
-        <required-message>This module requires that you select an option 
-                          for this attribute.
-        </required-message>
-    </field>
-</group>
-
-<group name="Login" key="login">
-    <field name="Username" key="u" type="String">
-        <rule name="minLength" value="1">Please enter an email address</rule>
-        <rule name="mask" value=".+@.+\..+">Please enter a valid email address</rule>
-    </field> 
-    <field name="Password" key="p" type="String">
-        <rule name="minLength" value="1">Please enter a password</rule>
-    </field>
-</group>
-
-</input-data>
-]]></source>
-
-<p>
-A group is a set of fields that have been aligned so that they form a
-logical unit. The first group includes some of the properties from a
-om.AttributeValue business object (BO). This object is a Java Bean
-object with get/set methods for each of the properties in the object. In
-this case, the object has been auto-generated by Torque from Scarab's
-SQL schema.
-</p>
-
-<p>
-The group tag has a class attribute which is the name that will be used
-within templates and java code to refer to the group.  It also contains a 
-key attribute which will be used in the query parameters.  The key is
-not referenced in any code, so it can be a short name (even 1 character) as 
-long as it is uniquely identifies the group from the rest.
-</p>
-<p>
-An object that the group's fields will map can also be specified.  This will
-be a default; the individual fields within a group can map to different
-objects.
-</p>
-<p>
-Fields have attributes: name and key which serve similar function to the
-group's class and key attributes.  It has mapToObject and mapToProperty fields
-that can be used to associate a business object to the field for prepopulating
-the field as well as assigning the field data to the bean after successful
-validation.  The field must have a type, which can be simple types such as
-String and Integer.  It is planned that more complex types, such as
-Email, Url, or Date, will be added that will add functionality that is 
-difficult or not possible with a simple regex mask.
-</p>
-<p>
-The field can define rule elements.  The basic fields include rules for
-minimum and maximum, lengths and values, as well as a regex mask.
-</p>
-
-</section>
-
-<section name="Login Example">
-
-<source><![CDATA[
-<group name="Login" key="login">
-]]></source>
-
-<p>
-The name="Login" is a descriptive name for the group. The key="login" is
-the value that is used in the web forms to identify the group. The key=
-value is not directly referenced. In other words, you do not need to
-know it exists unless you are debugging your application. Both of these
-attribute values must be unique across all groups in the XML file. Now,
-lets look at the fields in the group.
-</p>
-
-<source><![CDATA[
-<field name="Username" key="u" type="String">
-    <rule name="minLength" value="1">Please enter an email address</rule>
-    <rule name="mask" value=".+@.+\..+">Please enter a valid email address</rule>
-</field> 
-<field name="Password" key="p" type="String">
-    <rule name="minLength" value="1">Please enter a password</rule>
-</field>
-]]></source>
-
-<p>
-The name="Username" is the descriptive name for the field. The key="u"
-is the value that is used in the web forms to identify the field. Both
-of these attributes must be unique across the fields within the group.
-The type="String" specifies what the system expects the input for that
-field to be (please see the intake.dtd for the allowed values). Within
-the field, it is possible to specify one or more rules. These rules
-define how Intake should validate web form data. There are minLength,
-maxLength and mask attributes to the rule tag. The message inside the
-rule tag is a text message which can be used to display an error within
-the template.
-</p>
-
-<p>
-At this point, it is best to show an example form of how to use Intake
-within a Velocity template:
-</p>
-
-<source><![CDATA[
-(1) <form action="$link.setPage("Login.vm")" method="POST" name="login" >
-(2)    <input type="hidden" name="action" value="Login">
-(3)    #if ($data.Parameters.nextTemplate)
-(4)    <input type="hidden" name="nextTemplate" 
-              value="$data.Parameters.nextTemplate">
-       #else
-(5)    <input type="hidden" name="nextTemplate" value="Start.vm">    
-       #end
-
-<p>
-Email Address:
-
-(6)    #set ( $loginGroup = $intake.Login.Default )
-
-(7)    #if ( !$loginGroup.Username.isValid() )
-(8)        $loginGroup.Username.Message<br>
-       #end
-(9)    <input name= "$loginGroup.Username.Key"
-              value="$!loginGroup.Username" size="25" type="text">
-</p>
-
-<p>
-Password:
-
-(10)    #if ( !$loginGroup.Password.isValid() )
-(11)        $loginGroup.Password.Message<br>
-        #end
-(12)   <input name= "$loginGroup.Password.Key"
-              value="" size="25" type="text" 
-              onChange="document.login.submit();">
-</p>
-
-(13) <input type="submit" name="eventSubmit_doLogin" value="Login">
-(14) $intake.declareGroups()
-</form>
-]]></source>
-
-<p>
-The example above shows quite a few different concepts with regards to
-web application design, so lets break them down a bit, starting from the
-top. Each of the important lines have been numbered for easy reference.
-</p>
-
-<p>
-<ol>
-    <li>
-    Create the &lt;form&gt; tag. Within it, we use the $link object to
-    create a URI for the template "Login.vm". In other words, when the
-    button is clicked, the page will submit upon itself.
-    </li>
-    <li>
-    Set the Action to execute to be "Login". This can either be a hidden
-    input field or be defined with the
-    $link.setPage().setAction("Login") method
-    </li>
-    <li>
-    Check to see if there is a "nextTemplate" defined in the
-    GET/POST/PATH_INFO information. On success, the Action can use the
-    nextTemplate field to decide what page to show next.
-    </li>
-    <li>
-    If (3), then create a hidden input tag that holds the value for
-    nextTemplate.
-    </li>
-    <li>
-    If not (3), then set the nextTemplate to be the "Start.vm" page.
-    </li>
-    <li>
-    This retrieves the default Login Group object from Intake. What this
-    means is that the group "Login" as defined in Scarab's intake.xml is
-    represented as an object.
-    </li>
-    <li>
-    It is then possible to query the object to confirm if the
-    information within it is valid.
-    </li>
-    <li>
-    This will display the invalid error message as defined in the
-    intake.xml &lt;rule&gt; definitions.
-    </li>
-    <li>
-    Here we define a form input text field. The $loginGroup.Username.Key
-    specifies an Intake system generated key. The value attribute
-    $!loginGroup.Username will tell Intake to either display an empty
-    String or display the previous form submission.
-    </li>
-    <li>
-    Repeat the same procedure as for the Username field.
-    </li>
-    <li>
-    Repeat the same procedure as for the Username field.
-    </li>
-    <li>
-    A bit of JavaScript will cause the form to submit itself if one hits
-    tab after entering the password.
-    </li>
-    <li>
-    eventSubmit_doLogin is special. It tells Turbine to execute the
-    doLogin method in the Action. This is based on the Action Events
-    system.
-    </li>
-    <li>
-    $intake.declareGroups() tells Intake to add a couple hidden input
-    fields to the page output. These fields represent the Groups that
-    were used in the template.
-    </li>
-</ol>
-</p>
-
-<p>
-Below is an example of the HTML that is sent to the browser after the 
-page has been requested:
-</p>
-
-<source><![CDATA[
-<form action="http://foo:8080/scarab/servlet/scarab/template/Login.vm" 
-      method="POST" name="login" >
-    <input type="hidden" name="action" value="Login">
-        <input type="hidden" name="nextTemplate" value="Start.vm">    
-    
-<p>
-Email Address:
-    
-       <input name= "login_0u"
-        value="" size="25" type="text">
-</p>
-
-<p>
-Password:
-
-       <input name= "login_0p"
-        value="" size="25" type="text" onchange="document.login.submit();">
-</p>
-
-<input type="submit" name="eventSubmit_doLogin" value="Login">
-
-<input type="hidden" name="intake-grp" value="login"></input>
-<input type="hidden" name="login" value="_0"></input>
-
-</form>
-]]></source>
-
-<p>
-Some notes to consider:
-</p>
-
-<ol>
-    <li>
-    The _0 signifies the "default" group.
-    </li>
-    <li>
-    The login_0u signifies the login group combined with the _0 and the
-    "u" is from the intake.xml file for the field "Username".
-    </li>
-    <li>
-    The two hidden input fields are what is generated from the
-    $intake.declareGroups()
-    </li>
-</ol>
-
-<p>
-The Java Action code which handles the submission of the form looks like this:
-</p>
-
-<source><![CDATA[
-public void doLogin( RunData data, Context context ) throws Exception
-{
-    IntakeTool intake = (IntakeTool) context.get("intake");
-
-    if ( intake.isAllValid() &amp;&amp; checkUser(data, context) ) 
-    {
-        String template = data.getParameters()
-            .getString(ScarabConstants.NEXT_TEMPLATE, 
-            TurbineResources.getString("template.homepage", "Start.vm") );
-        setTemplate(data, template);
-    }
-    else 
-    {
-        // Retrieve an anonymous user
-        data.setUser (TurbineSecurity.getAnonymousUser());
-        setTemplate(data, 
-            data.getParameters()
-                .getString(ScarabConstants.TEMPLATE, "Login.vm"));
-    }
-}
-
-/**
-    Checks to make sure that the user exists, has been confirmed.
-*/
-public boolean checkUser(RunData data, Context context)
-    throws Exception
-{
-    User user = null;
-    IntakeTool intake = (IntakeTool)context
-        .get(ScarabConstants.INTAKE_TOOL);
-
-    try
-    {
-        String username = null;
-        String password = null;
-        try
-        {
-            Group login = intake.get("Login", IntakeTool.DEFAULT_KEY);
-            username = login.get("Username").toString();
-            password = login.get("Password").toString();
-        }
-        catch ( Exception e )
-        {
-            throw new TurbineSecurityException(
-                "Login information was not supplied.");
-        }
-
-        // Authenticate the user and get the object.
-        user = TurbineSecurity.getAuthenticatedUser( username, password );
-
-        ...
-    }
-}
-]]></source>
-
-<p>
-Intake is retrieved from the context and asked whether all the inputs
-that it knows about were valid. If not the login form will be quickly
-reshown and error messages will be given. If the data is valid, the
-field data is extracted manually in this case, as the Intake fields do
-not map directly to a bean object. The next example will use the
-group.setProperties() method to directly assign Intake's field data to
-the matching beans.
-</p>
-
-</section>
-
-<section name="Attribute Value example">
-
-<source><![CDATA[
-<group name="AttributeValue" key="attv" 
-            mapToObject="om.AttributeValue">
-]]></source>
-
-<p>
-The name="AttributeValue" is simply a descriptive name for the group.
-The key="attv" is the value that is used in the web forms to identify
-the group. Both of these attributes must be unique across all groups in
-the XML file. The mapToObject="om.AttributeValue" is an optional
-attribute. This specifies what Java Bean object that this group maps to.
-If a mapToObject is not specified, then it is possible to use Intake to
-retrieve the values of the data directly instead of getting it from a
-populated object. This will be covered in detail further on.
-</p>
-
-
-<source><![CDATA[
-<field name="Value" key="val" type="String">
-    <rule name="maxLength" value="255">Value length cannot be &gt; 255</rule>
-    <required-message>This module requires data for this 
-                      attribute.
-    </required-message>
-</field>
-<field name="Url" key="url" type="String" mapToProperty="Value">
-    <rule name="maxLength" value="255">Url length cannot be &gt; 255</rule>
-    <rule name="mask" value="^$|http.+">Please enter an url starting with "http"</rule>
-    <required-message>This module requires a valid url.</required-message>
-</field>
-]]></source>
-
-<p>
-The fields within a group relate to the form fields on a web page. At
-this point, it is probably best to show an example rather than
-explaining in detail what each part of the field tag is. Therefore,
-using the fields above in a simple example, one might have a form with a
-text entry box that allows you to edit a Url. The filename is:
-"EditUrl.vm".
-</p>
-
-<source><![CDATA[
-#set ( $action = $link.setPage("EditUrl.vm").setAction("SaveUrl") )
-<form action="$action"
-      method="post">
- 
-#set ( $attributeValue = $issue.AttributeValue("URL") )
-#set ( $group = $intake.AttributeValue.mapTo($attributeValue) )
-
-Enter Url:
-<input type="text" name="$group.Url.Key" value="$!group.Url.Value">
-
-<input type="submit" name="eventSubmit_doSave" value="Submit>
-
-$intake.declareGroups()
-</form>
-]]></source>
-
-<p>
-To explain the template above, the first #set is done simply for
-convenience. The second #set is part of Scarab. It uses the $issue
-object to retrieve a "URL" AttributeValue object for a particular issue.
-</p>
-
-<p>
-The next #set tells Intake to map that object to the AttributeValue
-group. What it does is tell Intake to create an AttributeValue Group
-object which has been mapped to the AttributeValue retrieved from the
-$issue object. This Group object represents the XML file &lt;group&gt;
-as a Java object.
-</p>
-
-<p>
-Moving down further into the example, there is the &lt;input&gt; field
-which has a name and value attributes. The $group.Url.Key tells Intake
-to retrieve the key information for the field. This would evaluate to
-"attv_0url". What this is a combination of the group key (attv), a "_0"
-is the result of retrieving the "$intake.AttributeValue.Default" and the
-"url" is the field key. The value attribute would evaluate to just an 
-empty String the first time around. The $intake.declareGroups() is a 
-special method that will create a hidden input field that declares which
-groups have been added to the page. We will discuss that in more detail
-further down.
-</p>
-
-<p>
-View source on the HTML page after executing the template and this is
-what the form above would look like:
-</p>
-
-<source><![CDATA[
-<form action="http://server/s/servlet/s/template/EnterUrl.vm/action/EnterUrlAction" 
-      method="post">
-
-Enter Url:
-<input type="text" name="attv_0url" value="">
-
-<input type="submit" name="eventSubmit_doEnter" value="Submit>
-
-<input type="hidden" name="attv" value="_0">
-<input type="hidden" name="intake-grp" value="attv">
-</form>
-]]></source>
-
-<p>
-When the form is submitted to the server (the user clicks the submit
-button), the following code in the EnterUrlAction.java class is executed.
-</p>
-
-<source><![CDATA[
-public void doEnter( RunData data, Context context ) throws Exception
-{
-    IntakeTool intake = (IntakeTool)context
-        .get(ScarabConstants.INTAKE_TOOL);
-    
-    // check to see if the fields are valid
-    if ( intake.isAllValid() ) 
-    {
-        // get the "AttributeValue" Group
-        AttributeValue av = new AttributeValue();
-        Group group = intake.get("AttributeValue", IntakeTool.DEFAULT_KEY);
-        group.setProperties (av);
-        // now av is properly populated with the form data
-    }
-}
-]]></source>
-
-<p>
-If the form fields are invalid as a result of not matching one of the
-rules that are defined in the fields in the XML file, then the action
-does nothing and the page is displayed again.
-</p>
-
-<p>
-Back to explaining the fields, lets look at the example again:
-</p>
-
-<source><![CDATA[
-    <field name="Value" key="val" type="String">
-        <rule name="maxLength" value="255">Value length cannot be &gt; 255</rule>
-        <required-message>This module requires data for this 
-                          attribute.
-        </required-message>
-    </field>
-    <field name="Url" key="url" type="String" mapToProperty="Value">
-        <rule name="maxLength" value="255">Url length cannot be &gt; 255</rule>
-        <rule name="mask" value="^$|http.+">Please enter an url starting with "http"</rule>
-        <required-message>This module requires a valid url.</required-message>
-    </field>
-]]></source>
-
-  </section>
-
-  <section name="Multiple groups of the same class in one form">
-  
-<p>
-This example uses a form from Scarab that assigns values to various
-attribute's that are relevant for an issue (bug).  Attributes include
-summary, operating system, platform, assigned to, etc.  Some of the 
-attributes are required, but not all.  
-</p>
-
-<p>
-The template:
-</p>
-
-<source><![CDATA[
-#set ( $action = $link.setPage("entry,Wizard3.vm").setAction("ReportIssue")
-.addPathInfo("nextTemplate", "entry,Wizard4.vm") )
-#set ($user = $scarabR.User)
-#set ($module = $user.CurrentModule)
-#set ($issue = $user.ReportingIssue)
-
-
-<form method="get" action="$action">
-
-<hr><br>Please fill in the following:<br><br>
-
-#foreach ( $attVal in $issue.OrderedModuleAttributeValues )
-  #set ( $attrInput = $intake.AttributeValue.mapTo($attVal) ) 
-
-  #if ( $attVal.Attribute.AttributeType.ValidationKey )
-        #set ( $field = $attVal.Attribute.AttributeType.ValidationKey )
-  #elseif ($attVal.Attribute.AttributeType.Name == "combo-box" )
-        #set ( $field = "OptionId" )
-  #else
-        #set ( $field = "Value" )  
-  #end
-
-    #if ( $attVal.isRequired() )
-        $attrInput.get($field).setRequired(true)
-        <b>*</b>
-    #end
-
-    $attVal.Attribute.Name:
-
-    #if ($attVal.Attribute.AttributeType.Name == "combo-box" )
-          <font color="red">
-            #attrValueErrorMsg ( $attVal $field )
-          </font>
-          <br>
-          #attrValueSelect ($attVal $field "")
-    #else
-
-          <font color="red">
-            #attrValueErrorMsg ( $attVal $field )
-          </font>
-          <br>
-        #if ($attVal.Attribute.AttributeType.Name == "long-string" )        
-
-            <textarea name= "$attrInput.Value.Key" cols="40" 
-               rows="5">$!attrInput.Value</textarea>
-        #else
-
-           <input name= "$attrInput.Value.Key"
-                value="$!attrInput.Value" size="20" type="text">
-
-        #end
-<br><br>
-  #end
-#end
-
-<p>
-            <input type="submit" 
-                name="eventSubmit_doEnterissue" value="Submit Issue">
-
-$intake.declareGroups()
-</form>
-]]></source>
-
-<p>
-The main new thing added here is that the $intake group is mapped to a business
-object.  A business object that is to be used in this way is expected to
-implement the Retrievable interface, which provides a method to get a
-String key which uniquely identifies the object.  
-</p>
-<p>
-The action:
-</p>
-
-<source>
-public void doEnterissue( RunData data, Context context )
-    throws Exception
-{
-    IntakeTool intake = (IntakeTool)context
-        .get(ScarabConstants.INTAKE_TOOL);
-
-    // Summary is always required.
-    ScarabUser user = (ScarabUser)data.getUser();
-    Issue issue = user.getReportingIssue();
-    AttributeValue aval = (AttributeValue)issue
-        .getModuleAttributeValuesMap().get("SUMMARY");
-    Group group = intake.get("AttributeValue", aval.getQueryKey());
-    Field summary = group.get("Value");
-    summary.setRequired(true);
-    issue.setVocabulary(new Vocabulary(summary.toString()));
-
-    if ( intake.isAllValid() ) 
-    {
-        Iterator i = issue.getModuleAttributeValuesMap()
-            .values().iterator();
-        while (i.hasNext()) 
-        {
-            aval = (AttributeValue)i.next();
-            group = intake.get("AttributeValue", aval.getQueryKey());
-            if ( group != null ) 
-            {
-                group.setProperties(aval);
-            }                
-        }
-        
-        if ( issue.containsMinimumAttributeValues() ) 
-        {
-            issue.save();
-
-            String template = data.getParameters()
-                .getString(ScarabConstants.NEXT_TEMPLATE, 
-                           "entry,Wizard3.vm");
-            setTemplate(data, template);            
-        }
-    }
-}
-</source>
-
-<p>
-The action shows how the business object or action can let intake know if
-a field is required. It also shows how multiple groups of the same class
-can be added to a template and then the information is easily passed on
-to an associated bean.
-</p>
-
-
-<source><![CDATA[
-Dan Diephouse wrote:
-> 
-> I want to validate a form that updates my business object properties
-> with intake.  I got the latest cvs of turbine-2 repository and built a
-> new distribution of the turbine jar.  I can easily use intake to add
-> validate items I add to my databse, but I'm running in to a snag when
-> trying to modify them.  I've defined by business object in the intake
-> validation file.  I use the following code to update my item:
-> 
->          IntakeTool intake = (IntakeTool) context.get("intake");
-> 
->          ParameterParser pp = data.getParameters();
-> 
->          if ( intake.isAllValid() ) {
->              Job j = new Job();
->              j.setNew(false);
->              group.setProperties(j);
-> 
->              JobPeer.doUpdate(j);
-> 
-> Error-->    data.getParameters().add("jobid", j.getJobId().toString());
->              data.setMessage("Job updated.");
->          } else {
->              data.setMessage("There was an error updating the job.
-> Check below for further information.");
->          }
-> 
-> It runs OK, until I try and retrieve the JobId.  I get a Null Pointer
-> exception.  Is there something I'm doing wrong here?  Or is this a bug?
->   Do I need to specify that this is not a new object to intake?  I would
-> include my template, but there are lots of fields so its really long.
-> But here's a little summary with most fields gone:
-> 
-> #set ( $job = $basecamp.getJob() )   - This gets a job from a pull tool
-> #set ( $jobGroup = $intake.Job.mapTo($job) )
-> <input type=hidden name="$jobGroup.JobId.Key" 
-> value="$jobGroup.JobId.Value">
-> 
-> #if ( !$jobGroup.Title.isValid() )
-> $jobGroup.Title.Message<br>
-> #end
-> <input type=text name="$jobGroup.Title.Key"
-> value="$!jobGroup.Title.Value" size="50">
-> .
-> .
-> .
-> .
-> $intake.declareGroups()
-> 
-> Thanks,
-> 
-> Dan Diephouse
-
-This is not how i usually do things, but I guess it could work.  One
-thing that is wrong is that you are using mapTo(job) in the template and
-then in the action you are using IntakeTool.DEFAULT_KEY.  Unless
-job.getQueryKey() returns "_0", this combination is not going to work.
-Print out data.getParameters().toString() in the action to see what the
-parameters look like.
-
-Here is what I consider a normal course of events:
-
-1.  In the template:  
-
-$job = $foo.Job
-#set ( $jobGroup = $intake.Job.mapTo($job) )
-
-(This job is can be a new Job or one that is already saved.)
-
-2. In the action:
-
-// get the same (not necessarilary the same java Object, but has the
-exact same attribute values) job
-Job job = foo.getJob()
-Group group = intake.get("Job", job.getQueryKey());
-group.setProperties(job);
-
-It appears as though you are trying to map the parameters given for one
-job to another job.
-
-john mcnally
-]]></source>
-
-  </section>
-
-  <section name="Default Values for fields">
-
-<p>
-If you want to use input fields which should default to non-empty values for,
-new objects, you can use the defaultValue field:
-</p>
-
-<source><![CDATA[
-<group name="test" key="test">
-    <field name="Value" key="val" type="String" defaultValue="preset">
-    </field>
-</group>
-]]></source>
-
-<p>If you set up a form like this:</p>
-
-<source><![CDATA[
-#if($!dz)
-#set ($frm = $intake.test.mapTo($t))
-$frm.Mode.
-#else
-#set ($frm = $intake.test.default )
-#end
-
-<FORM NAME="entryForm">
-<INPUT type="text" name="$frm.get("val").Key" value="$!frm.get("val")">
-</FORM>
-]]></source>
-
-<p>
-then you can either map your form to the fields of the $t object or to the default values, which, for
-the val Field is the string 'preset'.
-</p>
-
-</section>
-
-<section name="Empty fields">
-<p>
-Sometimes you have form fields which are not required (can be left
-empty) but should be mapped onto a non null value in your bean. This
-is especially true if you use string fields in conjunction with
-"required" columns in a database. For this case, you can preset an
-"empty" value for each field which is used if a field is missing or
-empty in the form parameters returned by the browser. If you don't set
-this, the default is "null".
-</p>
-
-<source><![CDATA[
-<group name="test" key="test">
-    <field name="Value" key="val" type="String" emptyValue=""/>
-</group>
-]]></source>
-
-<p>This would return the empty String (not a null value) for the "val" field
-if the user does not enter anything. Without the emptyValue parameter, intake
-would assign the null value to the bean field.</p>
-
-</section>
-
- </body>
-
-</document>
diff --git a/xdocs/services/jsp-service.xml b/xdocs/services/jsp-service.xml
deleted file mode 100644
index e7812b9..0000000
--- a/xdocs/services/jsp-service.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - JSP Service</title>
- </properties>
-
-<body>
-
-<section name="JSP Service">
-
-<p>
-Turbine supports the use of JSP internally through a Service which
-provides JSP related Modules with access to the JSP engine directly. We
-have another document which gives a <a
-href="../howto/jsp-howto.html">howto</a> on configuration of Turbine to
-use JSP.
-</p>
-
-<p>
-While Turbine supports the use of many templating systems, we definitely
-have our favorite system to use and recommend and that is <a
-href="http://jakarta.apache.org/velocity/">Velocity</a>.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.JspService.classname=org.apache.turbine.services.jsp.TurbineJspService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  J S P  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.JspService.template.extension=jsp
-services.JspService.default.page = JspPage
-services.JspService.default.screen=BaseJspScreen
-services.JspService.default.layout = JspLayout
-services.JspService.default.navigation=BaseJspNavigation
-services.JspService.default.error.screen = JspErrorScreen
-services.JspService.default.layout.template = /Default.jsp
-
-services.JspService.templates = /templates/app
-services.JspService.buffer.size = 8192
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-Please refer to the org.apache.turbine.services.jsp classes for details
-on how to use this service.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/localization-service.xml b/xdocs/services/localization-service.xml
deleted file mode 100644
index 212cb21..0000000
--- a/xdocs/services/localization-service.xml
+++ /dev/null
@@ -1,69 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Tools - Localization Pull Tool</title>
- </properties>
-
-<body>
-
-<section name="Localization Tool">
-
-<p>
-This is a tool the provides access to the <a href="http://jakarta.apache.org/turbine/fulcrum/multiproject/fulcrum-localization/index.html">Fulcrum Localization</a> component.
-This makes it easy to use the Localization Component.  For more uses, you can also directly load up the component.  See the LocalizationToolTest for 
-sample code.
-</p>
-
-</section>
-
-<section name="Usage">
-
-
-<source><![CDATA[
-localizationTool = (LocalizationTool)context.get("l10n");
-localizationTool.getString("DISPLAYPROJECTS_TITLE");
-
-]]></source>
-
-<p>
-This is an example of using the localization pull tool.
-</p>
-
-<p>
-This has the added effect of using the Accept-Language HTTP header to determine
-which language to display based on what setting the user has defined in
-the browser. Can you say Dynamic Localization? ;-)
-</p>
-
-<p>
-For creating the file where you get the value of the String, please
-see the <em>java.util.ListResourceBundle</em> and
-<em>java.util.ResourceBundle</em> classes for more information.
-<a href="http://java.apache.org/jyve/">Jyve</a> also contains example usage
-of this code because that was the first place where this code was originally
-developed.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/logging-service.xml b/xdocs/services/logging-service.xml
deleted file mode 100644
index c22aece..0000000
--- a/xdocs/services/logging-service.xml
+++ /dev/null
@@ -1,195 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Logging Service</title>
- </properties>
-
-<body>
-
-<section name="Logging Service">
-
-<p>
-Turbine's logging service is exceptionally powerful. And it was
-proprietary. So we ripped it out post Turbine 2.2 and replaced it with
-<a href="http://jakarta.apache.org/commons/logging">commons-logging</a>
- backed by <a href="http://jakarta.apache.org/log4j/">Log4j</a>. You
-configure the new logging with a Log4j.properties file which can be
-configured with the log4j.file property in TurbineResource.properties:
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  L O G 4 J - L O G G I N G
-#
-# -------------------------------------------------------------------
-
-log4j.file = /WEB-INF/conf/Log4j.properties
-]]></source>
-
-</section>
-
-<section name="Log4j Configuration">
-
-<p>
-To use the Logging system, all you need to do is configure some
-loggers in your Log4j.properties. This is an example how to do it:
-</p>
-
-<source><![CDATA[
-# ------------------------------------------------------------------------
-#
-# Logging Configuration
-#
-# $Id$
-#
-# ------------------------------------------------------------------------
-
-#
-# If we don't know the logging facility, put it into the
-# turbine.log
-#
-log4j.rootLogger = INFO, turbine
-
-#
-# Turbine goes into Turbine Log
-#
-log4j.category.org.apache.turbine = INFO, turbine
-log4j.additivity.org.apache.turbine = false
-
-#
-# Torque has its own log file
-#
-log4j.category.org.apache.torque = INFO, torque
-log4j.additivity.org.apache.torque = false
-
-#
-# Velocity Logfile
-#
-log4j.category.velocity = INFO, velocity
-log4j.additivity.velocity = false
-
-#
-# Scheduler Category
-#
-log4j.category.scheduler = INFO, scheduler
-log4j.additivity.scheduler = false
-
-########################################################################
-#
-# Logfile definitions
-#
-########################################################################
-
-#
-# turbine.log
-#
-log4j.appender.turbine = org.apache.log4j.FileAppender
-log4j.appender.turbine.file = ${applicationRoot}/logs/turbine.log
-log4j.appender.turbine.layout = org.apache.log4j.PatternLayout
-log4j.appender.turbine.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.turbine.append = false
-
-#
-# torque.log
-# 
-log4j.appender.torque = org.apache.log4j.FileAppender
-log4j.appender.torque.file = ${applicationRoot}/logs/torque.log
-log4j.appender.torque.layout = org.apache.log4j.PatternLayout
-log4j.appender.torque.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.torque.append = false
-
-#
-# Scheduler Output
-#
-log4j.appender.scheduler = org.apache.log4j.FileAppender
-log4j.appender.scheduler.file = ${applicationRoot}/logs/scheduler.log
-log4j.appender.scheduler.layout = org.apache.log4j.PatternLayout
-log4j.appender.scheduler.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.scheduler.append = false
-
-#
-# Velocity gets configured to write its output onto the velocity
-# category.
-#
-log4j.appender.velocity = org.apache.log4j.FileAppender
-log4j.appender.velocity.file = ${applicationRoot}/logs/velocity.log
-log4j.appender.velocity.layout = org.apache.log4j.PatternLayout
-log4j.appender.velocity.layout.conversionPattern = %d [%t] %-5p %c - %m%n
-log4j.appender.velocity.append = false
-]]></source>
-
-<p>
-Sub Projects like Torque and Velocity get either configured correctly
-by their Services (Velocity by the VelocityService) or already know
-about commons-logging (Torque). 
-</p>
-
-</section>
-
-<section name="Usage">
-
-<p>
-You use the logging by accessing it via commons-logging. This is an
-example how to do it.
-</p>
-
-<source><![CDATA[
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-// Provide a logger with the class name as category. This
-// is recommended because you can split your log files
-// by packages in the Log4j.properties. You can provide
-// any other category name here, though.
-private Log log = LogFactory.getLog(this.getClass());
-
-log.info("this message would go to any facility configured to use the " + this.getClass().getName() + " Facility");
-]]></source>
-
-<p>
-It is recommended for performance reasons that you provide a class wide logger like this:
-</p>
-
-<source><![CDATA[
-package foo;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-public class Bar
-{
-    // Classwide static logger
-    private static Log log = LogFactory.getLog(Bar.class);
-.
-.
-.
-}
-]]></source>
-
-</section>
-</body>
-</document>
diff --git a/xdocs/services/mimetype-service.xml b/xdocs/services/mimetype-service.xml
deleted file mode 100644
index f031343..0000000
--- a/xdocs/services/mimetype-service.xml
+++ /dev/null
@@ -1,152 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Mimetype Service</title>
- </properties>
-
-<body>
-
-<section name="Mimetype Service">
-
-<p>
-The MimeType Service maintains mappings between MIME types and
-the corresponding file name extensions, and between locales and
-character encodings. The mappings are typically defined in
-properties or files located in user's home directory, Java home
-directory or the current class jar depending on the implementation.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.MimeTypeService.classname=org.apache.turbine.services.mimetype.TurbineMimeTypeService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  M I M E T Y P E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# This property specifies a file containing mappings between MIME 
-# content types and the corresponding file name extensions. The
-# service itself contains a hardcoded set of most common mappings. 
-# The file must use the same syntax as the mime.types file of 
-# the Apache Server, i.e. 
-# <mimetype> <ext1> <ext2>...
-#
-#services.MimeTypeService.mime.types=/WEB-INF/conf/mime.types
-
-# This property specifies a file containing mappings between locales 
-# and the corresponding character encodings. The service itself 
-# contains a hardcoded set of most common mappings. 
-# The file should use the Java property file syntax, i.e. 
-# <lang_country_variant>=<charset>
-#
-#services.MimeTypeService.charsets=/WEB-INF/conf/charset.properties
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-The default RunData implementation uses the MimeType Service internally
-when resolving the character encoding of the servlet response. In addition,
-applications can use it for customized encoding and content type resolving.
-</p>
-
-<p>
-The mappings between locales and the corresponding character encodings
-are specified using the Java property file syntax, where the locale 
-specification is the key of the property key and the charset is the value
-of the property. The locale specification consists of three parts:
-</p>
-
-<source><![CDATA[
-<lang>_<country>_<variant>
-]]></source>
-
-<p>
-The variant can be whatever is appropriate for the application, like a
-markup language specification, a browser specification, etc. The service 
-looks for charsets using the following search order:
-</p>
-
-<source><![CDATA[
-<lang>_<country>_<variant>=<charset>
-_<country>_<variant>=<charset>
-<lang>__<variant>=<charset>
-__<variant>=<charset>
-<lang>_<country>=<charset>
-_<country>=<charset>
-<lang>=<charset>
-]]></source>
-
-<p>
-The service contains defaults for several language mappings and more specific
-ones can be specified in an optional property file, e.g. __wml=UTF-8. The name
-of the property file can be given with a service property named "charsets". 
-The service caches results of the search, which should guarantee good performance.
-</p>
-
-<p>
-The mappings between MIME types and the corresponding file name extensions
-are specified using the same syntax as the mime.types file of the Apache Server,
-i.e.: 
-</p>
-
-<source><![CDATA[
-<mimetype> <ext1> <ext2>...
-]]></source>
-
-<p>
-The service contains defaults for most common MIME types, like text/plain, 
-text/html, text/x-hdml, text/vnd.wap.wml, image/gif and image/jpeg. More
-specific ones can be specified in an optional MIME types file. The name of
-the MIME types file can be given with a service property named "mime.types".
-</p>
-
-<p>
-The TurbineMimeTypes class is a static accessor for the most common 
-MimeType Service methods.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/naming-service.xml b/xdocs/services/naming-service.xml
deleted file mode 100644
index 741d8d5..0000000
--- a/xdocs/services/naming-service.xml
+++ /dev/null
@@ -1,94 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Naming Service</title>
- </properties>
-
-<body>
-
-<section name="Naming Service">
-
-<p>
-The Naming Service provides access to JNDI contexts. Please note that if
-you are using Tomcat as your servlet engine and you get errors about
-sealing violations, you may need to read <a
-href="../howto/jboss-howto.html">this document</a>.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.NamingService.classname=org.apache.turbine.services.naming.TurbineNamingService
-.
-.
-.
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<source><![CDATA[
-try
-{
-    // Set up the naming provider. This may not always be necessary,
-    // depending on how your Java system is configured.
-    System.setProperty("java.naming.factory.initial",
-      "org.jnp.interfaces.NamingContextFactory");
-    System.setProperty("java.naming.provider.url",
-      "localhost:1099");
-    // Get a naming context
-    InitialContext jndiContext = new InitialContext();
-
-    // Get a reference to the Interest Bean
-    Object ref = jndiContext.lookup("interest/Interest");
-
-    // Get a reference from this to the Bean's Home interface
-    InterestHome home = (InterestHome)
-        PortableRemoteObject.narrow (ref, InterestHome.class);
-
-    // Create an Interest object from the Home interface
-    m_interest = home.create();
-}
-catch(Exception e)
-{
-    out.println("<LI>Context failed: " + e);
-}
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/pool-service.xml b/xdocs/services/pool-service.xml
deleted file mode 100644
index 8f457fd..0000000
--- a/xdocs/services/pool-service.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Pool Service</title>
- </properties>
-
-<body>
-
-<section name="Pool Service">
-
-<p>
-The Pool Service extends the functionality of the Factory Service by adding 
-support for pooling objects intantiated from the given class name or
-Class object reference. Pooling of objects stabilizes memory consumption and 
-reduces garbage collection making response times in server applications 
-more predictable.
-</p>
-
-<p>
-When a new instance is requested from the service, it first checks its pool 
-if one is available. If the the pool is empty, a new object will be instantiated 
-from the given class. If the class is specified by its name, the request to create 
-an instance will be forwarded to the Factory Service.
-</p>
-
-<p>
-For pooled objects implementing the Recyclable interface, a recycle method 
-will be called, when they are taken from the pool, and a dispose method, 
-when they are returned to the pool. Implementations of the methods should 
-clear and initialize the pooled instances correspondingly. Objects 
-that do not implement the interface can also be pooled, if they do not 
-need to perform any specific actions during pooling. A RecyclableSupport class 
-can be extended to get a minimal implementation of the interface.
-</p>
-
-<p>
-An ArrayCtorRecyclable interface extends the Recyclable interface providing
-a more efficient recycle method with less reflection for recycling frequently
-used objects having constuctors with parameters.   
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.PoolService.classname=org.apache.turbine.services.pool.TurbinePoolService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  P O O L  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Default capacity of pools of the Object pooling service.
-#
-# Default: 128
-services.PoolService.pool.capacity = 128
-
-# Class specific capacities used instead of the default if specified.
-#
-#services.PoolService.pool.capacity.org.apache.turbine.services.rundata.DefaultTurbineRunData=512
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-The Pool Service can be called instead of the Factory Service, when instantiating
-objects that are needed repeatedly e.g. for processing client requests. Intances
-of RunData implementations, ParameterParser and CookieParser implementations, 
-Pull Service tools, etc, are typical examples of pooled objects. Used objects
-must be returned to the Pool Service for recycling. The TurbinePool class is a 
-static accessor for common methods of the Pool Service:
-</p>
-
-<source><![CDATA[
-// Get a pooled DOM parser.
-DocumentBuilder parser = 
-    TurbinePool.getInstance("javax.xml.parsers.DocumentBuilder");
-        
-// Parse an XML document.
-Document doc = parser.parse(myfile);
-
-// Return the parser to the pool.
-TurbinePool.putInstance(parser);    
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/pull-service.xml b/xdocs/services/pull-service.xml
deleted file mode 100644
index 0662aa0..0000000
--- a/xdocs/services/pull-service.xml
+++ /dev/null
@@ -1,232 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Pull Service</title>
- </properties>
-
-<body>
-
-<section name="Pull Service">
-
-<p>
-The Pull service places tool objects in the Velocity context for use by
-template engineers. It can handle tools with various different "scopes",
-namely:
-
-<ul>
-<li>
-request-scope tools for which a new instance is needed for each
-request.
-</li>
-
-<li>global-scope tools for which a single instance can serve the
-entire application.
-</li>
-
-<li>
-session-scope tools which are persisted as part of 
-the user object in the servlet engine provided session object.
-</li>
-
-<li>
-persistent-scope tools which are persisted as part of the user's
-serialized object data.
-</li>
-</ul>
-
-</p>
-
-<p>
-The service must be enabled in TurbineResources.properties as shown
-below, and tools are listed there. The default properties file lists
-some request-scope tools that are needed for basic Turbine usage
-($page, $link and $content), plus the useful UIManager global tool.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.PullService.classname=org.apache.turbine.services.pull.TurbinePullService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-# This determines whether the non-request tools are refreshed 
-# on each request (request tools aren't ever, because they're
-# instantiated for the request only anyway).
-services.PullService.tools.per.request.refresh=true
-
-# These are tools that are placed in the context by the service
-# These tools will be made available to all your
-# templates. You list the tools in the following way:
-#
-# tool.<scope>.<id> = <classname>
-#
-# <scope>      is the tool scope: global, request, session,
-#              authorized or persistent (see below for more details)
-# <id>         is the name of the tool in the context
-#
-# For example:
-#
-# tool.global.ui    = org.apache.turbine.util.pull.UIManager
-# tool.global.mm    = org.apache.turbine.util.pull.MessageManager
-# tool.request.link = org.apache.turbine.services.pull.tools.TemplateLink
-# tool.request.page = org.apache.turbine.util.template.TemplatePageAttributes
-#
-# (the next two examples specify mythical classes) 
-#
-# tool.session.basket = org.sample.tools.ShoppingBasket
-# tool.persistent.ui  = org.sample.tools.PersistentUIManager
-#
-#
-# Tools are accessible in all templates by the <id> given
-# to the tool. So for the above listings the UIManager would
-# be available as $ui, the MessageManager as $mm, the TemplateLink
-# as $link and the TemplatePageAttributes as $page.
-#
-# Scopes:
-#
-#   global:    tool is instantiated once and that instance is available
-#              to all templates for all requests. Tool must be threadsafe.
-#
-#   request:    tool is instantiated once for each request (although the
-#               PoolService is used to recycle instances). Tool need not
-#               be threadsafe.
-#
-#   session:    tool is instantiated once for each user session, and is
-#               stored in the user's temporary hashtable. Tool should be 
-#               threadsafe.
-#
-# authorized: tool is instantiated once for each user session once the
-#             user logs in. After this, it is a normal session tool.
-#
-# persistent: tool is instantitated once for each user session once
-#             the user logs in and is is stored in the user's permanent 
-#             hashtable. 
-#             This means for a logged in user the tool will be persisted
-#             in the user's objectdata. Tool should be threadsafe and
-#             Serializable.
-#
-# Defaults: none
-
-tool.request.link=org.apache.turbine.services.pull.tools.TemplateLink
-tool.request.page=org.apache.turbine.util.template.TemplatePageAttributes
-tool.request.content=org.apache.turbine.services.pull.tools.ContentTool
-#tool.request.om=org.apache.turbine.om.OMTool
-#tool.request.intake=org.apache.turbine.services.intake.IntakeTool
-
-tool.global.ui=org.apache.turbine.services.pull.util.UIManager
-
-# The UI Manager will allow you to skin your Turbine
-# application using simple properties files that are
-# located in the WEBAPP/resources/ui/skins/ directory
-# hierarchy.
-
-tool.ui.skin=default
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-The first step in use of the pull service is deciding on a useful 
-tool API for an object that is available to templates in the 
-Velocity context. This could range from something as simple as
-the generation of URIs ($link and $content) to a tool for retrieving
-details of the user's current shopping basket. Define a set of 
-public methods for the tool and they will be available through
-standard Velocity introspection.
-</p>
-
-<p>
-The next step is to decide what scope you need to give the tool.
-If the tool is retrieving global data in a threadsafe manner, you
-can make the tool global. If the tool holds data specific to the
-user look at the session, authorized  and persistent scopes 
-(choose persistent for a convenient way of having the tools fields 
-persisted across sessions for logged in users). If the tool needs to 
-be instantiated on each request to fulfill its function, or is not
-threadsafe, then the request scope will be appropriate.
-</p>
-
-<p>
-Tools can implement the org.apache.turbine.services.pull.ApplicationTool
-or the org.apache.turbine.services.pull.RunDataApplicationTool
-interface. This will provide a hook for the service to initialise them
-through the 'init' method and, except for request scope tools, to be
-refreshed through the 'refresh' method. The type of the init argument 
-'data' (declared as type 'Object') depends on the scope of the tool. 
-For global tools the argument will be null; for session and persistent 
-scope tools, 'data' will be the current User object; and for request
-scope tools 'data' will be the current RunData instance.
-</p>
-
-<p>
-If you activate the RefreshToolsPerRequest property, every tool is
-refreshed on each request. On Request Tools this makes no difference,
-because here, the refresh() is never called (they're instantiated on
-every request).  All other scopes get a call to refresh() on every
-request. If you chose to implement the RunDataApplicationTool interface,
-you get the current RunData object passed to your tool.
-</p>
-
-<p>
-Important note: request scope tools are recycled by the PoolService. 
-This means they must be written to be reused. This usually means 
-implementing the ApplicationTool interface, and having the 'init' 
-implementation reset all fields.
-</p> 
-
-<p>
-Current examples of tools include the afore mentioned $link, $page and
-$content objects, the $ui UI manager, the Intake service tool 
-(org.apache.turbine.services.intake.IntakeTool) and the OM tool
-(org.apache.turbine.om.OMTool).
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/resources-service.xml b/xdocs/services/resources-service.xml
deleted file mode 100644
index a15c1d9..0000000
--- a/xdocs/services/resources-service.xml
+++ /dev/null
@@ -1,105 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Resources Service</title>
- </properties>
-
-<body>
-
-<section name="Resources Service">
-
-<p>
-Within Turbine was a service for reading and accessing data in Property
-files. The classes that accomplish this have been borrowed from the
-Apache JServ project, moved many time and finally ended up in the <a
-href="http://jakarta.apache.org/commons/sandbox/configuration">commons-configuration</a>
- sub-project. So we removed the Service itself and now use commons-configuration everywhere.
-</p>
-
-</section>
-
-<section name="Configuring Turbine">
-
-<p>
-Turbine gets its configuration file from the servlet container at
-startup time. It is necessary to have an init parameter in the
-servlet section of your web.xml file:
-</p>
-
-<source><![CDATA[
-<init-param>
-    <param-name>properties</param-name>
-    <!-- This is relative to the docBase -->
-    <param-value>
-        /WEB-INF/conf/TurbineResources.properties
-    </param-value>
-</init-param>
-]]></source>
-
-</section>
-
-<section name="Accessing properties">
-
-<p>
-Turbine post-2.2 uses commons-configuration all over the place, so if
-you want to access properties files, you can use it in two ways.
-</p>
-
-<p>
-Inside arbitrary code:
-</p>
-
-<source><![CDATA[
-import org.apache.commons.configuration.Configuration;
-import org.apache.turbine.Turbine;
-
-//
-// Access all properties from TurbineResource.properties
-Configuration conf = Turbine.getConfiguration();
-
-String myProperty = conf.getString("this.is.my.property");
-]]></source>
-
-<p>
-Inside a service, you can easily access the already subclassed
-property object for your service (that is, with the services.&lt;your service name&gt;
-stripped away from the property:
-</p>
-
-<source><![CDATA[
-public class myService extends TurbineBaseService
-{
-.
-.
-.
-    Configuration conf = getConfiguration();
-    String myProp = conf.getString("my.property"); // services.myService.my.property
-.
-.
-.
-}
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/rundata-service.xml b/xdocs/services/rundata-service.xml
deleted file mode 100644
index ae2a3a1..0000000
--- a/xdocs/services/rundata-service.xml
+++ /dev/null
@@ -1,451 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - RunData Service</title>
- </properties>
-
-<body>
-
-<section name="RunData Service">
-
-<p>
-RunData is an interface that is passed around within Turbine. RunData
-provides the threading mechanism, as there is one RunData object per
-HTTP request. The RunData service manages the isues surrounding multiple
-requests being accepted. TurbineRunData is the interface that is
-specific to the Turbine RunData service, and via the recyclable
-interface can be sent back to the Factory for recycling.
-</p>
-
-<p>
-RunData objects should never be held on to across requests. They are
-considered one time only objects.
-</p>
-
-<p>
-All this higher level processing by the service means that for each HTTP
-request there is an interface that is castable to, or available, that
-can be used to access all information to do with that request. As an
-example, information such as the content type of the request and the
-response can be queried or sent, as well as other information
-surrounding servlet HTTP management, such as Sessions, PrintWriters as
-well as Turbine specific information such as Users, AccessControlLists,
-Templating, Error Handling and Contexts.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<p>
-In the TurbineResources.properties the service needs to be defined for
-Turbine to initialize with.
-</p>
-
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.TurbineRunDataService.classname=org.apache.turbine.services.rundata.TurbineRunDataService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  R U N   D A T A   S E R V I C E
-#
-# -------------------------------------------------------------------
-# Default implementations of base interfaces for request processing.
-# Additional configurations can be defined by using other keys
-# in the place of the <default> key.  
-# -------------------------------------------------------------------
-
-services.RunDataService.default.run.data=org.apache.turbine.services.rundata.DefaultTurbineRunData
-services.RunDataService.default.parameter.parser=org.apache.turbine.util.parser.DefaultParameterParser
-services.RunDataService.default.cookie.parser=org.apache.turbine.util.parser.DefaultCookieParser
-]]></source>
-
-</section>
-
-<section name="Using RunData">
-
-<p>
-As RunData encapsulates all aspects of Turbine's gathering the
-HttpRequest and sending the HttpResponse, any status to do with the
-Request can be queried and any manipulation of the final response can be
-carried out through the RunData Object.
-</p>
-
-<p>
-Turbine is a servlet and the functionality equated with the
-javax.servlet and javax.servlet.http can be manipulated through the
-RunData interface. One of the most useful components of the Servlet
-libraries was Sessions. These are accessed through RunData; it also
-provides direct access to the PrintWriter, Server details, Content
-Types, ContextPath, Redirections, Client details, etc. Some of the
-functions which equate with the servlet libraries are:
-</p>
-
-<source><![CDATA[
-getLocale()
-setLocale(Locale locale)
-getCharSet()
-setCharSet(String charset)
-getContentType()
-setContentType(String mimetype)
-getOut()  //get PrintWriter Object
-getRedirectURI()
-getRemoteAddr()
-getRemoteHost()
-getRequest()
-getResponse()
-getServletContext()
-getSession()
-getStatusCode()  
-]]></source>
-
-<p>
-The get/setLocale(), get/setCharSet() and get/setContentType() methods
-are used for specifying the locale, character encoding and content type
-of the body of the servlet response.
-</p>
-
-<p>
-The method setLocale() is called to specify explicitly the locale 
-of the response. If setLocale() is not called, the "locale.default.language"
-and "locale.default.country" properties from Turbine Resources are used to
-determine the locale. If these properties are not set, the JVM's default
-locale determines the locale.
-</p>
-
-<p>
-If the locale is set to something else than the default locale or Locale.US,
-an explicit encoding is not specified with the setCharSet() method or the
-"locale.default.charset" property, and the main MIME type of the content is
-"text", the getContentType() method adds a locale specific encoding (charset) 
-to the content type automatically.
-</p>
-
-<p>
-The locale specific charset is obtained from the MimeTypeService, which
-maintains mappings between locales and charsets.
-</p>
-
-<p>
-As always consult the Javadocs for more detail.
-</p>
-
-<p>
-To use Turbine to only manipulate the functions that came with the Sun
-Servlet libraries is to miss out on Turbine's power. Turbine is a
-framework which enables manipulation of the HttpResponse and HttpRequest
-above and beyond the simple Servlet libraries. Turbine has services and
-layers surrounding those available with the Response and Request that
-allow easier creation and management of Websites and Web-enabled
-Applications. In fact you wont have to type import javax.servlet.*
-again!
-</p>
-
-</section>
-
-<section name="Session Management">
-<p>
-Sessions are managed in Turbine via the User interface. The User
-interface allows for a blend of cookie management, memory management and
-relational database to be used to manage a user's session. A user of the
-site can have their Turbine session set as either temporary storage or
-permanent storage. The permanent storage will survive a servlet engine
-restart. How all this is managed by Turbine is transparent to the Java
-Engineer. As an example assume we want to monitor how often a user
-returns to the website we are developing and we want to reward them for
-their returning interaction:
-</p>
-
-<source><![CDATA[
-//in Login Action class
-public void doPerform(RunData data, Context context) 
-    throws Exception
-{
-    //get the Parameters, username and password
-    ParameterParser params = data.getParameters();
-    String loginname = params.getString("username");
-    String password = params.getString("password");
-
-    try
-    {
-        //cast to TurbineUser interface
-        //and check if user is in system
-        TurbineUser user = (TurbineUser)
-                             TurbineSecurity
-                              .getAuthenticatedUser(loginname, password);
-
-        //put User into Session 
-        data.setUser(user);
-
-        //mark the User as logged in
-        user.setHasLoggedIn(new Boolean(true));
-
-        //add to the access counter
-        user.incrementAccessCounter();
-
-        //add to the access counter for the session
-        user.incrementAccessCounterForSession();
- 
-        //check to see if user is to have
-        //their status changed to valued
-        if(user.getAccessCounter() > 500 )
-        {
-            //set into persistant storage
-            //that our visitor is now a 
-            //valued user
-            user.setPerm("valued", new Boolean(true));
-        }
-
-        data.save();
-    }
-    catch (Exception e)
-    {
-        //error handling
-    }
-}
-]]></source>
-
-<p>
-While skeletal this shows a good example of permanent and temporary
-management of User information. The line data.setUser() puts the User
-into session, the hasLoggedIn() method updates the User Object to
-reflect the fact that the session has passed Authentication; however
-until the RunData's save method is called both the User and hasLoggedIn
-flag are only existing in Turbine's memory. Neither become a part of
-RunData's HttpSession until they are saved into the session through
-data.save(). The AccessCounter is persistent storage and is saved into
-the database. The AccessCounter for the session counts the number of
-pages that are requested throgh Turbine for the user's session. Once
-their session logs out or the session times out, that information is
-lost. The user.setPerm() method allows for information to be stored
-persistently into the database as a HashTable entry. The example above
-was intended to show that information can be handled through a
-consistent interface allowing for the management at the
-request/response, session and persistent levels without any direct
-manipulation of the HttpRequest, HttpResponse, HttpSession or Relational
-database. As always, refer to the Javadocs for more information on the
-RunData, User and TurbineUser interfaces.
-</p>
-
-</section>
-
-<section name="Parameter and Cookie Parsing">
-<p>
-One of the most useful parts of the RunData interface is the easy
-retrieval of parameters attached to a request. The ParameterParser and
-CookieParser Interfaces are available through the RunData interface and
-provide convenience methods for gathering parameters from either the URI
-or Session. Turbine handles parameters as name/value pairs through the
-URI via the BaseValueParser object, allowing the parameters to be
-requested as a Java type rather than a catch-all:
-</p>
-
-<source><![CDATA[
-/** the doPerform method from Invoice.java Action class */
-public void doPerform(RunData data, Context context) throws Exception
-{
-    //get parameters
-    ParameterParser params = data.getParameters();
-
-    /**
-     * Where "units" is the HTML Input Form name
-     */
-    int units = params.getInt("units");  
-
-    /**
-     * Get the description, if there is no entry from the
-     * HTML input form, set the default as "No Description". 
-     */
-    String description = params.getString("description","No Description");
-
-    /**
-     * If there is no total, set the value to 0.
-     */
-    BigDecimal total = params.getBigDecimal("total",new BigDecimal(0));
-}
-]]></source>
-
-<p>
-The above example shows gathering of name/value pairs from HTML Form
-Inputs and setting default values for those forms. In the case of
-description, if the description is null, then the default value "No
-Description" will be substituted. The Javadocs for ParameterParser show
-more information on the methods available.
-</p>
-
-</section>
-
-<section name="Security Management">
-
-<p>
-The RunData interface also exposes security management methods and
-information which are encapsulated into a request. The RunData interface
-exposes the AccessControlList Object, which encapsulates the Permissions
-and Roles for the Groups the User is in. The getACL() method allows for
-the permission of the User to be queried against their ACL.
-</p>
-
-<source><![CDATA[
-/** the doPerform method from DeleteInvoice.java Action class */
-public void doPerform(RunData data, Context context) throws Exception
-{
-    //check if the User is authorized before
-    //deleting the invoice
-    AccessControlList acl =  data.getACL();
-    if(acl.hasPermission("deleteinvoice"))
-    {
-        //delete invoice logic
-    }
-    else
-    {
-        data.setMessage("You do not have permission to delete an invoice.");
-        data.setTemplate(data, "UnauthorizedRequest.vm");
-    }
-}
-]]></source>
-
-<p>
-The above example gets the AccessControlList Object for the User through
-the RunData interface. The ACL is used to check against the Permissions
-the User has, the PermissionSet, or a list of all permissions the User
-has, most likely taken from a database. In this example, the check is
-against the string "deleteinvoice". If the User has the permission, they
-will be able to delete the invoice, otherwise the User will get an
-unauthorized request Velocity screen.
-</p>
-
-</section>
-
-<section name="Template Management">
-
-<p>
-The RunData also exposes methods to manipulate Screens, Actions, Pages
-and Layouts. The templating service assembles the screens, actions and
-layouts as well as exposing template methods. The methods for managing
-screens and actions includes:
-</p>
-
-<source><![CDATA[
-getAction()
-getLayout()
-getLayoutTemplate()
-getScreen()
-getTemplateInfo()  //returns TemplateInfo Object
-hasAction()
-hasScreen()
-setAction()
-setLayout()
-setLayoutTemplate()
-setScreen()
-setScreenTemplate()    
-]]></source>
-
-<p>
-For more information on how to use the RunData Interface with Velocity
-templates and the Velocity context, view the Velocity Site
-documentation.
-</p>
-
-</section>
-
-<section name="Messaging">
-
-<p>
-One of the other useful wrappers the RunData interface provides access
-to is messaging. The Message can be set as a String, an ECS Element or
-as a FormMessages object. RunData contains access to other convenience
-methods to do with Messaging such as:
-</p>
-
-<source><![CDATA[
-addMessage(Element msg)
-addMessage(String msg)
-hasMessage()    //if the request has a message
-getMessage()
-getMessageAsHTML()
-getMessages()   //returns a FormMessages Object
-setMessage(String msg)
-setMessage(Element msg)
-setMessage(FormMessages msgs)  
-]]></source>
-
-<p>
-An example of using messages with Velocity templates in an action is
-below:
-</p>
-
-<source><![CDATA[
-/** the doPerform method from Invoice.java Action class */
-public void doPerform(RunData data, Context context) throws Exception
-{
-    data.setMessage("A message for output.");
-    data.setTemplate(data, "Test.vm");
-}
-]]></source>
-
-<p>
-This would be accessed in the Velocity template via:
-</p>
-
-<source><![CDATA[
-#*
-    Velocity file, Test.vm, showing messaging example.
-*#
-
-$data.getMessage()
-]]></source>
-
-<p>
-And the output would be:
-</p>
-
-<source><![CDATA[
-A message for output.
-]]></source>
-
-<p>
-The Javadocs for RunData show all the methods available through the
-interface and is definitely the place to start when looking for more
-information on what RunData exposes. The RunData interface is one of the
-most important areas for a Java Engineer to understand and be familiar
-within the Turbine Framework. Understanding RunData is of continual
-benefit.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/scheduler-service.xml b/xdocs/services/scheduler-service.xml
deleted file mode 100644
index cfcfbc5..0000000
--- a/xdocs/services/scheduler-service.xml
+++ /dev/null
@@ -1,360 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Scheduler Service</title>
- </properties>
-
-<body>
-
-<section name="Scheduler Service">
-
-<p>
-    The Scheduler is modeled after Unix Cron. The Scheduler runs as a background
-    process that executes timed scheduled tasks independently of HTTP requests.
-    Tasks are stored in the database in the TURBINE_SCHEDULED_JOB table and once
-    entered in the database are loaded automatically when Turbine initializes.
-</p>
-
-<p>
-    For the Scheduler to load classes that extend the ScheduledJob Class,
-    the scheduler needs to be enabled via the TurbineResources.properties
-    file, where the directive services.SchedulerService.enabled needs to be
-    set to true.
-</p>
-
-<p>
-    The Scheduler Service should be accessed in one of two ways.
-    <ul>
-        <li>
-            org.apache.turbine.services.schedule.TurbineScheduler - This class
-            provides static methods to access the scheduler service.  This is the
-            preferred method of access from within java code.
-        </li>
-        <li>
-            org.apache.turbine.services.schedule.SchedulerTool - This is a pull
-            tool for providing access to the scheduler service from within a
-            Velocity template.
-        </li>
-    </ul>
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.SchedulerService.classname=org.apache.turbine.services.schedule.TurbineSchedulerService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  S C H E D U L E R  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# Set enabled to true to start the scheduler.  The scheduler can be
-# stopped and started after Turbine has been intialized.  See the
-# javadocs for org.apache.turbine.services.schedule.TurbineScheduler
-# for the methods calls.
-#
-# Default = false
-#
-
-services.SchedulerService.enabled=false
-
-# Determines if the scheduler service should be initialized early.  This
-# Should always be set to true!!!!
-
-services.SchedulerService.earlyInit=true
-
-# -------------------------------------------------------------------
-#
-#  P U L L  S E R V I C E
-#
-# -------------------------------------------------------------------
-# These are the properties for the Pull Service, the service
-# that works in conjuction with the Turbine Pull Model API.
-# -------------------------------------------------------------------
-
-# This is a tool that allows access to the scheduler service.
-tool.request.scheduler=org.apache.turbine.services.schedule.SchedulerTool
-
-]]></source>
-
-<p>
-    Jobs are stored and retrieved from the database using Torque
-    generated objects.  The objects are based on the definition
-    stored in <code>scheduler-schema.xml</code>.  If you want to
-    add additional fields to track more information about your
-    scheduled tasks, you can modify this file to do so.  You will
-    need to rebuild Turbine using MAven after making your modifications.
-</p>
-
-</section>
-
-<section name="Usage">
-
-<p>
-To create an object that takes advantage of the Schedule Service, the task
-to be executed will need to be embedded in the run() method of an object
-which extends the ScheduledJob Class. For instance:
-</p>
-
-<source><![CDATA[
-
-package com.mycompany.modules.scheduledjobs;
-
-
-//JDK
-import java.util.Date;
-
-//Turbine
-import org.apache.turbine.modules.ScheduledJob;
-import org.apache.turbine.services.schedule.JobEntry;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-
-public class SimpleScheduledTask extends ScheduledJob
-{
-    /** Logging */
-    private static Log log = LogFactory.getLog(SimpleScheduledTask.class);
-
-    private int taskcount = 0;
-
-    /**
-     * Constructor
-     */
-     public SimpleScheduledTask()
-     {
-         //do Task initialization here
-     }
-
-
-    /**
-     * Run the Jobentry from the scheduler queue.
-     * From ScheduledJob.
-     *
-     * @param job The job to run.
-     */
-    public void run( JobEntry job ) throws Exception
-    {
-        log.note("Scheduled job " + job.getJobId() + " : " +
-                 "task: " + job.getTask() +
-                 " ran @: " +
-                 new Date(System.currentTimeMillis()).toString() +
-                 " taskcount " + taskcount
-                 );
-        //iterate the task counter
-        taskcount++;
-    }
-}
-
-]]></source>
-
-<p>
-The SimpleScheduledTask object makes an entry into the turbine.log each
-time the Task is run by the Schedule Service. The JobEntry object carries the
-information the Service uses to determine the frequency of the Task.
-Note that the object is in the com.mycompany.modules. This assumes that the
-package com.mycompany.modules is in the Turbine module path, which is in the
-module.packages directive in the TurbineResources.properties.
-The ScheduledJobLoader object loads the Task upon Turbine initilization also
-searches for a <i>scheduledjobs</i> package which contains the Task object.
-</p>
-
-<p>
-Control of the time between, or to, execution of the Task, is controlled by
-the JobEntry object. The JobEntry serves as a wrapper for the scheduled task.
-The constructor is as follows:
-</p>
-
-<source><![CDATA[
-
-public JobEntry(int sec, int min, int hour,
-                int wd, int day_mo, String task)
-                throws Exception
-
-]]></source>
-
-<p>
-The granularity of the Task's next execution can be controlled to the level
-of seconds. In the above constructor, sec represents the seconds with a valid
-range of 0-59, min represents the minutes with a valid range of 0-59,
-hour represents the hours with a valid range of 0-23, wd is the day of the
-week with a valid range of 1-7, day_mo is the day of the month with a valid
-range of 1-31 and task is the name of the object. The JobEntry constructor
-allows for the Task to be run at a certain point in time. For example:
-</p>
-
-<source><![CDATA[
-
-JobEntry je = new JobEntry(0,25,-1,-1,-1,"SimpleScheduledTask");
-
-  o run every 25 minutes.
-
-JobEntry je = new JobEntry(0,0,8,-1,15,"SimpleScheduledTask");
-
-  o run at 8:00am on the 15th of the month every month.
-
-]]></source>
-
-<p>
-The Schedule Service will only execute Tasks at Turbine Initialization that
-are present in the Database. To add a Task to the Database we need to set up
-an Action class that can be accessed from a template with:
-</p>
-
-<source><![CDATA[
-
-$page.SetTitle("SimpleScheduleTask Starter Page")
-
-Set Values for SimpleScheduleTask and then start it for the first time.
-<br />
-
-<form>
-<input type="hidden" name="action" value="SchedulerStart" />
-<input type="text" name="second" size="20" /> : seconds (0-59)<br />
-<input type="text" name="minute" size="20" /> : minutes (0-59)<br />
-<input type="text" name="hour" size="20" /> : hours (0-23)<br />
-<input type="text" name="weekday" size="20" /> : Day of the Week (1-7)<br />
-<input type="text" name="day_of_month" size="20" /> Day of the Month (1-31)<br />
-<input type="text" name="task" value="SimpleSchedulerTask" /> : The Task being scheduled. <br />
-<input type="text" name="email" /> : Email<br />
-</form>
-
-]]></source>
-
-<p>
-and the appropriate Action class:
-</p>
-
-<source><![CDATA[
-
-package com.mycompany.modules.actions;
-
-
-//Turbine
-import org.apache.turbine.modules.actions.VelocityAction;
-import org.apache.turbine.services.schedule.JobEntry;
-import org.apache.turbine.services.schedule.TurbineScheduler;
-import org.apache.turbine.services.TurbineServices;
-import org.apache.turbine.util.ParameterParser;
-import org.apache.turbine.util.RunData;
-
-
-public class AddScheduledTask extends VelocityAction
-{
-
-     public void doPerform(RunData data) throws Exception
-     {
-        ParameterParser params = data.getParameters();
-
-        int second = params.getInt("second",-1);
-        int minute = params.getInt("minute",-1);
-        int hour = params.getInt("hour",-1);
-        int weekday = params.getInt("weekday",-1);
-        int dom = params.getInt("day_of_month",-1);
-        String task = params.getString("task","");
-        String email = params.getString("email","");
-
-        try
-        {
-            //create a new JobEntry with the time constraints from
-            //the template as the arguments
-            JobEntry je =  new JobEntry(second,minute,hour,weekday,dom,task);
-
-            //set the email for notification
-            je.setEmail(email);
-
-            //add the job to the queue
-            TurbineScheduler.addJob(je);
-
-            //set the Message
-            data.setMessage("Task " + task + " added successfully");
-        }
-        catch (Exception e)
-        {
-            //set the Message
-            data.setMessage("Task " + task + " could not be added!");
-        }
-
-        // Note: The template "SchedulerStatus.vm" is not part of Turbine.
-        // It is only here as an example how you might implement this action.
-        setTemplate(data, "SchedulerStatus.vm");
-
-     }
-}
-
-]]></source>
-
-<p>
-    The AddScheduledTask action class adds the task to the job queue.  The job
-    will also be written to database so that it will be automatically loaded
-    the next time that Turbine starts.
-</p>
-<p>
-    The AddScheduledTask action class is really only part of what you would need
-    to implement in order to control the job scheduler from a web interface.  It
-    is given as a VERY simple example of how you might implement such functionality.
-    In a more complete implementation, you would have templates to create/edit a scheduled
-    task, display all tasks, and control the scheduler.  You would also have action(s)
-    to enable/disable the scheduler and add/update/remove scheduled tasks.
-</p>
-<p>
-    The TurbineScheduler class exposes methods that allow the
-    Scheduler process to be monitored and controlled, such as getJob(int oid),
-    removeJob(JobEntry je), updateJob(JobEntry je), listJobs(), startScheduler(),
-    stopScheduler(), and others.  See the javadocs on this class for more details.
-</p>
-<p>
-    There is also a pull tool for use with the scheduler service (assuming the pull service
-    is enabled).  This tool allows you to get basic information from the scheduler service
-    for use in a Velocity template.  It provides methods such as getJob(jobId), listJobs(),
-    isEnabled(), and others.  See the javadocs for more details.
-</p>
-
-<p>
-    The Scheduler Service uses a seperate thread for each Task it runs to ensure
-    that every job runs on time. It's the programmer's responsibility to ensure
-    that proper precautions to handle issues such as synchronization and long
-    running jobs. As always, check through the relevant Javadocs and source code
-    for more details on the Scheduler Service.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/security-service.xml b/xdocs/services/security-service.xml
deleted file mode 100644
index 685b789..0000000
--- a/xdocs/services/security-service.xml
+++ /dev/null
@@ -1,352 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Security Service</title>
- </properties>
-
-<body>
-
-<section name="Security Service">
-
-<p>
-The Security Service is for authenticating users and assigning them roles
-and permissions in groups. 
-</p>
-<p>
-In Turbine 2.3 a replacement for the default DBSecurityService is
-provided that makes it possible to map the security service onto an
-pre existing user structure and much easier to extend the TurbineUser 
-table to include additional columns - see <a 
-href="torque-Security-service.html"> Torque Security Service</a> for 
-configuration details. 
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-#
-# Here you specify, which Security Service is used. This example
-# uses the Database (DB) Security Service. There is no default.
-
-services.SecurityService.classname=org.apache.turbine.services.security.db.DBSecurityService
-.
-.
-.
-
-# -------------------------------------------------------------------
-#
-#  S E C U R I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-#
-# This is the class that implements the UserManager interface to
-# manage User objects. Default is the UserManager from the
-# DBSecurityService. 
-# Override this setting if you want your User information stored
-# on a different medium (LDAP directory is a good example).
-#
-# Adjust this setting if you change the Setting of the SecurityService class (see above).
-
-# Default: org.apache.turbine.services.security.db.DBUserManager
-services.SecurityService.user.manager = org.apache.turbine.services.security.db.DBUserManager
-
-#
-# These are the default classes used by the Security Service to
-# provide User, Group, Role and Permission objects. 
-# You want to override this setting only if you want your
-# implementation to provide application specific addtional
-# functionality.
-#
-# For LDAP use:
-# services.SecurityService.user.class=org.apache.turbine.services.security.ldap.LDAPUser
-# LDAP does not yet provide custom Group, User and Role objects so you
-# must use it with the default TurbineGroup, TurbineRole and
-# TurbinePermission objects.
-#
-# Class for User. Default: org.apache.turbine.om.security.TurbineUser
-services.SecurityService.user.class=org.apache.turbine.om.security.TurbineUser
-# Class for Group. Default: org.apache.turbine.om.security.TurbineGroup
-services.SecurityService.group.class=org.apache.turbine.om.security.TurbineGroup
-# Class for Role. Default: org.apache.turbine.om.security.TurbineRole
-services.SecurityService.role.class=org.apache.turbine.om.security.TurbineRole
-# Class for Permission. Default: org.apache.turbine.om.security.TurbinePermission
-services.SecurityService.permission.class=org.apache.turbine.om.security.TurbinePermission
-
-#
-# This is the class that implements the ACL interface.
-# You want to override this setting only if you want your ACL
-# implementation to provide application specific addtional
-# functionality.
-#
-
-# Default: org.apache.turbine.util.security.TurbineAccessControlList
-services.SecurityService.acl.class = org.apache.turbine.util.security.TurbineAccessControlList
-
-#
-# This setting is DBSecurityService specific - this class is consulted for the names
-# of the columns in the users' tables for the purpose of creating join queries.
-# If you use your own User implementation in conjunction with DBSecurityService,
-# it's peer class must implement org.apache.turbine.om.security.peer.UserPeer interface,
-# and you need to specify the name of the peer class here.
-#
-# Default: org.apache.turbine.om.security.peer.TurbineUserPeer
-#
-services.SecurityService.userPeer.class=org.apache.turbine.om.security.peer.TurbineUserPeer
-
-#
-# This is used by the SecurityService to make the password checking
-# secure. When enabled, passwords are transformed by a one-way
-# function into a sequence of bytes that is base64 encoded.
-# It is impossible to guess the plain-text form of the password
-# from the representation. When user logs in, the entered password
-# is transformed the same way and then compared with stored value.
-#
-# Default: false
-#
-
-services.SecurityService.secure.passwords=false
-
-#
-# This property lets you choose what digest algorithm will be used
-# for encrypting passwords. Check documentation of your JRE for
-# available algorithms.
-#
-# Default: SHA
-#
-
-services.SecurityService.secure.passwords.algorithm=SHA
-
-# Configuration for the LDAP Security Service implementation
-
-#services.SecurityService.ldap.security.athentication=simple
-#services.SecurityService.ldap.port=<LDAP PORT>
-#services.SecurityService.ldap.host=<LDAP HOST>
-#services.SecurityService.ldap.admin.username=<ADMIN USERNAME>
-#services.SecurityService.ldap.admin.password=<ADMIN PASSWORD>
-#services.SecurityService.ldap.user.basesearch=<SEARCH PATTERN>
-#services.SecurityService.ldap.user.search.filter=<SEARCH FILTER>
-#services.SecurityService.ldap.dn.attribute=userPrincipalName
-#services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# This property specifies the type of security authentication
-#
-# Default: simple
-#
-
-# services.SecurityService.ldap.security.authentication=simple
-
-#
-# The host name where the LDAP server is listenting.
-#
-# Default: localhost
-#
-
-# services.SecurityService.ldap.host=localhost
-
-#
-# The port number where the LDAP server is listenting.
-#
-# Default: 389
-#
-
-# services.SecurityService.ldap.port=389
-
-#
-# The user name of the admin user. The admin user should be able to
-# read from the LDAP repository.
-# Characteres '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.username=turbineUserUniqueId/turbine%dc/example%dc/com
-
-#
-# The password of the admin user.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.admin.password=turbine
-
-#
-# The class name of the ldap provider.
-#
-# Default: com.sun.jndi.ldap.LdapCtxFactory
-#
-
-# services.SecurityService.ldap.provider=com.sun.jndi.ldap.LdapCtxFactory
-
-#
-# The directory base to search.
-# '/' are replaced by '=' and '%' are replaced by ','.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.basesearch=dc/example%dc/com
-
-#
-# The unique id. It must be an integer field and it is required only when
-# the users are in LDAP but the groups, roles and permissions are in the
-# Database.
-#
-# services.SecurityService.ldap.user.userid=
-
-#
-# This property maps the username with an attribute in LDAP.
-#
-# Default: turbineUserUniqueId
-#
-
-# services.SecurityService.ldap.user.username=turbineUserUniqueId
-
-#
-# This property maps the firstname with an attribute in LDAP.
-#
-# Default: turbineUserFirstName
-#
-
-# services.SecurityService.ldap.user.firstname=turbineUserFirstName
-
-#
-# This property maps the lastname with an attribute in LDAP.
-#
-# Default: turbineUserLastName
-#
-
-# services.SecurityService.ldap.user.lastname=turbineUserLastName
-
-#
-# This property maps the email with an attribute in LDAP.
-#
-# Default: turbineUserMailAddress
-#
-
-# services.SecurityService.ldap.user.email=turbineUserMailAddress
-
-#
-# This property maps the userPassword with an attribute in LDAP.
-#
-# Default: none
-#
-
-# services.SecurityService.ldap.user.password=userPassword
-
-
-]]></source>
-
-</section>
-
-<section name="User Manager">
-
-<p>
-To access user specific data and information, each Security Service
-must provide an UserManager class. It is service specific and must be
-configured in TurbineResource.properties with the
-<i>service.SecurityService.user.manager</i> property. The UserManager
-allows access to various properties of an Turbine User object, can
-change password, authenticate users to the Security service and
-manages the Turbine user objects.
-</p>
-
-</section>
-
-<section name="Security Objects">
-<p>
-The Security Service allows you to configure the various
-objects used to implement the User, Group, Role and Permission
-interfaces. These objects are typically service specific, so you
-should consult the documentation to the Security Service
-implementation, which objects should be used. The default are the
-object classes from the DB Security Service:
-
-<table>
-<tr>
-<th>Object type</th>
-<th>Property</th>
-<th>Class</th>
-</tr>
-<tr>
-<td>User</td>
-<td>service.SecurityService.user.class</td>
-<td>org.apache.turbine.om.security.TurbineUser</td>
-</tr>
-<tr>
-<td>Group</td>
-<td>service.SecurityService.group.class</td>
-<td>org.apache.turbine.om.security.TurbineGroup</td>
-</tr>
-<tr>
-<td>Role</td>
-<td>service.SecurityService.role.class</td>
-<td>org.apache.turbine.om.security.TurbineRole</td>
-</tr>
-<tr>
-<td>Permission</td>
-<td>service.SecurityService.permission.class</td>
-<td>org.apache.turbine.om.security.TurbinePermission</td>
-</tr>
-</table>
-</p>
-</section>
-
-<section name="Access Control List">
-<p>
-The Fulcrum security system is built on Access Control Lists
-(ACL). There is a default implementation included with the security
-service. If, for any reason, you need a different ACL implementation,
-you can change it with the <i>services.SecurityService.acl.class</i>
-property in Fulcrum.properties. If you provide a different class here,
-it must implement the
-<i>org.apache.fulcrum.security.util.AccessControlList</i> interface.
-</p>
-
-<p>
-Warning! In earlier versions of the Security Service,
-<i>org.apache.fulcrum.security.util.AccessControlList</i> was not an
-interface but a class and the implementation wasn't configurable. If
-you upgrade to this version of Fulcrum from an earlier version and get
-"IncompatibleClassChange" exceptions regarding to the
-AccessControlList class, then you need to recompile your application
-(there is no need to <b>rewrite</b> it, but you must <b>recompile</b>
-it).
-</p>
-
-</section>
-</body>
-</document>
diff --git a/xdocs/services/servlet-service.xml b/xdocs/services/servlet-service.xml
deleted file mode 100644
index cac4764..0000000
--- a/xdocs/services/servlet-service.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Servlet Service</title>
- </properties>
-
-<body>
-
-<section name="Servlet Service">
-
-<p>
-The Servlet Service encapsulates the information provided by the
-ServletContext API, and makes it available from anywhere in the code.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.ServletService.classname=\
-  org.apache.turbine.services.servlet.TurbineServletService
-.
-.
-.
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-Upon initialization, this service remembers the servlet configuration
-for the application, and is able to provide back information about
-this configuration.  After the service has been initialized, it
-supports the following functionality:
-
- <ul>
-
-  <li>
-Create an URL from a URI string which is relative to the context.
-  </li>
-
-  <li>
-Provide the complete filesystem path for a given URI.
-  </li>
-
-  <li>
-Expand a string that points to a relative path or path list,
-leaving it as an absolute path based on the servlet context.
-  </li>
-
- </ul>
-
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/session-service.xml b/xdocs/services/session-service.xml
deleted file mode 100644
index 2ad3b69..0000000
--- a/xdocs/services/session-service.xml
+++ /dev/null
@@ -1,135 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Session Service</title>
- </properties>
-
-<body>
-
-<section name="Overview">
-
-<p>
-    The Session Service was created to allow Turbine based applications
-    to access information about the current sessions in the
-    application's context.  Some of the most obvious uses would include
-    <ul>
-        <li>Count of the active sessions</li>
-        <li>Determine if a given user is already logged in on another
-            session
-        </li>
-        <li>Terminate a session</li>
-    </ul>
-</p>
-
-<p>
-    The service is implemented by using a listener configured in
-    your application's deployment descriptor.  The listener class
-    is used by the container to notify the service when sessions
-    are created or destroyed.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<p>
-    You will need to modify a few files in order to activate the service.
-    The first modification will be in your TurbineResources.properties.
-    See the example below for two settings that need to be present in
-    order for the service to work.
-</p>
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.SessionService.classname=org.apache.turbine.services.session.TurbineSessionService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  S E S S I O N  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-services.SessionService.earlyInit=true
-
-]]></source>
-
-<p>
-    The next modification will be your application's deployment
-    descriptor (web.xml).  Here we will configure the listener class.
-</p>
-
-<source><![CDATA[
-<?xml version="1.0" encoding="UTF-8"?>
-<!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>
-
-    <listener>
-        <listener-class>org.apache.turbine.services.session.SessionListener</listener-class>
-    </listener>
-
-    <servlet>
-        <servlet-name>MyServletName</servlet-name>
-        <servlet-class>org.apache.turbine.Turbine</servlet-class>
-        <init-param>
-            <param-name>properties</param-name>
-            <param-value>/WEB-INF/conf/TurbineResources.properties</param-value>
-        </init-param>
-    </servlet>
-
-</web-app>
-]]></source>
-
-<p>
-    There is also a pull tool avilable for accessing this service.  To make it
-    available for use in your velocity templates, add the following line to
-    your TR.props file.
-</p>
-<source><![CDATA[
-tool.session.sessionmgt = org.apache.turbine.services.session.SessionTool
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-    The Session Service should be accessed through the
-    <code>org.apache.turbine.services.session.TurbineSession</code> class or the
-    pull tool.  See the javadocs for both classes for more usage information.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/template-service.xml b/xdocs/services/template-service.xml
deleted file mode 100644
index 7bd6828..0000000
--- a/xdocs/services/template-service.xml
+++ /dev/null
@@ -1,253 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Template Service</title>
- </properties>
-
-<body>
-
-<section name="Template Service">
-
-<p>
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-#
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.TemplateService.classname=org.apache.turbine.services.template.TurbineTemplateService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  T E M P L A T E  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Roughly, the number of templates in each category.
-#
-# Defaults: layout=2, navigation=10, screen=50
-
-services.TemplateService.layout.cache.size=2
-services.TemplateService.navigation.cache.size=10
-services.TemplateService.screen.cache.size=50
-
-#
-# These are the mapper classes responsible for the lookup of Page, Screen, Layout and Navigation classes according
-# to the supplied template Name. They also map template names on the Layout and Screen file names to be used.
-#
-services.TemplateService.mapper.page.class                = org.apache.turbine.services.template.mapper.DirectMapper
-services.TemplateService.mapper.screen.class              = org.apache.turbine.services.template.mapper.ClassMapper
-services.TemplateService.mapper.layout.class              = org.apache.turbine.services.template.mapper.ClassMapper
-services.TemplateService.mapper.navigation.class          = org.apache.turbine.services.template.mapper.ClassMapper
-services.TemplateService.mapper.layout.template.class     = org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-services.TemplateService.mapper.screen.template.class     = org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-services.TemplateService.mapper.navigation.template.class = org.apache.turbine.services.template.mapper.DirectTemplateMapper
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-<p>The Template Service itself can't render View pages. It is responsible for
-matching actual Template Files and Java classes to passed template names. Template
-names are "," separated entities which describe a template screen to be displayed.
-</p>
-
-<p>Note: In all of the following examples, it is assumed that you use
-the <a href="velocity-service.html">VelocityService</a> as
-your preferred view service. So if you read "Velocity" in the
-following paragraphs, this means "default configured view
-class". Currently, Turbine includes two supported view services,
-<a href="velocity-service.html">Velocity</a> and
-<a href="jsp-service.html">Java Server Pages (JSP)</a>.
-</p>
-
-<p>
-  If you want to render a template, a search path is used to find
-  a Java class which might provide information for the context of
-  this template.
-</p>
-
-<p><u>The two golden rules when using Templates with Turbine</u></p>
-
-<ul>
-  <li>1) Many examples and docs from older Turbine code show template
-         paths with a slashes.<br/>
-         Repeat after me: <b>TEMPLATE NAMES NEVER CONTAIN SLASHES!</b><br/>
-         Template names are separated by "," (the colon). </li>
-  <li>2) Many examples and docs from older Turbine code show templates
-         that start with "/". This is not only a violation of the rule
-         above but actively breaks things like loading templates from
-         a jar with the velocity jar loader.<br/>
-         Repeat after me: <b>TEMPLATE NAMES ARE NOT PATHS. THEY'RE NOT ABSOLUTE AND HAVE NO LEADING /</b>.</li>
-</ul>
-
-<p>
-  If you keep these rules in mind when writing template names, you will never have
-  trouble loading a template.
-</p>
-
-<p>
-  If you request e.g. the template screen "about,directions,Driving.vm"
-  then the following class names are searched (on the module search
-  path):
-</p>
-
-<ul>
-  <li>1. about.directions.Driving     &lt;- direct matching the template to the class name</li>
-  <li>2. about.directions.Default     &lt;- matching the package, class name is Default</li>
-  <li>3. about.Default                &lt;- stepping up in the package hierarchy, looking for Default</li>
-  <li>4. Default                      &lt;- Class called "Default" without package</li>
-  <li>5. VelocityScreen               &lt;- The class configured by the Service (VelocityService) to use</li>
-</ul>
-
-<p>
-  And if you have the following module packages configured in your TurbineResources.properties:
-  "module.packages = org.apache.turbine.modules, com.mycorp.modules",
-  then the class loader will look for
-</p>
-
-<ul>
-  <li>org.apache.turbine.modules.screens.about.directions.Driving</li>
-  <li>com.mycorp.modules.screens.about.directions.Driving</li>
-  <li>org.apache.turbine.modules.screens.about.directions.Default</li>
-  <li>com.mycorp.modules.screens.about.directions.Default</li>
-  <li>org.apache.turbine.modules.screens.about.Default</li>
-  <li>com.mycorp.modules.screens.about.Default</li>
-  <li>org.apache.turbine.modules.screens.Default</li>
-  <li>com.mycorp.modules.screens.Default</li>
-  <li>org.apache.turbine.modules.screens.VelocityScreen</li>
-  <li>com.mycorp.modules.screens.VelocityScreen</li>
-</ul>
-
-<p>
-  Most of the times, you don't have any backing Java class for a
-  template screen, so the first match will be
-  org.apache.turbine.modules.screens.VelocityScreen
-  which then renders your screen.
-</p>
-
-<p>
-  Please note, that your Screen Template (Driving.vm) must exist!
-  If it does not exist, the Template Service will report an error.
-</p>
-
-<p>
-  Once the screen is found, the template service will look for
-  the Layout and Navigation templates of your Screen. Here, the
-  template service looks for matching template names!
-</p>
-
-<p>
-  Consider our example:  about,directions,Driving.vm (Screen Name)
-</p>
-
-<p>
-  Now the template service will look for the following Navigation
-  and Layout templates:
-</p>
-
-<ul>
-  <li>1. about,directions,Driving.vm      &lt;- exact match</li>
-  <li>2. about,directions,Default.vm      &lt;- package match, Default name</li>
-  <li>3. about,Default.vm                 &lt;- stepping up in the hierarchy</li>
-  <li>4. Default.vm                       &lt;- The name configured as default.layout.template in the Velocity service.</li>
-</ul>
-
-<p>
-  If you now wonder how a template name is mapped to an actual file name: This is
-  scope of the templating engine. <a href="velocity-service.html">Velocity</a>
-  e.g. has this wonderful option to load templates from jar archives.
-  There is no file but if you tell velocity "get about,directions,Driving.vm" and it
-  returns the rendered template. So getting the actual template is not the job of the
-  Templating Service but of the Template rendering services.
-</p>
-</section>
-
-<section name="Properties">
-<p>
-  The mapping of classes and template paths to template names is configured in
-  mapper classes. These are pluggable and can be exchanged to configure other mapping
-  policies. This is an option for seasoned Turbine developers and the default policy
-  shouldn't be changed lightly.
-</p>
-
-<ul>
-  <li>
-    services.TemplateService.mapper.page.class configures the mapper
-    used for finding a page class suitable for the supplied template
-    name. Default is org.apache.turbine.services.template.mapper.DirectMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.screen.class configures the mapper
-    used for finding a screen class suitable for the supplied template
-    name. Default is org.apache.turbine.services.template.mapper.ClassMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.layout.class configures the mapper
-    used for finding a layout class suitable for the supplied template
-    name. Default is org.apache.turbine.services.template.mapper.ClassMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.navigation.class configures the
-    mapper used for finding navigation classes suitable for the
-    supplied template name. This mapper is not used directly but from
-    various navigation helpers like TemplateNavigation. Default is
-    org.apache.turbine.services.template.mapper.ClassMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.layout.template.class configures
-    the mapper used for finding a layout template to render your
-    screen. This template is used by your Layout class (see above) to
-    position the various visual elements like content and navigation
-    on the Page. Default is org.apache.turbine.services.template.mapper.LayoutTemplateMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.screen.template.class configures
-    the mapper used for finding your screen template. This is used
-    whenever a screen class is requesting a template to
-    render. Default is org.apache.turbine.services.template.mapper.ScreenTemplateMapper
-  </li>
-  <li>
-    services.TemplateService.mapper.navigation.template.class configures
-    the mapper used for finding your navigation template. This is used
-    whenever a navigation class is requesting a template to
-    render. Default is org.apache.turbine.services.template.mapper.DirectTemplateMapper
-  </li>
-</ul>
-</section>
-</body>
-</document>
diff --git a/xdocs/services/torque-security-schema.xml b/xdocs/services/torque-security-schema.xml
deleted file mode 100644
index 0a2a9b5..0000000
--- a/xdocs/services/torque-security-schema.xml
+++ /dev/null
@@ -1,438 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-<properties>
-  <title>Turbine Services - Torque Security Service Schema</title>
-</properties>
-
-<body>
-
-<section name="Overview">
-<p>
-This is the Turbine included schema for generating Torque Peers for
-the <a href="/services/torque-security-service.html">Torque Security Service</a>:
-</p>
-<table>
-<tr>
-  <th>Table Name</th>
-  <th>OM Class</th>
-  <th>Description</th>
-</tr>
-<tr>
-  <td><a href="#TURBINE_USER">TURBINE_USER</a></td>
-  <td>TurbineUser</td>
-  <td></td>
-</tr>
-<tr>
-  <td><a href="#TURBINE_GROUP">TURBINE_GROUP</a></td>
-  <td>TurbineGroup</td>
-  <td></td>
-</tr>
-<tr>
-  <td><a href="#TURBINE_ROLE">TURBINE_ROLE</a></td>
-  <td>TurbineRole</td>
-  <td></td>
-</tr>
-<tr>
-  <td><a href="#TURBINE_PERMISSION">TURBINE_PERMISSION</a></td>
-  <td>TurbinePermission</td>
-  <td></td>
-</tr>
-<tr>
-  <td><a href="#TURBINE_ROLE_PERMISSION">TURBINE_ROLE_PERMISSION</a></td>
-  <td>TurbineRolePermission</td>
-  <td></td>
-</tr>
-<tr>
-  <td><a href="#TURBINE_USER_GROUP_ROLE">TURBINE_USER_GROUP_ROLE</a></td>
-  <td>TurbineUserGroupRole</td>
-  <td></td>
-</tr>
-</table>
-</section>
-
-<section name="User Peer">
-<a name="TURBINE_USER"/>
-<p>
-The User Peer contains all information regarding a Turbine User.
-</p>
-<table>
-<tr>
-  <th>Name</th>
-  <th>Type</th>
-  <th>Size</th>
-  <th>Default</th>
-  <th>JavaName</th>
-  <th>Primary Key</th>
-  <th>Foreign Key</th>
-  <th>not null</th>
-  <th>Description</th>
-</tr>
-<tr>
-  <td>USER_ID</td>
-  <td>INTEGER</td>
-  <td> </td>
-  <td></td>
-  <td>UserId</td>
-  <td>X</td>
-  <td></td>
-  <td>X</td>
-  <td></td>
-</tr>
-<tr>
-  <td>LOGIN_NAME</td>
-  <td>VARCHAR</td>
-  <td> (64)</td>
-  <td></td>
-  <td>UserName</td>
-  <td></td>
-  <td></td>
-  <td>X</td>
-  <td></td>
-</tr>
-<tr>
-  <td>PASSWORD_VALUE</td>
-  <td>VARCHAR</td>
-  <td> (16)</td>
-  <td></td>
-  <td>Password</td>
-  <td></td>
-  <td></td>
-  <td>X</td>
-  <td></td>
-</tr>
-<tr>
-  <td>FIRST_NAME</td>
-  <td>VARCHAR</td>
-  <td> (64)</td>
-  <td></td>
-  <td>FirstName</td>
-  <td></td>
-  <td></td>
-  <td>X</td>
-  <td></td>
-</tr>
-<tr>
-  <td>LAST_NAME</td>
-  <td>VARCHAR</td>
-  <td> (64)</td>
-  <td></td>
-  <td>LastName</td>
-  <td></td>
-  <td></td>
-  <td>X</td>
-  <td></td>
-</tr>
-<tr>
-  <td>EMAIL</td>
-  <td>VARCHAR</td>
-  <td> (64)</td>
-  <td></td>
-  <td>Email</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-<tr>
-  <td>CONFIRM_VALUE</td>
-  <td>VARCHAR</td>
-  <td> (16)</td>
-  <td></td>
-  <td>Confirmed</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-<tr>
-  <td>MODIFIED</td>
-  <td>TIMESTAMP</td>
-  <td> </td>
-  <td></td>
-  <td>Modified</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-<tr>
-  <td>CREATED</td>
-  <td>TIMESTAMP</td>
-  <td> </td>
-  <td></td>
-  <td>CreateDate</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-<tr>
-  <td>LAST_LOGIN</td>
-  <td>TIMESTAMP</td>
-  <td> </td>
-  <td></td>
-  <td>LastLogin</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-<tr>
-  <td>OBJECTDATA</td>
-  <td>VARBINARY</td>
-  <td> </td>
-  <td></td>
-  <td>Objectdata</td>
-  <td></td>
-  <td></td>
-  <td></td>
-  <td></td>
-</tr>
-</table>
-</section>
-
-<section name="Group Peer">
-<a name="TURBINE_GROUP"/>
-<p>
-The Group Peer contains all information regarding the Turbine Groups.
-</p>
-<table border="1">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Size</th>
-    <th>Default</th>
-    <th>JavaName</th>
-    <th>Primary Key</th>
-    <th>Foreign Key</th>
-    <th>not null</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>GROUP_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>GroupId</td>
-    <td>X</td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>GROUP_NAME</td>
-    <td>VARCHAR</td>
-    <td> (64)</td>
-    <td></td>
-    <td>Name</td>
-    <td></td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-</table>
-</section>
-
-<section name="Role Peer">
-<a name="TURBINE_ROLE"/>
-<p>
-The Role Peer contains all information regarding a Turbine Role.
-</p>
-<table border="1">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Size</th>
-    <th>Default</th>
-    <th>JavaName</th>
-    <th>Primary Key</th>
-    <th>Foreign Key</th>
-    <th>not null</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>ROLE_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>RoleId</td>
-    <td>X</td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>ROLE_NAME</td>
-    <td>VARCHAR</td>
-    <td> (64)</td>
-    <td></td>
-    <td>Name</td>
-    <td></td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-</table>
-</section>
-
-<section name="User Peer">
-<a name="TURBINE_PERMISSION"/>
-<p>
-The Permission Peer contains all information regarding the Turbine
-Permissions.
-</p>
-<table border="1">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Size</th>
-    <th>Default</th>
-    <th>JavaName</th>
-    <th>Primary Key</th>
-    <th>Foreign Key</th>
-    <th>not null</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>PERMISSION_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>PermissionId</td>
-    <td>X</td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>PERMISSION_NAME</td>
-    <td>VARCHAR</td>
-    <td> (64)</td>
-    <td></td>
-    <td>Name</td>
-    <td></td>
-    <td></td>
-    <td>X</td>
-    <td></td>
-  </tr>
-</table>
-</section>
-
-<section name="Role / Permission Peer">
-<a name="TURBINE_ROLE_PERMISSION"/>
-<p>
-The Role / Permission Peer contains the relation between Roles and
-Permissions. It controls which Role has which Permissions assigned.
-</p>
-<table border="1">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Size</th>
-    <th>Default</th>
-    <th>JavaName</th>
-    <th>Primary Key</th>
-    <th>Foreign Key</th>
-    <th>not null</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>ROLE_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>RoleId</td>
-    <td>X</td>
-    <td>X</td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>PERMISSION_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>PermissionId</td>
-    <td>X</td>
-    <td>X</td>
-    <td>X</td>
-    <td></td>
-  </tr>
-</table>
-</section>
-
-<section name="User / Group / Role Peer">
-<a name="TURBINE_USER_GROUP_ROLE"/>
-<p>
-The User / Group / Role Peer contains the User / Group / Role relation
-which assigns Roles to an User according to its membership in a Group.
-</p>
-<table border="1">
-  <tr>
-    <th>Name</th>
-    <th>Type</th>
-    <th>Size</th>
-    <th>Default</th>
-    <th>JavaName</th>
-    <th>Primary Key</th>
-    <th>Foreign Key</th>
-    <th>not null</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>USER_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>UserId</td>
-    <td>X</td>
-    <td>X</td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>GROUP_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>GroupId</td>
-    <td>X</td>
-    <td>X</td>
-    <td>X</td>
-    <td></td>
-  </tr>
-  <tr>
-    <td>ROLE_ID</td>
-    <td>INTEGER</td>
-    <td> </td>
-    <td></td>
-    <td>RoleId</td>
-    <td>X</td>
-    <td>X</td>
-    <td>X</td>
-    <td></td>
-  </tr>
-</table>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/torque-security-service.xml b/xdocs/services/torque-security-service.xml
deleted file mode 100644
index d6e84dd..0000000
--- a/xdocs/services/torque-security-service.xml
+++ /dev/null
@@ -1,430 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Torque Security Service</title>
- </properties>
-
-<body>
-
-<section name="Torque Security Service">
-
-<p>
-This is an implementation of a Security Service which uses <a
-href="http://db.apache.org/torque/">Torque</a> generated
-peers to access the required security information.
-</p>
-
-<p>
-Older versions of the Security Service used hard coded Peers to access
-the security information. The current version can access arbitrary peers
-to retrieve the information and can be adapted to a pre-existing schema and
-use peer classes from outside Turbine. 
-</p>
-
-</section>
-
-<section name="Configuring the Security Service">
-<p>
-You need to configure Turbine to use the Torque Security Service:
-</p>
-<source><![CDATA[
-services.SecurityService.classname = org.apache.turbine.services.security.torque.TorqueSecurityService
-]]></source>
-
-<p>
-You must also tell the Security Service to use the Torque UserManager
-implementation:
-</p>
-<source><![CDATA[
-services.SecurityService.user.manager = org.apache.turbine.services.security.torque.TorqueUserManager
-]]></source>
-
-<p>
-See the <a href="security-service.html">Security Service</a> page
-for details of these and other properties that may also need to be configured.
-</p>
-
-</section>
-
-<section name="Using the supplied Peer classes">
-<p>
-When you start with the Security Service, you should use the Turbine
-supplied Peer classes to familiarize yourself with the workings of the
-Torque Security Service. Once you understand how the peer classes are
-accessed, you can customize to your own Peer classes. Turbine supplies
-the following peer classes and objects to retrieve data:
-
-<table>
-<tr>
-<th>Object type</th>
-<th>Function</th>
-<th>Class</th>
-</tr>
-<tr>
-<td rowspan="3">User</td>
-<td>Implementation</td>
-<td>org.apache.turbine.services.security.torque.TorqueUser</td>
-</tr>
-<tr>
-<td>Peer</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineUserPeer</td>
-</tr>
-<tr>
-<td>Persistent object</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineUser</td>
-</tr>
-<tr>
-<td rowspan="3">Group</td>
-<td>Implementation</td>
-<td>org.apache.turbine.services.security.torque.TorqueGroup</td>
-</tr>
-<tr>
-<td>Peer</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineGroupPeer</td>
-</tr>
-<tr>
-<td>Persistent object</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineGroup</td>
-</tr>
-<tr>
-<td rowspan="3">Role</td>
-<td>Implementation</td>
-<td>org.apache.turbine.services.security.torque.TorqueRole</td>
-</tr>
-<tr>
-<td>Peer</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineRolePeer</td>
-</tr>
-<tr>
-<td>Persistent object</td>
-<td>org.apache.turbine.services.security.torque.om.TurbineRole</td>
-</tr>
-<tr>
-<td rowspan="3">Permission</td>
-<td>Implementation</td>
-<td>org.apache.turbine.services.security.torque.TorquePermission</td>
-</tr>
-<tr>
-<td>Peer</td>
-<td>org.apache.turbine.services.security.torque.om.TurbinePermissionPeer</td>
-</tr>
-<tr>
-<td>Persistent object</td>
-<td>org.apache.turbine.services.security.torque.om.TurbinePermission</td>
-</tr>
-</table>
-
-If you retrieve objects from the Torque Security Service, you will always
-get the object classes in the "Implementation" rows. The Torque Security
-Service will use the peers described in the "Peer" rows and internally
-the implementation objects will use the objects from the "Persistent"
-rows. As you will see later, you can reconfigure the "Peer" and
-"Persistent" objects.
-</p>
-
-</section>
-
-<section name="Turbine supplied table schema">
-<p>
-The Peers and objects supplied with the Torque Security Service were generated
-from a Torque Schema. Its definition is <a href="/services/torque-security-schema.html">shown here</a>.
-</p>
-<p>
-Turbine uses the following configuration for accessing the Torque
-schema. If you just want to use the default Peers, you don't need any
-of the following configuration, these are the defaults:
-</p>
-<source><![CDATA[
-
-# This is the Peer class used to access the user peer (org.apache.turbine.services.security.torque.om.TurbineUserPeer)
-services.SecurityService.torque.userPeer.class = org.apache.turbine.services.security.torque.om.TurbineUserPeer
-
-# The columns in the peer used to retrieve information. These are the names of the constants
-# in the configured peer
-services.SecurityService.torque.userPeer.column.name       = LOGIN_NAME
-services.SecurityService.torque.userPeer.column.id         = USER_ID
-services.SecurityService.torque.userPeer.column.password   = PASSWORD_VALUE
-services.SecurityService.torque.userPeer.column.firstname  = FIRST_NAME
-services.SecurityService.torque.userPeer.column.lastname   = LAST_NAME
-services.SecurityService.torque.userPeer.column.email      = EMAIL
-services.SecurityService.torque.userPeer.column.confirm    = CONFIRM_VALUE
-services.SecurityService.torque.userPeer.column.createdate = CREATED
-services.SecurityService.torque.userPeer.column.lastlogin  = LAST_LOGIN
-services.SecurityService.torque.userPeer.column.objectdata = OBJECTDATA
-
-# These are the objects returned by the configured user peer (org.apache.turbine.services.security.torque.om.TurbineUser)
-services.SecurityService.torque.user.class = org.apache.turbine.services.security.torque.om.TurbineUser
-
-# These bean properties are queried from the returned object to retrieve the 
-# information
-services.SecurityService.torque.user.property.name         = UserName
-services.SecurityService.torque.user.property.id           = UserId
-services.SecurityService.torque.user.property.password     = Password
-services.SecurityService.torque.user.property.firstname    = FirstName
-services.SecurityService.torque.user.property.lastname     = LastName
-services.SecurityService.torque.user.property.email        = Email
-services.SecurityService.torque.user.property.confirm      = Confirmed
-services.SecurityService.torque.user.property.createdate   = CreateDate
-services.SecurityService.torque.user.property.lastlogin    = LastLogin
-services.SecurityService.torque.user.property.objectdata   = Objectdata
-
-# This is the Peer class used to access the Group Peer (org.apache.turbine.services.security.torque.om.TurbineGroupPeer)
-services.SecurityService.torque.groupPeer.class = org.apache.turbine.services.security.torque.om.TurbineGroupPeer
-
-# The columns in the peer used to retrieve information. These are the names of the constants
-# in the configured peer
-services.SecurityService.torque.groupPeer.column.name      = GROUP_NAME
-services.SecurityService.torque.groupPeer.column.id        = GROUP_ID
-
-# These are the objects returned by the configured group peer (org.apache.turbine.services.security.torque.om.TurbineGroup)
-services.SecurityService.torque.group.class = org.apache.turbine.services.security.torque.om.TurbineGroup
-
-# These bean properties are queried from the returned object to retrieve the 
-# information
-services.SecurityService.torque.group.property.name        = Name
-services.SecurityService.torque.group.property.id          = GroupId
-
-# This is the Peer class used to access the Role Peer (org.apache.turbine.services.security.torque.om.TurbineRolePeer)
-services.SecurityService.torque.rolePeer.class = org.apache.turbine.services.security.torque.om.TurbineRolePeer
-
-# The columns in the peer used to retrieve information. These are the names of the constants
-# in the configured peer
-services.SecurityService.torque.rolePeer.column.name       = ROLE_NAME
-services.SecurityService.torque.rolePeer.column.id         = ROLE_ID
-
-# These are the objects returned by the configured role peer (org.apache.turbine.services.security.torque.om.TurbineRole)
-services.SecurityService.torque.role.class = org.apache.turbine.services.security.torque.om.TurbineRole
-
-# These bean properties are queried from the returned object to retrieve the 
-# information
-services.SecurityService.torque.role.property.name         = Name
-services.SecurityService.torque.role.property.id           = RoleId
-
-# This is the Peer class used to access the Permission Peer (org.apache.turbine.services.security.torque.om.TurbinePermissionPeer)
-services.SecurityService.torque.permissionPeer.class = org.apache.turbine.services.security.torque.om.TurbinePermissionPeer
-
-# The columns in the peer used to retrieve information. These are the names of the constants
-# in the configured peer
-services.SecurityService.torque.permissionPeer.column.name = PERMISSION_NAME
-services.SecurityService.torque.permissionPeer.column.id   = PERMISSION_ID
-
-# These are the objects returned by the configured permission peer (org.apache.turbine.services.security.torque.om.TurbinePermission)
-services.SecurityService.torque.permission.class = org.apache.turbine.services.security.torque.om.TurbinePermission
-
-# These bean properties are queried from the returned object to retrieve the 
-# information
-services.SecurityService.torque.permission.property.name   = Name
-services.SecurityService.torque.permission.property.id     = PermissionId
-]]></source>
-<p>
-The column names and the bean properties do not always match, because
-you can change the name of the bean property with the javaName
-attribute in the Torque XML file.
-</p>
-<p>
-If you omit the class definition of the object classes
-(<i>torque.user.class</i>, <i>torque.group.class</i>, <i>torque.role.class</i>,
-<i>torque.permission.class</i>), the bean property OMClass in the peer is
-consulted which should return the default class that this peer
-returns.
-</p>
-</section>
-
-<section name="Configuring Torque Security Service to use your own peer classes">
-<p>
-The most interesting application for this is to extend some of the tables
-with more columns for additional data. In this example, the User table gets
-extended by two more columns called "TELEPHONE" and "FAX". 
-</p>
-<p>
-At first we create a new torque schema:
-</p>
-<source><![CDATA[
-  <table name="CUSTOM_USER" idMethod="idbroker">
-    <column name="USER_ID" required="true" primaryKey="true" type="INTEGER"/>
-    <column name="LOGIN_NAME" required="true" size="64" type="VARCHAR" javaName="UserName"/>
-    <column name="PASSWORD_VALUE" required="true" size="16" type="VARCHAR" javaName="Password"/>
-    <column name="FIRST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="LAST_NAME" required="true" size="64" type="VARCHAR"/>
-    <column name="EMAIL" size="64" type="VARCHAR"/>
-    <column name="CONFIRM_VALUE" size="16" type="VARCHAR" javaName="Confirmed"/>
-    <column name="MODIFIED" type="TIMESTAMP"/>
-    <column name="CREATED" type="TIMESTAMP" javaName="CreateDate"/>
-    <column name="LAST_LOGIN" type="TIMESTAMP"/>
-    <column name="OBJECTDATA" type="VARBINARY"/>
-
-    <column name="TELEPHONE" size="32" type="VARCHAR" javaName="Phone" />
-    <column name="FAX" size="32" type="VARCHAR"/>
-
-    <unique>
-        <unique-column name="LOGIN_NAME"/>
-    </unique>        
-]]></source>
-<p>
-Note a few things:
-<ul>
-<li>This schema is the same as the TURBINE_USER schema from Turbine with the addition of
-two columns. This is especially important with regard to the "javaName" attributes which configure
-the name of the property for this column in the persistent objects.</li>
-<li>The "TELEPHONE" column has its property name set to "Phone".</li>
-</ul>
-</p>
-<p>
-The Torque schema now gets translated into two java classes:
-<i>CustomUserPeer</i> for accessing the tables and <i>CustomUser</i> as objects
-returned by the Peer.
-</p>
-<p>
-Now we configure the Torque Security Service to for using this peer as UserPeer:
-</p>
-<source><![CDATA[
-# This is the Peer class used to access the user peer (org.apache.turbine.services.security.torque.om.TurbineUserPeer)
-services.SecurityService.torque.userPeer.class = CustomUserPeer
-]]></source>
-<p>
-Please note that we neither configure any column or property
-properties nor do we configure
-<i>services.SecurityService.torque.user.class</i>.  So the Torque Security
-Service will query the <i>CustomPeer</i> for the class of the returned
-objects.  Now Turbine uses your supplied Custom User Peer for querying
-User information. However you can't access your custom columns
-(yet)...
-</p>
-<p>
-Accessing your custom columns can be done in two ways. A simple and a complex:
-</p>
-<p>
-The simple way:
-</p>
-<source><![CDATA[
-   User user = TurbineSecurity.getUser("test");
-
-   String phone = ((CustomUser) (((TorqueUser) user).getPersistentObj())).getPhone();
-
-   /*  Better readable: */
-
-   User         u2  = TurbineSecurity.getUser("test2");
-   TorqueUser   tu2 = (TorqueUser) u2;
-   CustomUser   cu  = (CustomUser) u2.getPersistentObj();
-   String fax       = cu.getFax();
-]]></source>
-<p>
-Ugly, isn't it? If you get a class cast exception somewhere on the
-way, don't worry. Then you misconfigured either the Torque Security
-Service (CCE when doing tu2 = (TorqueUser) u2) or the peer (CCE when doing
-cu = (CustomUser) u2.getPersistentObj()).
-</p>
-<p>
-The elegant way:
-</p>
-<source><![CDATA[
-public class ExtendedUser extends TorqueUser
-{
-  public ExtendedUser()
-  {
-      super();
-  }
-
-  public ExtendedUser(Persistent obj)
-  {
-      super(obj);
-  }
-
-  public String getPhone()
-  {
-    return ((CustomUser) getPersistentObj()).getPhone();
-  }
-
-  public void setPhone(String phone)
-  {
-    ((CustomUser) getPersistentObj()).setPhone(phone);
-  }
-
-  public String getFax()
-  {
-    return ((CustomUser) getPersistentObj()).getFax();
-  }
-
-  public void setFax(String fax)
-  {
-    ((CustomUser) getPersistentObj()).setFax(fax);
-  }
-}
-
-TurbineResources.properties:
-
-services.SecurityService.user.class = ExtendedUser
-
-And then:
-
-ExtendedUser eu = (ExtendedUser) TurbineSecurity.getUser("test");
-String phone = eu.getPhone();
-]]></source>
-
-</section>
-
-<section name="Advanced customization">
-
-<p>
-Consider the following schema:
-</p>
-<source><![CDATA[
-<table name="CUSTOM_ROLE" idMethod="idbroker">
-  <column name="CUSTOM_ID"    required="true" primaryKey="true" type="INTEGER"/>
-  <column name="NAME_OF_ROLE" required="true" size="64" type="VARCHAR"/>
-
-  <unique>
-      <unique-column name="NAME_OF_ROLE"/>
-  </unique>
-  
-</table>
-]]></source>
-<p>
-If you want to use this as the role peer, you can configure the Torque Security Service like this:
-</p>
-<source><![CDATA[
-services.SecurityService.torque.rolePeer.class = CustomRolePeer
-
-# The columns in the peer used to retrieve information. These are the names of the constants
-# in the configured peer
-services.SecurityService.torque.rolePeer.column.name       = NAME_OF_ROLE
-services.SecurityService.torque.rolePeer.column.id         = CUSTOM_ID
-
-# These are the objects returned by the configured role peer (org.apache.turbine.services.security.torque.om.TurbineRole)
-services.SecurityService.torque.role.class = CustomRole
-
-# These bean properties are queried from the returned object to retrieve the 
-# information
-services.SecurityService.torque.role.property.name         = NameOfRole
-services.SecurityService.torque.role.property.id           = CustomId
-
-]]></source>
-<p>
-Of course you must assure that the necessary foreign key relations in
-the database are still valid. With some databases, e.g. MySQL this is
-not a big concern, because they don't support foreign keys at all.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/uniqueid-service.xml b/xdocs/services/uniqueid-service.xml
deleted file mode 100644
index 012c314..0000000
--- a/xdocs/services/uniqueid-service.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Unique ID Service</title>
- </properties>
-
-<body>
-
-<section name="Unique ID Service">
-
-<p>
-The UniqueId Service is an identifier generator that provides access to Turbine instance specific ID's in several different formats. 
-
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.UniqueIdService.classname=org.apache.turbine.services.uniqueid.TurbineUniqueIdService
-.
-.
-.
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-The Facade class, TurbineUniqueId, exposes three methods that produce unique identifiers:
-</p>
-
-<li>getInstanceId() returns an identifier for this Turbine instance that is unique both on the server and worldwide.</li>
-<li>getPseudorandomId() returns a unique identifier that looks like random data.</li>
-<li>getUniqueId() returns an identifier that is unique within this instance but does not have random-like appearance.</li>
-
-<p>
-As an example of the output for these Id's, the following is a screen:
-</p>
-
-<source><![CDATA[
- public class IdExample extends VelocityScreen
- {
-
-    
-    public void doBuildTemplate(RunData data , Context context) 
-        throws Exception
-    {
-       
-        context.put("instanceid", TurbineUniqueId.getInstanceId());
-        context.put("pseudorandomid", TurbineUniqueId.getPseudorandomId());
-        context.put("uniqueid", TurbineUniqueId.getUniqueId());
- 
-        super.doBuildTemplate(data,context);
-        
-        
-    }
- }
-]]></source>
-
-<p>
-With the Velocity template IdExample.vm being:
-</p>
-
-<source><![CDATA[
- 
- InstanceId() Output example  = $instanceid
-
- <br />
-
- PseudorandomId() Output example  = $pseudorandom
-
- <br />
-
- UniqueId() Output example  = $uniqueid   
-
-]]></source>
-
-<p>
-The output is:
-</p>
-
-<source><![CDATA[
- 
- InstanceId() Output example  = EC77218EC1291E714260FDF04BCB5008 
- PseudorandomId() Output example  = otzhj954w1
- UniqueId() Output example  = 00000000 
-
-]]></source>
-
-
-<p>
-Internally Turbine uses the service for naming of temporary files stored on the server as part of the Upload Service. The FileItem is named with the getInstanceId() method to avoid temporary file clashes until the system retrieves the file. 
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/upload-service.xml b/xdocs/services/upload-service.xml
deleted file mode 100644
index ed80ab6..0000000
--- a/xdocs/services/upload-service.xml
+++ /dev/null
@@ -1,169 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Upload Service</title>
- </properties>
-
-<body>
-
-<section name="Upload Service">
-
-<p>
-The Upload Service handles the parsing of multi-part/form-data from POST
-Requests, making the multi-part files available from either memory or from a
-specified location on the file system.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.UploadService.classname=org.apache.turbine.services.upload.TurbineUploadService
-.
-.
-.
-# -------------------------------------------------------------------
-#
-#  U P L O A D  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# Whether the files should be automatically picked up by
-# ParameterParser.
-
-services.UploadService.automatic=false
-
-#
-# The directory where files will be temporarily stored.
-#
-services.UploadService.repository=.
-
-#
-# The maximum size of a request that will be processed.
-#
-services.UploadService.size.max=1048576
-
-#
-# The maximum size of a request that will have it's elements cached in
-# memory by TurbineUploadService class.
-#
-services.UploadService.size.threshold=10240
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-Change the automatic directive to true. With this set to true any
-multi-part/form-data requests which Turbine fields, will be parsed and the
-appropriate files made available to ParameterParser as FileItem objects. If
-this is set as false, the FileItems will have to be parsed out of RunData
-manually with the method getRequest() available from TurbineUpload.
-</p>
-
-<p>
-Set the remaining values to ones approriate for your installation. On Win32
-file systems for the repository directive, an entry of the form:
-<ul>
-  <code>f:\path\to\upload\repository</code>
-</ul>
-is most likely necessary.
-</p>
-
-
-<p>
-Create an HTML form of the type:
-</p>
-
-<source test=""><![CDATA[
-
-<form enctype="multipart/form-data" method="POST">
-<input type="hidden" name="action" value="UploadExample" />
-<input type="file" name="filename">
-<input type="submit" value="upload" />
-</form>
-
-]]></source>
-
-<p>
-The Upload Service manages if the FileItem is stored in Memory or in the
-Repository specified in TurbineReources.properties. It is also possible to
-overide the TurbineResources setting for the repository by using
-TurbineUpload.getRequest()  to parse the request with a custom repository
-directory. The TurbineUpload object serves as a Facade to the Upload Service
-by making available static methods to manage the upload internally in your
-application. The FileItems can be accessed in an UploadExample Action class by:
-</p>
-
-<source test=""><![CDATA[
-    public void doPerform(RunData data, Context context) throws Exception
-    {
-        //get the ParameterParser from RunData
-        ParameterParser params = data.getParameters();
-
-        //grab the FileItems available in ParameterParser
-        FileItem fi = params.getFileItem("filename");
-
-        //do work on the FileItem
-        //get the file as a File
-        //or outputstream etc.
-
-    }
-
-]]></source>
-
-<p>
-Once a new instance of the FileItem is created many public methods are
-available to work on the object, whether it is in temporary storage as memory or as
-a temporary file on part of the file system. All the temporary storage management and
-clean up occurs behind the scenes and is transparent to the application being
-based on Turbine. There is no need to manually clean up the FileItems as the
-FileItem object doesn't span Requests ( or RunData instances ) and the temporary
-files that use the file system are cleaned up in a finalize() method inherited
-from Object().
-</p>
-
-<p>
-The TurbineUpload object and the FileItem object give all the functionality
-needed to manage this sort of operation or action at the application level.
-For more detailed information on the methods available to deal with uploaded
-files, view the relevant Javadocs for TurbineUpload, ParameterParser and
-FileItem.
-</p>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/velocity-service.xml b/xdocs/services/velocity-service.xml
deleted file mode 100644
index 7041517..0000000
--- a/xdocs/services/velocity-service.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - Velocity Service</title>
- </properties>
-
-<body>
-
-<section name="Velocity Service">
-
-<p>
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.VelocityService.classname = org.apache.turbine.services.velocity.TurbineVelocityService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  V E L O C I T Y  S E R V I C E
-#
-# -------------------------------------------------------------------
-
-# The location of Velocity configuration file, relative to webapp root
-# These properties will override the default properties set by Velocity.
-# You should specify the path to the templates directories as well as 
-# the path to the log file and they should also be relative to webapp root
-
-services.VelocityService.template.extension = vm
-services.VelocityService.default.page = VelocityPage
-services.VelocityService.default.screen = VelocityScreen
-services.VelocityService.default.layout = VelocityECSLayout
-services.VelocityService.default.navigation = VelocityNavigation
-services.VelocityService.default.error.screen = VelocityErrorScreen
-services.VelocityService.default.layout.template = Default.vm
-
-#
-# Set this to true to catch Velocity Errors and display them in the log file
-services.VelocityService.catch.errors = true
-
-services.VelocityService.runtime.log = /logs/velocity.log
-#services.VelocityService.input.encoding = UTF-8
-services.VelocityService.velocimacro.library = GlobalMacros.vm
-
-services.VelocityService.resource.loader = file
-services.VelocityService.file.resource.loader.description = Velocity File Resource Loader
-services.VelocityService.file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
-services.VelocityService.file.resource.loader.path = /templates/app
-services.VelocityService.file.resource.loader.cache = false
-services.VelocityService.file.resource.loader.modificationCheckInterval = 2
-
-services.VelocityService.resource.loader = classpath
-services.VelocityService.classpath.resource.loader.description = Velocity Classpath Resource Loader
-services.VelocityService.classpath.resource.loader.class = org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-</section>
-
-<section name="Properties">
-<ul>
-  <li>"services.VelocityService.catch.errors" controls the reporting of Velocity errors to the application (and to to the user).
-      If this is set to "true" (which is the default), errors are caught by Turbine and reported in the turbine.log file at 
-      error level. Velocity will get the String "[Turbine caught an Error here. Look into the turbine.log for further information]"
-      as return value (this might cause further errors down the road if you e.g. expect a numerical value or an object as the result
-      of a method), so if you see this message in your screen, follow the instructions.
-  </li>
-</ul>
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/xmlrpc-service.xml b/xdocs/services/xmlrpc-service.xml
deleted file mode 100644
index 30aae8f..0000000
--- a/xdocs/services/xmlrpc-service.xml
+++ /dev/null
@@ -1,185 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - XML-RPC Service</title>
- </properties>
-
-<body>
-
-<section name="XML-RPC Service">
-
-<p>
-  The XML-RPC service is the easiest way to add distributed
-  computing and B2B capabilities to your Turbine web application.
-  The current implementation is based on the Helma XML-RPC
-  package which can be found <a href="http://classic.helma.at/hannes/xmlrpc/">
-  here</a>.
-</p>
-
-<p>
-  You can leverage the XML-RPC service for your particular needs by
-  creating <strong>handlers</strong>. A handler is simply a class that
-  performs certain actions: for example you may have a FileHandler
-  that is responsible for sending, getting and removing files from
-  a remote server. For your convenience there is the <strong>
-  org.apache.turbine.services.xmlrpc.util.FileHandler</strong>
-  class that will perform these operations for you. Please refer
-  to the usage section below for more details.
-</p>  
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.XmlRpcService.classname=org.apache.turbine.services.xmlrpc.TurbineXmlRpcService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  X M L R P C  S E R V I C E
-#
-# -------------------------------------------------------------------
-# This property specifies which class should be used to parse
-# xml for XmlRpc functionality.
-#
-# Default: org.apache.xerces.parsers.SAXParser
-
-services.XmlRpcService.parser=org.apache.xerces.parsers.SAXParser
-
-# This property specifies which port the server part of the XmlRpc
-# should listen, if it is active.
-#
-# Default: 12345
-
-services.XmlRpcService.port=12345
-
-# If any classes are specified here, the Service will create an 
-# instance of them here and start up a listener on the specified 
-# port.
-#
-# Note that the handlers demonstrated are not very useful.  You
-# will have to invent your own services.  They do however
-# illustrate that any class with a default constructor can be
-# added here
-#
-# The handler parameter without further extension determines
-# the default handler for the service
-#
-# Default: no classes are specified by default
-
-#services.XmlRpcService.handler.$default=java.util.Hashtable
-#services.XmlRpcService.handler.stringhandler=java.lang.String
-
-# The following properties allow the transfer of data between
-# separate Turbine applications running on different servers.
-# This allows B2B type behavior such as sending database
-# updates in the form of XML or whatever type of data
-# that needs to be shared between Turbine applications
-# running on separate servers.
-
-services.XmlRpcService.handler.file = org.apache.turbine.services.xmlrpc.util.FileHandler
-services.XmlRpcService.paranoid = false
-services.XmlRpcService.acceptClient = 192.168.1.*
-services.XmlRpcService.denyClient = 
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-  The following example is taken from the class used to test the
-  file transfer features of the XML-RPC service. The <strong>
-  org.apache.turbine.services.xmlrpc.util.FileHandlerTest</strong>
-  can be found in the CVS repository. Here is how the FileHandler
-  might be used:
-</p>
-
-<source><![CDATA[
-
-public class XmlRpcExample
-{
-    /**
-     * We will test the following three operations:
-     * 
-     * 1) Send a file to a remove server
-     * 2) Get a file from a remote server
-     * 3) Remove a file to a remove server
-     */
-    public void testOperations() throws Exception
-    {
-        /*
-         * @param serverURL
-         * @param sourceLocationProperty
-         * @param sourceFileName
-         * @param destinationLocationProperty
-         * @param destinationFileName
-         */
-        FileTransfer.send("http://www.far-away.com:9000/RPC2",
-                          "test.location",
-                          "test.txt",
-                          "test.location",
-                          "test.send");
-        /*
-         * @param serverURL
-         * @param sourceLocationProperty
-         * @param sourceFileName
-         * @param destinationLocationProperty
-         * @param destinationFileName
-         */
-        FileTransfer.get("http://www.far-away.com:9000/RPC2",
-                         "test.location",
-                         "test.txt",
-                         "test.location",
-                         "test.get");
-
-        /*
-         * @param serverURL
-         * @param sourceLocationProperty
-         * @param sourceFileName
-         */
-        FileTransfer.remove("http://www.far-away.com:9000/RPC2",
-                            "test.location",
-                            "test.txt");
-    }
-}
-
-]]></source>
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/services/xslt-service.xml b/xdocs/services/xslt-service.xml
deleted file mode 100644
index 41e8e4c..0000000
--- a/xdocs/services/xslt-service.xml
+++ /dev/null
@@ -1,81 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine Services - XSLT Service</title>
- </properties>
-
-<body>
-
-<section name="XSLT Service">
-
-<p>
-    The XSLT service is a simple way to transform a well-formed
-    XML document into web content for your site. This may be
-    dynamic or static content. You can easily integrate the
-    XSLT service into a Turbine screen module, or you can
-    use the existing <strong>org.apache.turbine.modules.layouts.VelocityXslLayout</strong>
-    class to produce dynamic content.
-</p>
-
-</section>
-
-<section name="Configuration">
-
-<source><![CDATA[
-# -------------------------------------------------------------------
-# 
-#  S E R V I C E S
-#
-# -------------------------------------------------------------------
-# Classes for Turbine Services should be defined here.
-# Format: services.[name].classname=[implementing class]
-#
-# To specify properties of a service use the following syntax:
-# service.[name].[property]=[value]
-
-services.XSLTService.classname=org.apache.turbine.services.xslt.TurbineXSLTService
-.
-.
-.
-# -------------------------------------------------------------------
-# 
-#  X S L T  S E R V I C E
-#
-# -------------------------------------------------------------------
-services.XSLTService.path = /WEB-INF/stylesheets
-services.XSLTService.cache = false
-
-]]></source>
-
-</section>
-
-<section name="Usage">
-
-<p>
-  Please look at the <strong>org.apache.turbine.modules.layouts.VelocityXslLayout</strong>
-  for an example usage pattern.
-</p>  
-
-</section>
-
-</body>
-</document>
diff --git a/xdocs/todo.xml b/xdocs/todo.xml
deleted file mode 100644
index 93bff52..0000000
--- a/xdocs/todo.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>Turbine To Do</title>
- </properties>
-
-<body>
-
-<section name="Work to do for the current release">
-<p>
-This file is intended to collect ideas, problems and work
-to do with the current Turbine code. 
-</p>
-
-<subsection name="Work to do for the current release">
-<p>
-No current items. 
-</p>
-</subsection>
-
-<subsection name="Stuff that needs to be looked into (current release or next release)">
-<p>
-  <ul>
-    <li>Googlezation of URLs (<a href="http://marc.theaimsgroup.com/?l=turbine-user&amp;m=103008672127247&amp;w=2">See here</a>)</li>
-    <li>Make sure that pull tools get refreshed correctly under all circumstances</li>
-    <li>Check lifetimes of authorized and session tools if the application is not the standard login-logout application</li>
-    <li>Move AvalonComponentService to the Fortress container (suggested by the avalon-dev list)</li>
-  </ul>
-</p>
-</subsection>
-
-<subsection name="Blue Skying for future Turbine releases">
-<p>
-  <ul>
-    <li>Move forward to a component based architecture (avalonization)  (partly done!)</li>
-    <li>"Steal" the pipeline from the Turbine 3 code base  (done!  epugh)</li>
-    <li>Decouple the code base into core, components and toolbox</li>
-  </ul>
-</p>
-</subsection>
-
-</section>
-</body>
-</document>
diff --git a/xdocs/turbine-experiment.xml b/xdocs/turbine-experiment.xml
deleted file mode 100644
index 0b3a952..0000000
--- a/xdocs/turbine-experiment.xml
+++ /dev/null
@@ -1,143 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
- <properties>
-  <title>The Turbine Experiment</title>
- </properties>
-
-<body>
-
-<section name="The Turbine Experiment">
-
-<p>
-  
-  The following principles have been excerpted from
-  <em>The Oregon Experiment</em>. <em>The Oregon Experiment</em> 
-  is the third volume in a series of books written by
-  Christopher Alexander describing methodologies and patterns 
-  for designing healthy architechural structures that
-  satisfy human needs and contribute postively overall
-  to the surrounding ecology.
-
-</p>
-
-<p>
-  
-  Many people in OO design have drawn from the works of
-  Christopher Alexander and I thought it would be a fun
-  (and hopefully beneficial) experiment to systematically
-  apply Christopher Alexander's ideas to the development
-  of Turbine.
-
-</p>
-
-<p>
-  
-  <em>1. The principle of organic order.</em>
-  <br/>
-  Planning and construction will be guided by a
-  process which allows the whole to emerge
-  gradually from local acts.
-
-</p>
-
-<p>
-
-  <em>2. The principle of participation.</em>
-  <br/>
-  All decisions about what to build, and how to
-  build it, will be in the hands of the users.
-
-</p>
-
-<p>
-
-  <em>3. The principle of piecemeal growth.</em>
-  <br/>
-  The construction undertaken in each budgetary
-  period will be weighed overwhelmingly toward
-  small projects.
-
-</p>
-
-<p>
-
-  <em>4. The principle of patterns.</em>
-  <br/>
-  All design and construction will be guided by
-  a collection of communally adopted planning
-  principles called patterns.
-
-</p>
-
-<p>
-
-  <em>5. The principle of diagnosis.</em>
-  <br/>
-  The well being of the whole will be protected
-  by an annual diagnosis which explains, in detail,
-  which spaces are alive and which ones dead, at
-  any given moment in the history of the community.
-
-</p>
-
-<p>
-
-  <em>6. The principle of coordination.</em>
-  <br/>
-  Finally, the slow emergence of organic order in
-  the whole will be assured by a funding process
-  which regulates the stream of individual projects
-  put forward by users.
-
-</p>
-
-<p>
-  <a href="mailto:dl@cs.oswego.edu">Doug Lea</a> has written an
-  excellent article on the writings of Christoper Alexander and how
-  they relate to the practice of OO software development:
-  <a href="http://gee.cs.oswego.edu/dl/ca/ca/ca.html">
-  Christopher Alexander: An Introduction for Object-Oriented Designers
-  </a>
-
-</p>
-
-</section>
-
-<section name="References">
-
-<p>
-  
-  1. Alexander, C., M. Silverstein, S. Angel, S. Ishikawa, and D. Abrams, <em>The
-  Oregon Experiment</em>, Oxford University Press, 1975. ISBN: 0195018249.
-
-</p>
-
-<p>
-  Alexander, C., <em>Notes on the Synthesis of Form</em>, Harvard University Press,
-  1964. ISBN: 0674627512.
-</p>
-
-</section>
-
-
-</body>
-</document>
diff --git a/xdocs/turbine-schema.xml b/xdocs/turbine-schema.xml
deleted file mode 100644
index 61bd2ec..0000000
--- a/xdocs/turbine-schema.xml
+++ /dev/null
@@ -1,560 +0,0 @@
-<?xml version="1.0"?>
-<!-- 
-/*
- * Copyright 2001-2004 The Apache Software Foundation.
- * 
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT 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>
-
-<properties>
-    <title>Turbine Core Schema</title>
-</properties>
-
-<body>
-
-<section name="Turbine Schema">
-<p>
-The naming scheme is that the Turbine specific tables are prefixed with
-"TURBINE_". This is to avoid name collisions with applications for common tables
-such as PERMISSION or ROLE and also to avoid name collisions with reserved
-keywords in differant databases.
-</p>
-
-<p>
-<ul>
-    <li>TURBINE_PERMISSION</li>
-    <li>TURBINE_ROLE</li>
-    <li>TURBINE_GROUP</li>
-    <li>TURBINE_ROLE_PERMISSION</li>
-    <li>TURBINE_USER</li>
-    <li>TURBINE_USER_GROUP_ROLE</li>
-    <li>TURBINE_SCHEDULED_JOB</li>
-    <li>ID_TABLE</li>
-</ul>
-</p>
-</section>
-
-<section name="Relationships">
-<source test=""><![CDATA[
-TURBINE_USER  -|------o-< TURBINE_USER_GROUP_ROLE
-TURBINE_ROLE  -|------o-< TURBINE_USER_GROUP_ROLE
-TURBINE_GROUP -|------o-< TURBINE_USER_GROUP_ROLE
-TURBINE_ROLE  -|------o-< TURBINE_ROLE_PERMISSION
-TURBINE_PERMISSION -|------o-< TURBINE_ROLE_PERMISSION
-]]></source>
-</section>
-
-<section name="Table Schemas">
-<p>
-The data-types represented below are for the MySQL database.
-For other database specific data-types check the .sql scripts in
-the src/sql directory of the Turbine distribution.
-</p>
-
-<subsection name="ID_TABLE">
-<table>
-<tr>
-    <th>Column Name</th>
-    <th>Key</th>
-    <th>Data Type</th>
-    <th>Default Value</th>
-    <th>Null</th>
-    <th>Indexed</th>
-    <th>Comment</th>
-</tr>
-<tr>
-    <td>ID_TABLE_ID</td>
-    <td>Primary</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td>Yes</td>
-    <td>AUTOINCREMENT</td>
-</tr>
-<tr>
-    <td>TABLE_NAME</td>
-    <td>Unique</td>
-    <td>VARCHAR(255)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>UNIQUE</td>
-</tr>
-<tr>
-    <td>NEXT_ID</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td></td>
-    <td>NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>QUANTITY</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td></td>
-    <td>NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The ID_TABLE carries the information for the next ID
-number in the specified tables. This table is useful when
-the database being used has no data-type which carries out
-auto-increment operations.
-</p>
-</subsection>
-
-<subsection name="TURBINE_PERMISSION">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>PERMISSION_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td>AUTOINCREMENT</td>
-</tr>
-<tr>
-    <td>PERMISSION_NAME</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>UNIQUE</td>
-</tr>
-<tr>
-    <td>OBJECTDATA</td>
-    <td></td>
-    <td>MEDIUMBLOB</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_PERMISSION table stores the lowest level of permissions allowed
-for a Turbine User.
-</p>
-</subsection>
-
-<subsection name="TURBINE_ROLE">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>ROLE_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td>AUTO_INCREMENT</td>
-</tr>
-<tr>
-    <td>ROLE_NAME</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>UNIQUE</td>
-</tr>
-<tr>
-    <td>OBJECTDATA</td>
-    <td></td>
-    <td>MEDIUMBLOB</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_ROLE table links a Turbine User to a span of permissions.
-Potentially a Turbine User can have many roles within the system. In this case
-a role represents a descriptive word for a series of permissions or actions the
-Turbine User is able to undertake.
-</p>
-</subsection>
-
-<subsection name="TURBINE_GROUP">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>GROUP_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td>AUTOINCREMENT</td>
-</tr>
-<tr>
-    <td>GROUP_NAME</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>UNIQUE</td>
-</tr>
-<tr>
-    <td>OBJECTDATA</td>
-    <td></td>
-    <td>MEDIUMBLOB</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_GROUP table allows for a series of roles and Turbine Users to be
-connected under a Group ID and hence Group Name. For instance there may be a
-group named Administrators with the necessary roles and permissions. There may
-also be many Administrators on the system. The Group table and it's relationship
-with the TURBINE_USER_GROUP_ROLE table maps this functionality.
-</p>
-</subsection>
-
-<subsection name="TURBINE_ROLE_PERMISSION">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>ROLE_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td>Yes</td>
-    <td></td>
-</tr>
-<tr>
-    <td>PERMISSION_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td>Yes</td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_ROLE_PERMISSION table is a bridging table between TURBINE_ROLE and
-TURBINE_PERMISSION that allows a several differant roles to make use of the
-same permission.
-</p>
-</subsection>
-
-<subsection name="TURBINE_USER">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>USER_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>LOGIN_NAME</td>
-    <td></td>
-    <td>VARCHAR(32)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>UNIQUE</td>
-</tr>
-<tr>
-    <td>PASSWORD_VALUE</td>
-    <td></td>
-    <td>VARCHAR(32)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>FIRST_NAME</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>LAST_NAME</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>EMAIL</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>CONFIRM_VALUE</td>
-    <td></td>
-    <td>VARCHAR(32)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>MODIFIED</td>
-    <td></td>
-    <td>TIMESTAMP</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>CREATED</td>
-    <td></td>
-    <td>DATETIME</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>LAST_LOGIN</td>
-    <td></td>
-    <td>TIMESTAMP</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>OBJECTDATA</td>
-    <td></td>
-    <td>MEDIUMBLOB</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_USER table describes the basic information on the user in the
-system.
-</p>
-</subsection>
-
-<subsection name="TURBINE_USER_GROUP_ROLE">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>USER_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>GROUP_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>ROLE_ID</td>
-    <td>PRIMARY</td>
-    <td>INTEGER</td>
-    <td></td>
-    <td></td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-<p>
-The TURBINE_USER_GROUP_ROLE describes what roles a given user has as a member of
-a given group.
-</p>
-</subsection>
-
-<subsection name="TURBINE_SCHEDULED_JOB">
-<table>
-<tr>
-    <th>column name</th>
-    <th>key</th>
-    <th>data type</th>
-    <th>default value</th>
-    <th>null</th>
-    <th>indexed</th>
-    <th>comment</th>
-</tr>
-<tr>
-    <td>JOB_ID</td>
-    <td>PRIMARY</td>
-    <td>int(11)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td>AUTO_INCREMENT</td>
-</tr>
-<tr>
-    <td>SECOND</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td>-1</td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>MINUTE</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td>-1</td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>HOUR</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td>-1</td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>WEEK_DAY</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td>-1</td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>DAY_OF_MONTH</td>
-    <td></td>
-    <td>INTEGER</td>
-    <td>-1</td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>TASK</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NOT NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>EMAIL</td>
-    <td></td>
-    <td>VARCHAR(99)</td>
-    <td></td>
-    <td>NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-<tr>
-    <td>PROPERTY</td>
-    <td></td>
-    <td>VARBINARY</td>
-    <td></td>
-    <td>NULL</td>
-    <td></td>
-    <td></td>
-</tr>
-</table>
-</subsection>
-
-</section>
-
-</body>
-</document>